前言
首先需要指明本文中描述的R,G,B并非通常的sRGB中的三个分量R',G',B',而是波长分别为700nm,546.1nm,435.8nm的单色红光,单色绿光,单色蓝光。sRGB中的R'G'B'中的红色、绿色、蓝色已经不是单色光了。虽然习惯上大家都叫RGB,但是需要有所区别。本文将分别从为什么需要这种转换,怎么进行这种转换进行阐述。
指标定义
在上一篇之中,我们知道了三色刺激值出现了负值,所以需要进行色彩空间转换。那么在转换过程中有哪些指标定义呢。
1,X,Y,Z需要全部为正;
2,Y表达色彩中的亮度信息;
3,参考白位于X=Y=Z=1/3处;
指标分析
对于第一点,意味着新的三基色围成的三角形可以囊括CIE RGB的所有颜色,我随意画了一个三角形如下:
对于第二点,色匹配实验中RGB之间的亮度比例为1:4.95:0.061, 因此色彩的亮度表达式为Y=1*r+ 4.95g+0.0601b,当Y=0时,即为直线XZ,代表无亮度线,带入b=1-r-g,可得:
但是上面的三角形太随意了,于是CIE规定选取540nm~700nm两点的连线代表XY直线,这条线段几乎跟光谱轨迹重合,意味着Z分量为常数,三维视图中看就是这段光谱色平行于Z轴。
CIE选取503nm处的切线作为第三条边,这样就组成了一个三角形。
最后把三条直线方程两两组合求解,可以得到3个点的坐标值如下表:
坐标 | r | g | b |
x | 1.2750 | -0.2778 | 0.0028 |
y | -1.7392 | 2.7671 | -0.0279 |
z | -0.7431 | 0.1409 | 1.6022 |
对于第三点来说,就是等量的XYZ可以混合成参考白点, 我们的目的是写出XYZ各自的刺激值的表达式,推导过程如下:
令 ;
;
那么
; ; ;
; ; ;
; ; ;
因此一个单位的XYZ刺激值分别如下:
等量的XYZ混出参考白色,另一方面等量的RGB也可以混出参考白色,那么:
因此
那么
写成矩阵的形式如下:
因此
带入数值可得
代码如下:
rx=1.2750;
gx=-0.2778;
bx=0.0028;
ry=-1.7392;
gy=2.7671;
by=-0.0279;
rz=-0.7431;
gz=0.1409;
bz=1.6022;
S=inv([rx ry rz;
gx gy gz;
bx by bz])*[1 1 1]';
转换矩阵的生成
因为上面得出了这个表达式
对于XYZ色彩空间来说,三色刺激值为
对于RGB色彩空间来说,三色刺激值为
根据映射关系可以知道:
写成矩阵表达形式如下:
带入参数可以得到XYZ转RGB的矩阵如下:
xyz2rgb =
2.3646 -0.8966 -0.4681
-0.5152 1.4265 0.0887
0.0052 -0.0144 1.0092
对上述矩阵求逆矩阵就可以得到RGB转XYZ的矩阵如下:
rgb2xyz =
0.4900 0.3100 0.2000
0.1770 0.8124 0.0106
0.0000 0.0100 0.9900
代码如下:
xyz2rgb=[rx*S(1) ry*S(2) rz*S(3);
gx*S(1) gy*S(2) gz*S(3);
bx*S(1) by*S(2) bz*S(3)]
rgb2xyz=inv(xyz2rgb)
以上就是CIE 1931标准观察者XYZ和RGB之间的转换关系推导。