如何理解色域的白点

913 阅读3分钟

色度图的由来

CIE 1931 XYZ:

x+y+z=1的图形:

把CIE 1931 XYZ投影到x+y+z=1平面上:

再把上面的投影平面投影到x,y上面,得到的投影就是色度图:

CIE 1931 XYZ的坐标和色度图的坐标转换关系:

  x=XX+Y+Zy=YX+Y+Zz=ZX+Y+Z=1xy\begin{matrix} x = \frac{X}{X+Y+Z}& \\ y = \frac{Y}{X+Y+Z}& \\ z = \frac{Z}{X+Y+Z}& = 1 - x - y \\ \end{matrix}

从CIE 1931 XYZ转换到色度图的过程可以看到,转换过程是把亮度信息丢失了的,色度图是没有亮度信息的。色度的坐标是无法逆向转换成CIE 1931 XYZ的坐标的,除非有亮度信息。

这也是为什么说确定一个色域除了需要知道色域三原色的色度图坐标外,还需要一个白点的色度图坐标

因为白点包含了亮度信息(因为归一化后白点的亮度值为1,即CIE 1931 XYZ的坐标Y为1)。有了这个亮度信息,就能把色域三原色的色度图坐标转成CIE 1931 XYZ的坐标,从而计算出颜色转换矩阵。

颜色转换矩阵的推导

已知一个色域的三原色R,G,B,以及白点W在色度图坐标,如何计算出该色域到CIE 1931 XYZ的转换矩阵呢?

以sRGB为例,推导出sRGB转CIE 1931 XYZ的矩阵过程如下:

sRGB的三原色以及白点色度图坐标R(0.64, 0.33, 0.03),G(0.3, 0.6, 0.1),B(0.15, 0.06, 0.79), W(0.3127, 0.3290, 0.3583)。设sRGB的RGB和白点色品坐标在CIE 1931 XYZ的坐标为:

  R=(Xr,Yr,Zr)G=(Xg,Yg,Zg)B=(Xb,Yb,Zb)W=(0.95043,1,1.08890)\begin{matrix} R^{'} =& (X_{r}, Y_{r}, Z_{r})\\ G^{'} =& (X_{g}, Y_{g}, Z_{g})\\ B^{'} =& (X_{b}, Y_{b}, Z_{b})\\ W^{'} =& (0.95043, 1, 1.08890) \end{matrix}(1)

根据色品坐标和CIE 1931 XYZ的坐标的转换关系, 得,

  (Xr,Yr,Zr)1Xr+Yr+Zr=(0.64,0.33,0.03)(Xg,Yg,Zg)1Xg+Yg+Zg=(0.30,0.60,0.10)(Xb,Yb,Zb)1Xb+Yb+Zb=(0.15,0.06,0.79)\begin{matrix} (X_{r}, Y_{r}, Z_{r}) * \frac{1}{X_{r} + Y_{r} + Z_{r}} = (0.64, 0.33, 0.03) \\ (X_{g}, Y_{g}, Z_{g}) * \frac{1}{X_{g} + Y_{g} + Z_{g}} = (0.30, 0.60, 0.10)\\ (X_{b}, Y_{b}, Z_{b}) * \frac{1}{X_{b} + Y_{b} + Z_{b}} = (0.15, 0.06, 0.79) \end{matrix} (2)

设sRGB转CIE 1931 XYZ的矩阵:

  M=[a00a01a02a10a11a12a20a21a22]M = \begin{bmatrix} a_{00}& a_{01}& a_{02}\\ a_{10}& a_{11}& a_{12}\\ a_{20}& a_{21}& a_{22} \end{bmatrix}(3)

   记 r=Xr+Yr+Zr,g=Xg+Yg+Zg,b=Xb+Yb+Zbr = X_{r} + Y_{r} + Z_{r}, g = X_{g} + Y_{g} + Z_{g}, b = X_{b} + Y_{b} + Z_{b}, 有:

  [0.64r0.33r0.03r]=M[100]\begin{bmatrix} 0.64*r\\ 0.33*r\\ 0.03*r \end{bmatrix} = M* \begin{bmatrix} 1\\ 0\\ 0 \end{bmatrix}[0.3g0.6g0.1g]=M[010]\begin{bmatrix} 0.3*g\\ 0.6*g\\ 0.1*g \end{bmatrix} = M* \begin{bmatrix} 0\\ 1\\ 0 \end{bmatrix} [0.15b0.06b0.79b]=M[001]\begin{bmatrix} 0.15*b\\ 0.06*b\\ 0.79*b \end{bmatrix} = M* \begin{bmatrix} 0\\ 0\\ 1 \end{bmatrix} (4)

