colour.chromatic_adaptation

colour.chromatic_adaptation(XYZ, XYZ_w, XYZ_wr, method='Von Kries', **kwargs)[source]

Adapts given stimulus from test viewing conditions to reference viewing conditions.

Parameters
Returns

CIE XYZ_c tristimulus values of the stimulus corresponding colour.

Return type

ndarray

Notes

Domain

Scale - Reference

Scale - 1

XYZ

[0, 1]

[0, 1]

XYZ_w

[0, 1]

[0, 1]

XYZ_wr

[0, 1]

[0, 1]

XYZ_wo

[0, 1]

[0, 1]

Y_o

[0, 1]

[0, 1]

Range

Scale - Reference

Scale - 1

XYZ_c

[0, 1]

[0, 1]

References

[CIET13294], [Fai91], [Fai13c], [Fai13b], [LLRH02], [WRC12a]

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...])

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...])

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...])