I need to get the primaries of an ICC profile. For example, for sRGB the required values are Red Green Blue x 0.64 0.30 0.15 y 0.33 0.60 0.06 I assume that with v1 profiles, these values were given by the 'chrm' tag (see <https://developer.apple.com/documentation/applicationservices/1560273-0_profiles?language=objc>) Als this tag seems to be v1 only, for v2 and v4 profiles, I looked at the 'rXYZ', 'gXYZ' and 'bXYZ' tags instead. However, each ICC document I looked at, gives another definition of these tags, e.g. for 'rXYZ' ICC v2, ICC.1 2001-04 "Relative XYZ values of red phosphor or colorant." ICCv4, ICC1v43_2010-12 "This tag contains the first column in the matrix, which is used in matrix/TRC transforms." iccMAX, ICC.2-2018 "The colorEncodingParamsStructure ceptRedPrimaryXYZMbr element represents the nCIEXYZ values of blue colour space encoding primary encoded using either 2 or 3 numbers. The first value represents the x chromaticity. The second value represents the y chromaticity. The third value (if present) represents the z chromaticity. If only two numbers are present the z chromaticity is assumed to be the value of one minus the sum of the two numbers. If three values are present the sum of the three values shall be 1.0." When I look at sRGB IEC61966-2.1 with the ColorSync Utility, I see that the 'rXYZ', 'gXYZ' and 'bXYZ' tags actually represent the values of a Bradford-corrected transformation matrix from sRGB D65 to XYZ D50. Can someone please clarify ? Thanks for the help. Regards, Adriaan van Os
Adriaan van Os wrote:
I need to get the primaries of an ICC profile. For example, for sRGB the required values are
Can someone please clarify ?
The answer is "it's complicated". In theory, just use the profile in Absolute Colorimetric intent, and feed 100% device values into it, one by one. But reality is a bit different. The focus of many of the changes to the ICC profile format seem to be the white point relative/PCS behavior of the profile, and a profile being a record of the CIE measurement values of the device behavior seems to have got rather lost in the changes. The ICCV2 profile spec. had a bit of a gap in it, in not providing a technically reasonable means of representing the chromatic adaptation from a displays actual white point to PCS (D50) white. The only documented means was the white point tag "Wrong Von Kries" transform, which, while acceptable for print profiles with white paper, shows its flaws when applied to the larger (typically) D65 to D50 white point shift necessary for displays. So some profile makers worked around the problem, and notably profiles like the (original HP/Microsoft) sRGB profile and the AdobeRGB profile applied a Bradford transform to the measured primary values, rather than "Wrong Von Kries". So to extract the measured primary values from such a profile, you had to know to apply a Bradford matrix in undoing the white point shift from D50 to the white point recorded in the white point tag when creating an Absolute Colorimetric transform. Other profile makers took a different approach, and simply hid the Bradford transform by applying it, but setting the white point tag to D50. For such a profile, there is no way of recovering the original primaries, and Absolute Colorimetric intent gave you Relative Colorimetric. A few profile makers used the "Wrong Von Kries" chromatic transform and put the true white point in the white point tag, and in this case the original primaries can be recovered by reversing the "Wrong Von Kries" chromatic adaptation in creating the Absolute Colorimetric Transform in the documented ICC V2 fashion. Latter on, the 'chad" tag was introduced, and this provided a means of reversing the chromatic adaptation even when the white point tag was set to D50. The disadvantage of this approach, is that while standard CMM's support Absolute Colorimetric intent which should restore the white point tag white point to the profile transform, they will not use the 'chad' tag, so display profiles built in the fashion are always relative intent with such CMMs. So a convenient means of recovering the primary values is not available with such profiles. ICCV4 embraced the latter approach as a standard. See <http://www.argyllcms.com/doc/ArgyllCMS_arts_tag.html> for another summary. Graeme Gill.
Graeme Gill wrote:
Adriaan van Os wrote:
I need to get the primaries of an ICC profile. For example, for sRGB the required values are
Can someone please clarify ?
The answer is "it's complicated".
Thanks for the detailed reply and the link. I need to study it carefully, to be able to follow up. As a side bar, I wonder about the Bradford and von Kries transforms. I see them often mentioned, but never the (allegedly more precise) revised CIECAM97s and CIECAM02 matrices <https://en.wikipedia.org/wiki/LMS_color_space>. Regards, Adriaan van Os
Adriaan van Os wrote:
As a side bar, I wonder about the Bradford and von Kries transforms.
Bradford is a Von Kries transform. A "Wrong" Von Kries transform is one in XYZ space, rather than some sort of sharpened cone space.
I see them often mentioned, but never the (allegedly more precise) revised CIECAM97s and CIECAM02 matrices
The subjective data that such transforms are based on, tend to be rather "noisy", so it's perfectly possible to arrive at different matrices that are optimal for a given data set, but in practice may not have huge differences. So there doesn't seem to be a great deal of consensus that any revised matrix is a definite or obvious improvement over Bradford. A CAM may well arrive at a slightly different sharpened cone space to Bradford, simply because various parameters, including this matrix get fitted to color appearance data sets that are not the same as those used to derive the Bradford matrix. [ Given that white point adaptation is primarily assumed to be a property of the individual LMS cones adapting to light levels, the better fit to experimental data to sharpened cone spaces is rather interesting, since it doesn't seem to be explainable at the retina level. ]
Hmm. That entry seems to have a degree of misinformation. The transform between XYZ and LMS space is not a chromatic transform, it is actually a transform between two different primary sets, namely the LMS primaries and XYZ primaries. In constrast, a chromatic transform represents a shift in white point adaptation. Graeme Gill.
Graeme Gill wrote:
Adriaan van Os wrote:
I need to get the primaries of an ICC profile. For example, for sRGB the required values are
Can someone please clarify ?
The answer is "it's complicated".
Thanks for the detailed reply and the link. I need to study it carefully, to be able to follow up.
I now studied your reply and the link in detail. Really absurd situation. I think I will just hard-code some much-used icc profiles in the software (as a last resort, as not many may have the 'arts' tag). Thanks again for the detailed reply. Regards, Adriaan van Os
participants (2)
-
Adriaan van Os
-
Graeme Gill