欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

浅谈色彩的技术实现 (II) - CIE 1931 XYZ 系统

最编程 2024-04-01 12:31:30
...

书接上文,色彩学家们决定用“红黄蓝”来度量我们的颜色感觉。
怎么来度量呢?上文中提到了我们定义度量过程中的基本单位:

按一定比例混合而成的白光(接近自然白光)对应的比例为1[R]+4.5907[G]+0.0691[B],对应强度定义为1个单位的RGB,即
1[R]unit=1.0000 cd/㎡
1[G]unit=4.5907 cd/㎡
1[B]unit=0.0691 cd/㎡
而使用[单位RGB]混出等能光谱色对应的数量就叫做光谱的三刺激值。


实验图

于是我们选取一种特定强度&波长的待测光后,打在视场左侧,不断调整[单位RGB]光的强度和比例以实现与待测光相同的颜色感觉。最终得到如下关系:(解释:红色成分出现负值,这是因为当投射到半视场的某些光谱色用无论怎么也无法用另一半视场的三原色来匹配时,只有在光谱色半视场加入红色原色才能达到匹配。也就是此时的红色光是加载到实验图中 左侧待测光白板上的,如果规定往右侧加入的色光量为正值,那么左侧就相应的为负值。)

图一

于是 我们可以把任意波长可见光用几何法表示:

图二

归一化一下:

图三

然后我们有r(λ)+g(λ)+b(λ) = 1的关系,而这个关系在图一中,会以一个平面存在,我们称为单位平面:

图3

也就是说任意波长可见光C在这个平面上都有唯一一个投影,我们称为单位颜色 ,对于一个单位颜色的色品只决定于三原色的刺激值在R+G+B总量中的相对比例,我们把这个比例叫做色品坐标。试想一下,可见光波长380~700,各个波段的光投影的点会成什么样呢?
图4

将可见光在单位平面对应的投影将会形成光谱轨迹。从xoz平面往y轴方向看去,于是,你将会看到所有颜色相关介绍直接拿来用色域“马鞍”图或者“舌形”图,如下图5,是不是非常眼熟,于是我们可能了解“马鞍”图的外边缘就是可见光的光谱轨迹,是单色光,光谱轨迹内的是多中单色光配比出来的复合光。
图5

思路回归,当我们在立体的rgb空间通过投影的方式得到了单色可见光光谱轨迹,为了数学简化,我们将三维空间降至二维空间:(波长540~700(图中700nm的波长的点其实包括了700-780nm的波长)对应的斜率45度直线意味着此时蓝色强度值(蓝色色品值)为0,感兴趣的可以琢磨一下)

图6

咱们先忽略图6中的红线,降至二维空间后,我们得到了一个会向r负半轴斜的光谱轨迹,大家想想这是为啥?(因为图一中会出现红色刺激值为负数的情况。)这个斜的光谱轨迹图的坐标系下,如果使用对应的红绿蓝来表达颜色,会出现负数的情况,颜色的表达,混合就很confusing。于是,学者们决定换一个坐标系表示可见光的光谱轨迹:假如我们换三种颜色来描述可见光,新的三原色可以连成一个三角形,将可见光光谱轨迹包裹于其中(对于xz-yz坐标系而言),可见光光谱轨迹 的表示不再是负数,可以把(X)(Y)(Z)理解成三种不可见光的新三原色,这三种色经过不同的配比可以produce我们所有的可见光。
那(X)(Y)(Z)怎么选择呢?是不是我任意整能包裹我们的可见光光谱轨迹 一个三角形就可以呢?没问题呀,要不要整一个三角形,怎么整这个三角形,这个都是人为确定的,是为了解决某个问题设计的,没有绝对的答案,只有针对某种case的最优解决方案。

  • i. 当我们希望(X)(Y)(Z)还能引入亮度来丰富颜色表达方式;
  • ii. 当我们希望(X)(Y)(Z)尽可能少包含一些不可见的光,形象地说 希望可见光光谱轨迹紧紧地“嵌”在(X)(Y)(Z)三角形中。

基于i,(X)(Y)(Z)其实从方位上 分别偏向与 红、绿、蓝,描述颜色时,与RGB系统三原色成正比。而由于 r(λ)+g(λ)+b(λ) = 1,所以表示某颜色时一个色品坐标值可以省略,对应的,(X)(Y)(Z)中也可以省略一个值,于是 我们可以利用省略的那个值表示亮度情况。
选哪一个呢?
选绿色对应的(Y)。
为什么?
因为人眼对绿光波长最敏感(「聊聊颜色的技术实现(一)」中有说明),RGB系统三原色的相对亮度(不是数量的多少)比为:
lr:lg:lb = 1:4.59:0.0601
(这意味着同样强度的RGB系统三原色,蓝色给人的感觉非常暗,绿色给人感觉最亮)。因此这里设置原色Y代表亮度和绿色的在颜色中的比例也比较也合理(颜色Y值越大,人眼感觉越亮,也代表颜色中绿色的比例越高)。
另外由于颜色匹配也包括其亮度的匹配,因此将三原色相对亮度代入可得到亮度方程
lC = lr + 4.59lg+0.0601lb, 当lC =0,带入 b = 1 - r -g,对应的是XZ对应的线(此时Y = 0)
约等于 g = (-0.94/4.54)r - (0.06/4.54),所以XZ确定了,接下来是确定XY,ZY线了。

