Thank for the interesting article! Can all of these transforms that were lost in the old V2 workflow be done manually with libraries such as Colour?
Regarding the gamut mapping. . .I sort of assumed nudging or doing a chromatic adaptation of sRGB Blue might push it out of gamut. It would for illuminant C, for instance. However, I’m (slightly) sure doing the D50 adaptation on sRGB yellow and likely many other colors does in fact move it out of gamut and would require gamut mapping. Here’s the verbose command to adapt sRGB yellow to D50. Does this look correct?
xicclu -ir -px /usr/share/color/argyll/ref/sRGB.icm
1 1 0
1.000000 1.000000 0.000000 [RGB] → MatrixFwd → 0.821152 0.939392 0.110977 [XYZ]
colour.adaptation.chromatic_adaptation_VonKries(colour.sRGB_to_XYZ([1,1,0]),colour.xy_to_XYZ(colour.ILLUMINANTS[‘cie_2_1931’][‘D65’]),colour.xy_to_XYZ(colour.ILLUMINANTS[‘cie_2_1931’][‘D50’]), transform=“Bradford”)
array([ 0.82124442, 0.93937375, 0.11098565])
Good, I get about the same result as xicclu
colour.XYZ_to_sRGB(colour.adaptation.chromatic_adaptation_VonKries(colour.sRGB_to_XYZ([1,1,0]),colour.xy_to_XYZ(colour.ILLUMINANTS[‘cie_2_1931’][‘D65’]),colour.xy_to_XYZ(colour.ILLUMINANTS[‘cie_2_1931’][‘D50’]), transform=“Bradford”))
array([ 1.06810111, 0.9871334 , -0.36921608])
So this color would need to be gamut mapped? Or am I missing the idea that this color would be adapted back from D50 to D65 and thus shifted back to sRGB gamut?
I’m still foggy as to why you would want to adapt and desaturate sRGB Blue from 0,0,1 to [ 0.12575588, 0.05816817, 0.88102249]. This color definitely has a darker and more violet appearance to me. . I suppose it would look like sRGB Blue if my entire computer was using D50 instead of D65? I’m not sure if that’s true either. . . I should be able to check with CAM16?
Y_b = 20.0
L_A = 4.074366543152521
surround = colour.CAM16_VIEWING_CONDITIONS[‘Average’]
First I’ll try to adapt sRGB Blue to D50
adaptedBlue=colour.adaptation.chromatic_adaptation_VonKries(colour.sRGB_to_XYZ([0,0,1]),colour.xy_to_XYZ(colour.ILLUMINANTS[‘cie_2_1931’][‘D65’]),colour.xy_to_XYZ(colour.ILLUMINANTS[‘cie_2_1931’][‘D50’]), transform=“Bradford”)
adaptedBlue
array([ 0.14310034, 0.06062854, 0.71407512])
xicclu -ir /usr/share/color/argyll/ref/sRGB.icm
0 0 1
0.000000 0.000000 1.000000 [RGB] → MatrixFwd → 0.143051 0.060608 0.713928 [XYZ]
Then find a CAM16 spec for adapted blue w/ D50
XYZ_w = colour.xy_to_XYZ(colour.ILLUMINANTS[‘cie_2_1931’][‘D50’]) * 100
colour.XYZ_to_CAM16(adaptedBlue*100, XYZ_w, L_A, Y_b, surround)
CAM16_Specification(J=22.754809907494423, C=86.02568921553214, h=284.13308446701819, s=102.64787546106966, Q=59.022934123382356, M=62.190024123467886, H=326.1718245880528, HC=None)
normal sRGB blue w/ D65:
XYZ_w = colour.xy_to_XYZ(colour.ILLUMINANTS[‘cie_2_1931’][‘D65’]) * 100
colour.XYZ_to_CAM16(colour.sRGB_to_XYZ([0,0,1])*100, XYZ_w, L_A, Y_b, surround)
CAM16_Specification(J=25.068168770723343, C=86.373262825607966, h=282.76419345722189, s=100.40525547820542, Q=61.938259776454906, M=62.441293382597451, H=325.31203447272372, HC=None)
So, does this mean that D50 adapted sRGB Blue viewed in a D50 environment will appear about the same Chroma, but slightly dimmer and with a slight hue shift? Or is this a limitation of the math for the Bradford adaptation? And likewise, if you saw the non-adapted sRGB blue in a D50 environment, it would seem very, very blue:
XYZ_w = colour.xy_to_XYZ(colour.ILLUMINANTS[‘cie_2_1931’][‘D50’]) * 100 colour.XYZ_to_CAM16(colour.sRGB_to_XYZ([0,0,1]) * 100, XYZ_w, L_A, Y_b, surround)
CAM16_Specification(J=25.117896210374159, C=93.575173750949872, h=282.49231574642863, s=104.4452498954545, Q=62.012011664634123, M=67.647726696487283, H=325.14200310562353, HC=None)
Any tips/corrections appreciated.