When I was working on improvements to the OptiCAL software in 1998, one of the challenges was the selection of the chromatic adaptation algorithm. At the time, the International Color Consortium (ICC) did not specify a chromatic adaptation algorithm, so each software developer could choose any method for chromatic adaptation.
Let me back up and give you a little more context for this issue. The ICC had specified CIE D50 for the white point of the Profile Connection Space (PCS). Therefore, all the color coding in the PCS had to have a white point of D50. That worked well for output profiles (e.g., printer profiles), but it created an extra step in the creation of display profiles (e.g., monitor profiles) and RGB color-space profiles when the native white point was not D50. That extra step was the application of a chromatic adaptation transform.
I will focus on an ICC display profile for a color monitor as an example. When the display profile is based on the matrix structure, rather than the LUT structure, the 3×3 matrix contains CIE XYZ tristimulus values for the red, green, and blue primaries. By following the rules of linear algebra, the sum of each row in the 3×3 matrix produces the CIE X, Y, and Z tristimulus values for the white point of the display (i.e., the sum of the top row delivers the X value, the sum of the middle row delivers the Y value and the sum of the bottom row delivers the Z value). To be compliant with the ICC specification, the 3×3 matrix must deliver the CIE XYZ tristimulus values of D50 for the CIE XYZ tristimulus values of white (i.e., white XYZ for the display profile = CIE D50 XYZ).
If the white point of the actual display is not D50, then a chromatic adaptation transform must be applied to the measured data to force the 3×3 matrix to deliver the CIE XYZ tristimulus values for D50. (Keep in mind that a display will rarely be calibrated to exactly D50, so a chromatic adaptation transform will be applied to the measured data even for a small deviation from D50.) In simple terms, the chromatic-adaptation transform changes the tristimulus values of the red, green, and blue primaries to produce a D50 white from the sum of the three primaries. The new tristimulus values for the red, green, and blue primaries are placed in the 3×3 matrix for the display profile.
Without a specification from the ICC for a chromatic adaptation algorithm (CAT), software developers were free to choose any chromatic adaptation algorithm. Some software developers simply used linear scaling on the measured CIE XYZ tristimulus values for the red, green, and blue primaries to force them to deliver the CIE XYZ tristimulus values of D50 for white. This technique is generally referred to as a "wrong von Kries transform" and the results are inferior to a proper von Kries transform. In 1998, the two popular chromatic adaptation transforms were the Hunt Pointer Estevez transform and the Bradford transform. Each of these three methods (i.e., linear scaling of the XYZ values, von Kries scaling with the Hunt Pointer Estevez transform, and von Kries scaling with the Bradford transform) produced different sets of XYZ tristimulus values for the 3×3 matrix, and, in turn, delivered different colors when used in a color management pipeline. At the time, most people using color management were unaware of this little detail in display profiles, and to this day I still encounter "color management experts" who are not aware of this little detail. Fortunately the ICC addressed this issue and now recommends the Bradford transform for Version 4 of the ICC profile specification. Software developers who create software applications that make ICC profiles should now use the Bradford transform in the software in order for the ICC profiles to be compliant with the Version 4 specification, but exceptions are allowed and can be implemented in the ICC profile and noted in the chromatic adaptation tag in the ICC profile. Let me quote Annex E in Specification ICC.1:2010 (Profile version 22.214.171.124):
The ICC profile format specification allows the use of different linear (matrix-based) CATs. This flexibility allows profile creators to select the most appropriate CAT for their applications. Criteria for selection include visual performance, the gamut of the image as transformed to the PCS, and other considerations. However, the use of different CATs will produce different results, which may be undesirable. Therefore, it is recommended that the linear Bradford CAT be used when there is no reason to use a different CAT. The linear Bradford CAT has been widely implemented in the digital imaging industry, with demonstrated excellent visual performance. If a profile creator decides to use a CAT other than linear Bradford, they should do so only to address specific known issues, recognizing that the resulting profile will most likely produce different results than profiles from other sources.
In 1998 I chose the Hunt Pointer Estevez transform based on discussions with colleagues who had significant experience with chromatic adaptation transforms (CATs) and were familiar with the Hunt Pointer Estevez transform and the Bradford transform. Working with Dana Gregory on the OptiCAL software, we implemented the Hunt Pointer Estevez transform for OptiCAL version 2.5. Five years later in 2003, the OptiCAL software was updated to use the Bradford transform for chromatic adaptation to conform to the Version 4 ICC Specification. The update to the OptiCAL software that incorporated the Bradford transform was clearly the right decision, and Michael Brill provided a detailed report on this update to the software in 2003.
I hope this post will elevate awareness of the presence of a chromatic adaptation transform in software that produces display profiles. I will visit this topic again in future posts to share additional insights on related issues that may be overlooked in color management workflows.
International Color Consortium, ICC Profile Format Specification. (http://www.color.org)
M. Fairchild, Color Appearance Models, Addison-Wesley, Reading, Massachusetts (1998).