XYZ与CIELAB转换

XYZ与CIE L*a*b*(CIELAB)的转换


正向变换

L^* = 116\,f(Y/Y_n) - 16
a^* = 500\,[f(X/X_n) - f(Y/Y_n)]
b^* = 200\,[f(Y/Y_n) - f(Z/Z_n)]

其中,

{\displaystyle {\begin{aligned}f(t)&={\begin{cases}{t^{1/3}}&{\text{,if }}\quad t>(6/29)^{3}\\{\frac {1}{3}}\left({\frac {29}{6}}\right)^{2}t+{\frac {16}{116}}&{\text{,otherwise}}\end{cases}}\\\end{aligned}}}


这里的X_n \,Y_n \,Z_n \,是参照白点的CIE XYZ三色刺激值。(下标n暗示了“normalized”)。

f(t) \,函数被分成两个定义域是为了防止在t=0 \,处的无限斜率。在某个 t=t_0 \,之下f(t) \,被假定是线性的,并被假定匹配函数的t^{1/3} \,部分在t_0 \,的值和斜率。换句话说:

t_0^{1/3}\,=\,a t_0 + b\,(匹配值)
1/(3t_0^{2/3})\,=\,a\,(匹配斜率)

b的值被选择为16/116。上面两个方程对at_{0}有解:

a\,=\,1/(3\delta^2)\,= 7.787037\cdots
t_0\,=\,\delta^3\,= 0.008856\cdots

这里的\delta=6/29 \,。注意16/116=2\delta/3 \,


反向变换


反向变换如下\delta=6/29 \,如上):

  1. 定义f_y\ \stackrel{\mathrm{def}}{=}\  (L^*+16)/116
  2. 定义f_x\ \stackrel{\mathrm{def}}{=}\  f_y+a^*/500
  3. 定义f_z\ \stackrel{\mathrm{def}}{=}\  f_y-b^*/200
  4. 如果f_y > \delta\,Y=Y_nf_y^3\,  否则Y=(f_y-16/116)3\delta^2Y_n\,
  5. 如果f_x > \delta\,X=X_nf_x^3\,  否则X=(f_x-16/116)3\delta^2X_n\,
  6. 如果f_z > \delta\,Z=Z_nf_z^3\,  否则Z=(f_z-16/116)3\delta^2Z_n\,


在线客服