colour.chromatic_adaptation#
- colour.chromatic_adaptation(XYZ: ArrayLike, XYZ_w: ArrayLike, XYZ_wr: ArrayLike, method: Literal['CIE 1994', 'CMCCAT2000', 'Fairchild 1990', 'Li 2025', 'Von Kries', 'Zhai 2018', 'vK20'] | str = 'Von Kries', **kwargs: Any) NDArrayFloat[source]#
Adapt the specified stimulus CIE XYZ tristimulus values from test viewing conditions to reference viewing conditions using the specified chromatic adaptation method.
- Parameters:
XYZ (ArrayLike) – CIE XYZ tristimulus values of stimulus to adapt.
XYZ_w (ArrayLike) – Test viewing condition CIE XYZ tristimulus values of the whitepoint.
XYZ_wr (ArrayLike) – Reference viewing condition CIE XYZ tristimulus values of the whitepoint.
method (Literal['CIE 1994', 'CMCCAT2000', 'Fairchild 1990', 'Li 2025', 'Von Kries', 'Zhai 2018', 'vK20'] | str) – Computation method.
E_o1 – {
colour.adaptation.chromatic_adaptation_CIE1994()}, Test illuminance \(E_{o1}\) in \(lux\).E_o2 – {
colour.adaptation.chromatic_adaptation_CIE1994()}, Reference illuminance \(E_{o2}\) in \(lux\).n – {
colour.adaptation.chromatic_adaptation_CIE1994()}, Noise component in fundamental primary system.Y_o – {
colour.adaptation.chromatic_adaptation_CIE1994()}, Luminance factor \(Y_o\) of achromatic background normalised to domain [0.18, 1] in ‘Reference’ domain-range scale.direction – {
colour.adaptation.chromatic_adaptation_CMCCAT2000()}, Chromatic adaptation direction.L_A1 – {
colour.adaptation.chromatic_adaptation_CMCCAT2000()}, Luminance of test adapting field \(L_{A1}\) in \(cd/m^2\).L_A2 – {
colour.adaptation.chromatic_adaptation_CMCCAT2000()}, Luminance of reference adapting field \(L_{A2}\) in \(cd/m^2\).surround – {
colour.adaptation.chromatic_adaptation_CMCCAT2000()}, Surround viewing conditions induction factors.discount_illuminant – {
colour.adaptation.chromatic_adaptation_Fairchild1990()}, Truth value indicating if the illuminant should be discounted.Y_n – {
colour.adaptation.chromatic_adaptation_Fairchild1990()}, Luminance \(Y_n\) of test adapting stimulus in \(cd/m^2\).L_A – {
colour.adaptation.chromatic_adaptation_Li2025()}, Adapting field luminance \(L_A\) in \(cd/m^2\).F_surround – {
colour.adaptation.chromatic_adaptation_Li2025()}, Maximum degree of adaptation \(F\) from surround viewing conditions.discount_illuminant – {
colour.adaptation.chromatic_adaptation_Li2025()}, Truth value indicating if the illuminant should be discounted.D_b – {
colour.adaptation.chromatic_adaptation_Zhai2018()}, Degree of adaptation \(D_\beta\) of input illuminant \(\beta\).D_d – {
colour.adaptation.chromatic_adaptation_Zhai2018()}, Degree of adaptation \(D_\Delta\) of output illuminant \(\Delta\).XYZ_r – {
colour.adaptation.chromatic_adaptation_vK20()}, Reference viewing conditions CIE XYZ tristimulus values of whitepoint.coefficients – {
colour.adaptation.chromatic_adaptation_vK20()}, vK20 degree of adaptation coefficients.transform – {
colour.adaptation.chromatic_adaptation_VonKries(),colour.adaptation.chromatic_adaptation_vK20(),colour.adaptation.chromatic_adaptation_Zhai2018()}, Chromatic adaptation transform.XYZ_wo – {
colour.adaptation.chromatic_adaptation_Zhai2018()}, Baseline illuminant (\(BI\)) \(o\).kwargs (Any)
- Returns:
CIE XYZ tristimulus values of the stimulus corresponding colour.
- Return type:
Notes
Domain
Scale - Reference
Scale - 1
XYZ1
1
XYZ_w1
1
XYZ_wr1
1
XYZ_wo1
1
Y_o1
1
Range
Scale - Reference
Scale - 1
XYZ_c1
1
References
[CIET13294], [Fai91], [Fai13f], [Fai13a], [LLRH02], [Li25], [WRC12d]
Examples
Von Kries chromatic adaptation:
>>> import numpy as np >>> XYZ = np.array([0.20654008, 0.12197225, 0.05136952]) >>> XYZ_w = np.array([0.95045593, 1.00000000, 1.08905775]) >>> XYZ_wr = np.array([0.96429568, 1.00000000, 0.82510460]) >>> chromatic_adaptation(XYZ, XYZ_w, XYZ_wr) ... array([0.2163881..., 0.1257 , 0.0384749...])
vK2020 chromatic adaptation:
>>> XYZ_w = np.array([0.95045593, 1.00000000, 1.08905775]) >>> XYZ_wr = np.array([0.96429568, 1.00000000, 0.82510460]) >>> chromatic_adaptation(XYZ, XYZ_w, XYZ_wr, method="vK20") ... array([0.2146884..., 0.1245616..., 0.0466255...])
CIE 1994 chromatic adaptation, requires extra kwargs:
>>> XYZ = np.array([0.2800, 0.2126, 0.0527]) >>> XYZ_w = np.array([1.09867452, 1.00000000, 0.35591556]) >>> XYZ_wr = np.array([0.95045593, 1.00000000, 1.08905775]) >>> Y_o = 0.20 >>> E_o = 1000 >>> chromatic_adaptation( ... XYZ, XYZ_w, XYZ_wr, method="CIE 1994", Y_o=Y_o, E_o1=E_o, E_o2=E_o ... ) ... array([0.2403379..., 0.2115621..., 0.1764301...])
CMCCAT2000 chromatic adaptation, requires extra kwargs:
>>> XYZ = np.array([0.2248, 0.2274, 0.0854]) >>> XYZ_w = np.array([1.1115, 1.0000, 0.3520]) >>> XYZ_wr = np.array([0.9481, 1.0000, 1.0730]) >>> L_A = 200 >>> chromatic_adaptation( ... XYZ, XYZ_w, XYZ_wr, method="CMCCAT2000", L_A1=L_A, L_A2=L_A ... ) ... array([0.1952698..., 0.2306834..., 0.2497175...])
Fairchild (1990) chromatic adaptation, requires extra kwargs:
>>> XYZ = np.array([0.1953, 0.2307, 0.2497]) >>> Y_n = 200 >>> chromatic_adaptation(XYZ, XYZ_w, XYZ_wr, method="Fairchild 1990", Y_n=Y_n) ... array([0.2332526..., 0.2332455..., 0.7611593...])
Li (2025) chromatic adaptation:
>>> XYZ = np.array([0.1953, 0.2307, 0.2497]) >>> L_A = 64 >>> F_surround = 1.0 >>> chromatic_adaptation( ... XYZ, XYZ_w, XYZ_wr, method="Li 2025", L_A=L_A, F_surround=F_surround ... ) ... array([0.2039701..., 0.2304747..., 0.6783065...])
Zhai and Luo (2018) chromatic adaptation:
>>> XYZ = np.array([0.20654008, 0.12197225, 0.05136952]) >>> XYZ_w = np.array([0.95045593, 1.00000000, 1.08905775]) >>> XYZ_wr = np.array([0.96429568, 1.00000000, 0.82510460]) >>> chromatic_adaptation(XYZ, XYZ_w, XYZ_wr, method="Zhai 2018") ... array([0.2163881..., 0.1257 , 0.0384749...]) >>> chromatic_adaptation( ... XYZ, ... XYZ_w, ... XYZ_wr, ... method="Zhai 2018", ... D_b=0.9, ... XYZ_wo=np.array([100, 100, 100]), ... ) ... array([0.2152436..., 0.1253522..., 0.0388406...])