将(3)式带入,得:

  [0.64r0.33r0.03r]=[a00a01a02]\begin{bmatrix} 0.64*r\\ 0.33*r\\ 0.03*r \end{bmatrix} = \begin{bmatrix} a_{00}\\ a_{01}\\ a_{02} \end{bmatrix}[0.3g0.6g0.1g]=[a01a11a21]\begin{bmatrix} 0.3*g\\ 0.6*g\\ 0.1*g \end{bmatrix} = \begin{bmatrix} a_{01}\\ a_{11}\\ a_{21} \end{bmatrix}[0.15b0.06b0.79b]=[a02a12a22]\begin{bmatrix} 0.15*b\\ 0.06*b\\ 0.79*b \end{bmatrix} = \begin{bmatrix} a_{02}\\ a_{12}\\ a_{22} \end{bmatrix}(5)

带入(3),得:

  M=[0.64r0.3g0.15b0.33r0.6g0.06b0.03r0.1g0.79b]=[0.640.30.150.330.60.060.030.10.79][r000g000b]M = \begin{bmatrix} 0.64r& 0.3g& 0.15b\\ 0.33r& 0.6g& 0.06b\\ 0.03r& 0.1g& 0.79b \end{bmatrix} = \begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} * \begin{bmatrix} r& 0& 0\\ 0& g& 0\\ 0& 0& b \end{bmatrix}(6)

记白点的色度图坐标为 (xw,yw)(x_{w},y_{w}),则CIE 1931 XYZ坐标为: (xwyw,1,1xwywyw)(\frac{x_{w}}{y_{w}},1, \frac{1-x_{w}-y_{w}}{y_{w}}), 则有:

  [xwyw11xwywyw]=[0.640.30.150.330.60.060.030.10.79][r000g000b][111]\begin{bmatrix} \frac{x_{w}}{y_{w}}\\ 1\\ \frac{1-x_{w}-y_{w}}{y_{w}} \end{bmatrix} = \begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} \begin{bmatrix} r& 0& 0\\ 0& g& 0\\ 0& 0& b \end{bmatrix} \begin{bmatrix} 1\\ 1\\ 1 \end{bmatrix}(7)

   简化,得

  [xwyw11xwywyw]=[0.640.330.030.300.600.100.150.060.79][rgb]\begin{bmatrix} \frac{x_{w}}{y_{w}}\\ 1\\ \frac{1-x_{w}-y_{w}}{y_{w}} \end{bmatrix} = \begin{bmatrix} 0.64& 0.33& 0.03\\ 0.30& 0.60& 0.10\\ 0.15& 0.06& 0.79 \end{bmatrix} \begin{bmatrix} r \\ g \\ b \end{bmatrix} (8)

   得,

  [rgb]=[0.640.330.030.300.600.100.150.060.79]1[xwyw11xwywyw]\begin{bmatrix} r \\ g \\ b \end{bmatrix} = \begin{bmatrix} 0.64& 0.33& 0.03\\ 0.30& 0.60& 0.10\\ 0.15& 0.06& 0.79 \end{bmatrix} ^{-1} \begin{bmatrix} \frac{x_{w}}{y_{w}}\\ 1\\ \frac{1-x_{w}-y_{w}}{y_{w}} \end{bmatrix}(9)a

  带入(6)式,就能算出M。

白点对色域转换的影响

上面小节,推导出sRGB到CIE 1931 XYZ的转换矩阵M:

  M=[0.640.30.150.330.60.060.030.10.79][r000g000b]M = \begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} * \begin{bmatrix} r& 0& 0\\ 0& g& 0\\ 0& 0& b \end{bmatrix}(1)

  [rgb]=[0.640.330.030.300.600.100.150.060.79]1[xwyw11xwywyw]\begin{bmatrix} r \\ g \\ b \end{bmatrix} = \begin{bmatrix} 0.64& 0.33& 0.03\\ 0.30& 0.60& 0.10\\ 0.15& 0.06& 0.79 \end{bmatrix} ^{-1} \begin{bmatrix} \frac{x_{w}}{y_{w}}\\ 1\\ \frac{1-x_{w}-y_{w}}{y_{w}} \end{bmatrix}(2)

现假设sRGB上的一个点(x, y, z)转到 CIE 1931 XYZ为(X, Y, Z), 有:

  [XYZ]=[0.640.30.150.330.60.060.030.10.79][r000g000b][xyz]=[0.640.30.150.330.60.060.030.10.79][rxgybz]\begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = \begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} \begin{bmatrix} r& 0& 0\\ 0& g& 0\\ 0& 0& b \end{bmatrix} \begin{bmatrix} x \\ y \\ z \end{bmatrix} = \begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} \begin{bmatrix} rx \\ gy \\ bz \end{bmatrix} (3)

  变化,得:

  [XYZ]=[0.640.30.150.330.60.060.030.10.79][rxgybz]=[0.640.30.150.330.60.060.030.10.79][x000y000z][rgb]\begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = \begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} \begin{bmatrix} rx \\ gy \\ bz \end{bmatrix} = \begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} \begin{bmatrix} x& 0& 0\\ 0& y& 0\\ 0& 0& z \end{bmatrix} \begin{bmatrix} r \\ g \\ b \end{bmatrix}(4)