基于ii,光谱轨迹从 540nm 附近至 700nm,在 RGB 色品图上基本是一段直线,用这段线上的两个颜色相混合可以得到两色之间的各种光谱色,新的 XYZ 三角形的 XY 边应与这段直线重合,因为在这段线上光谱轨迹只涉及(X)原色和(Y)原色的变化,不涉及(Z)原色,于是XY线确定了。
而第三条线YZ,CIE选取的为波长503nm出的点相切的直线。其方程也很容易得到。

所以我们(X)(Y)(Z)三角形确定了!也就是图6中红线部分。我们得到了CIE 1931 XYZ系统!
我们看看它与RGB坐标系的关系:

图7

通过这三条直线,我们可以确定新三原色在R,G,B色品系统下的坐标,进而得到新色品坐标系与旧色品坐标系之间的转换矩阵。
从 RGB 到 XYZ 的转换矩阵就是:

从 XYZ 转到 RGB 的矩阵就是他的逆矩阵:

然后根据转换矩阵我们就能将图5的光谱轨迹曲线转换到由新三原色构成的新坐标的第一象限中。转换后的光谱轨迹曲线,投影在X0Y面,就是常见的CIE 1931 XYZ系统、“马鞍”图、“舌形”图。如图8:
图8

CIE 1931 XYZ系统光谱三刺激值(绝对值)曲线图,如下图所示:
图9

图中的x,y为新系统的色品坐标,其值为:

而(1/3,1/3)E依然对应我们的白点。

请问,这个光谱轨迹内的点是什么呢?怎么理解?
轨迹的点,对应的是某一个波长对应的可见光的颜色,对应一个波的频点;将两个不同波长的光按照某种比例叠加一下呢?光的叠加,也就是波的叠加,可不是波长或者频率的线性叠加,想一下傅立叶级数的由来。经过不同光的叠加生成的光,就是我们轨迹内的光。
那我们把光谱轨迹 填充一下吧。

当某光源直接发出某种待测光,经过测量,获得该光的相对光谱功率分布,如下:


图10

(明显,该光源是从375~780波段的“光不同权重地叠加”,如果是光谱轨迹上的点,相对光谱功率分布应该是一个脉冲函数)

任意波长的

又可以从 CIE 1931 XYZ系统光谱三刺激值(绝对值)曲线图中获得。我们可以积分获取该光源X,Y,Z的刺激值。



φ( λ)为相对光谱功率分布,k为归化系数。然后归一化后,

获得该光的色品坐标,最后我们得到了那个眼熟的“马鞍”图

图11

CIE-XYZ 1931标准有以下特性:

  1. 靠近波长末端 700-770nm 光谱波段具有一个恒定的色品值,故在色品图上只由一个点来代表。
  2. 光谱轨迹 540-700nm 段是一条与 XY 边基本重合的直线。在这段光谱范围内的任何光谱色都可通过 540nm 和 700nm 两种波长的光以一定比例相加混合产生。
  3. 光谱轨迹 380-540nm 段是曲线,在此范围内的一对光谱色的混合不能产生二者之间位于光谱轨迹上的颜色,而只能产生光谱轨迹所包围面积内的混合色。光谱轨迹上的颜色饱和度最高。图上越靠近等能白点E 点(1/3,1/3)的颜色饱和度越低。
  4. 连接色度点 400nm 和 700nm 的直线称为紫红轨迹,也称紫线。因为将 400nm 的蓝色刺激与 700nm 的红色刺激混合后会产生紫色(也就是说紫色和红色之间还有已知的颜色,而不是断裂的)。
  5. Y=0 的直线(XZ)与亮度没有关系,即无亮度线。光谱轨迹的短波段紧靠这条线,意味着短波端的光虽然能够引起标准观察者的反应,但 380-420nm 波长在视觉上引起的亮度感觉很低。
  6. 曲线内包含的色彩是我们人眼全部能感知的色彩,即人类视觉的色域。
  7. 曲线是三维曲线,我们看到的是其在x,y平面上的投影。

还是留几个问题给大家:这个CIE 1931 XYZ系统的作用是什么呢?怎么去应用这个系统?在哪里应用这个系统?(后续会解答,但是应该在很多内容以后了)