将(2)式,带入,得:

  [XYZ]=[0.640.30.150.330.60.060.030.10.79][x000y000z][0.640.330.030.300.600.100.150.060.79]1[xwyw11xwywyw]\begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = \begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} \begin{bmatrix} x& 0& 0\\ 0& y& 0\\ 0& 0& z \end{bmatrix} \begin{bmatrix} 0.64& 0.33& 0.03\\ 0.30& 0.60& 0.10\\ 0.15& 0.06& 0.79 \end{bmatrix} ^{-1} \begin{bmatrix} \frac{x_{w}}{y_{w}}\\ 1\\ \frac{1-x_{w}-y_{w}}{y_{w}} \end{bmatrix}(5)

如果将白点进行偏移 tx,ty(t_{x}, t_{y}),则白点偏移后的坐标为:

  xw=xw+txyw=yw+ty\begin{matrix} {x_{w}}^{'}=x_{w} + t_{x}\\ {y_{w}}^{'}=y_{w} + t_{y} \end{matrix}(6)

带入(5)式,得根据偏移白点计算出得坐标

  [XYZ]=[0.640.30.150.330.60.060.030.10.79][x000y000z][0.640.330.030.300.600.100.150.060.79]1[xw+txyw+ty11xwywtxtyyw+ty] \begin{bmatrix} X^{'} \\ Y^{'} \\ Z^{'} \end{bmatrix} = \begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} \begin{bmatrix} x& 0& 0\\ 0& y& 0\\ 0& 0& z \end{bmatrix} \begin{bmatrix} 0.64& 0.33& 0.03\\ 0.30& 0.60& 0.10\\ 0.15& 0.06& 0.79 \end{bmatrix} ^{-1} \begin{bmatrix} \frac{x_{w} + t_{x}}{y_{w} + t_{y}}\\ 1\\ \frac{1-x_{w}-y_{w}-t_{x}-t_{y}}{y_{w} + t_{y}} \end{bmatrix} (7)

将(7)式减去(5)式,得

  [XYZ][XYZ]=[0.640.30.150.330.60.060.030.10.79][x000y000z][0.640.330.030.300.600.100.150.060.79]1[xw+txyw+tyxwyw01xwywtxtyyw+ty1xwywyw]\begin{bmatrix} X^{'} \\ Y^{'} \\ Z^{'} \end{bmatrix} - \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} = \begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} \begin{bmatrix} x& 0& 0\\ 0& y& 0\\ 0& 0& z \end{bmatrix} \begin{bmatrix} 0.64& 0.33& 0.03\\ 0.30& 0.60& 0.10\\ 0.15& 0.06& 0.79 \end{bmatrix} ^{-1} \begin{bmatrix} \frac{x_{w} + t_{x}}{y_{w} + t_{y}} - \frac{x_{w}}{y_{w}} \\ 0 \\ \frac{1-x_{w}-y_{w}-t_{x}-t_{y}}{y_{w} + t_{y}} - \frac{1-x_{w}-y_{w}}{y_{w}} \end{bmatrix}(8)

  怎么理解上面得公式呢?

  以sRGB为例,如果sRGB色域的白点偏移了,则sRGB色域的某个点(x, y, z)在CIE 1931 XYZ空间的偏移等于([0.640.30.150.330.60.060.030.10.79][x000y000z][0.640.330.030.300.600.100.150.060.79]1\begin{bmatrix} 0.64& 0.3& 0.15\\ 0.33& 0.6& 0.06\\ 0.03& 0.1& 0.79 \end{bmatrix} \begin{bmatrix} x& 0& 0\\ 0& y& 0\\ 0& 0& z \end{bmatrix} \begin{bmatrix} 0.64& 0.33& 0.03\\ 0.30& 0.60& 0.10\\ 0.15& 0.06& 0.79 \end{bmatrix} ^{-1} )乘以 (白点在CIE 1931 XYZ空间的偏移)

理解色温和白点关系

什么是色温?

在物理上,不同温度的黑体可以发射出不同颜色的光线。色温就是绝对黑体在该温度下产生的光线。下图是色温刻度对照图:

  不同色温在色度图的坐标:

D50白点的色温为5000k,D55白点的色温为5500k,D65白点的色温为6500K,D75白点的色温为7500K。