人眼的视觉特性和颜色概念
首先大家都只知道三原色理论,也知道目前的显示器都是通过RGB模式来显示色彩的;
光学和电磁场理论指出:光具有波粒二象性——波动特性和微粒特性,电磁场包含无线电波,红外线,可见光,紫外线等,人眼能够看到的可见光谱集中在(3.58 ~ 7.89)x 10^14 Hz的频段,波长范围在 380nm ~ 780nm 之间;颜色是一种主观感受,本质上就是不同波长的光作用于人眼后形成的主观感觉;
大部分人类的视网膜上有三种感知颜色的感光细胞,叫做视锥细胞,分别对不同波长的光线敏感,称为 L/M/S 型细胞;三种视锥细胞最敏感的波长分别是橙红色(长波,Long),绿色(中波,Medium),蓝色(短波,Short 这三种视锥细胞的归一化感光曲线如下图所示
不仅如此,人类眼睛对不同颜色光线混合的反应还是线性的。根据 格拉斯曼定律(Grassmann's Law,两束不同颜色的光 C1 和 C2 ,假设某个视锥细胞对他们的反应分别是 R1 和 R2,现在将他们按照一个比例混合,得到第三种颜色C3,那么视锥细胞对这个混合颜色的反应也将是前两个反应的线性叠加
色匹配函数和CIE XYZ空间
人类视网膜上有三种感知色彩的视锥细胞,所以理论上我们用三种颜色的光就可以混合出自然界中任何一种颜色来
实验过程大致是这样的,把一个屏幕用不透光的挡板分割成两个区域,左边照射某个被测试的颜色的光线,这里记为C(以下用大写字母表明颜色,用小写字母表明分量大小),右边同时用三种颜色的光(单一波长的单色光)同时照射,这里记为R G B 然后,调节右边三种颜色光源的强度,直到左右两边的颜色看上去一样为止;假设这个时候三种颜色的光源强度分别为r g b那么根据光色叠加的线性性质,我们可以写出
也就是说,只要按照 (r,g,b) 的分量来混合 (R,G,B)三种颜色的光,就可以得到 C 这个颜色的光。于是在这一系列实验里,科学家们把左边的颜色按着光谱顺序,挨个测试了一遍,得到了纯光谱色的混合叠加的数据,这就是 色匹配函数并且在这个基准下定义的色彩空间,就是 CIE RGB 色彩空间。下图是 CIE RGB 的色匹配函数曲线
图中的红绿蓝三种颜色的曲线分别特定波长的单色光,X轴表示混色出相同颜色效果的单色光的波长
可以看到,曲线上出现了负数,这是怎么回事?回想一下前面描述的实验过程,左边是被测试的光色,右边是可调节的三色光的混合。如果碰到一种情况,右边三色光无论如何调节比例,都不能混合出左边的颜色,比如某种颜色的光强度已经减小为 0 了,然而看趋势还需要继续减小才能与左边的光色相匹配,怎么办?这时候需要往左边的光色中混入三色光中的一种或者几种,继续调节,直到两边的颜色匹配。在左边(被测试)的色光中添加,那就是相当于在右边的混合光中减去,这就导致了色匹配函数曲线上出现了负数。实际上,这相当于就是光线的「减法」了
比如,对于 555nm 的黄色光,色匹配函数的值是 (1.30, 0.97,-0.01),意味着将 1.30 份的红光与 0.97 份的绿光混合放在右边,左边放上 1 份的 555nm 的黄光,以及 0.01 份的蓝光,这样左右两边的光色看上去就一样了
因为有部分出现了负数,在使用和计算上都有不方便,因此就对这个匹配函数进行了一下线性变换,变换到一个所有分量都是正的空间中;变换后的色彩空间就是 CIE XYZ 色彩空间
CIE RGB 色彩空间和 CIE XYZ 色彩空间是完全等价的,两者只是差了一个线性变换。由于允许「减法」的存在,因此 CIE RGB 空间是能够表示所有颜色的;同样的,CIE XYZ 空间也能
这里进行了归一化处理,为了消除部分负数坐标,我们变换到 CIE XYZ 空间,需要满足一些约束条件:
- 所有坐标都是正的保持等能点(equal energy point)作为白色
- 使得新的 Y 坐标能够代表明度,也就是使得新的 Y 坐标等于视觉的明度响应
- 使得新的 Z 坐标在红光端保持为 0
- 使得所有色彩尽可能充满新的空间
色温和相关色温
我们知道,白光是一种混色光,不同的白光的光谱成分不尽相同;为了说明白光因为光谱成分不同而存在的颜色差异,采用与绝对黑体辐射温度相关的色温来表征这个差异
绝对黑体在特定的热力学温度下的辐射功率谱对应一种特定的色光,此时的热力学温度就表示该色光的色温,单位是开尔文(K)
国际照明委员会还规定了一些标准照明体
标准照明体 | 说明 |
---|---|
标准照明体 A | 绝对黑体在热力学温度 2856K时发出的光 |
标准照明体 B | 色温为6774K的平均昼光 |
标准照明体 D65 | 色温为6504K的平均昼光 |
标准照明体 D55 | 色温为5503K的平均昼光 |
标准照明体 D75 | 色温为7504K的平均昼光 |
不同色温的效果差异如下:
色品图(Chromaticity Diagram)
各个颜色在 CIE XYZ 空间中是怎么分布的呢?如果把纯光谱色画在 CIE XYZ 空间中,得到下图这样的曲线;连接原点与这条曲线得到的无数条射线,包围出来一个「锥体」,这个锥体就是人所能感知的所有色彩
三维下的效果如下所示:
但是这个曲线毕竟在三维空间中,是一条极度扭曲的曲线,不论是用来展示还是用于辅助计算都不方便;我们可以将这条曲线投影到 X + Y+ Z = 1的平面上(上图中的黄色平面)进行归一化,根据格拉斯曼定律,所有的颜色都是由纯光谱色混合而来的,经过投影后只能是光谱色的锥组合,都会落在这个曲线范围内;这个舌头形状的图,就叫色品图(Chromaticity Diagram),所有纯光谱色,构成色品图的边界;在上面那个图中从上往下看,黄色平面上,色品图(的边界)是这个样子的:(蓝色数字表示纯光谱色对应的波长)
色品图的边界是纯色的光谱,内部的都是非单一波长的混色光
RGB 色彩空间
CIE-XYZ 到 CIE-RGB 的转换
由于 CIE XYZ 空间是一个很方便的线性空间,与具体设备无关,因此常用来做各种颜色空间转换的中间媒介;设想某个颜色的光,经过色匹配函数的计算,得到了三个 XYZ 的值,如果直接将这三个值作为 RGB 颜色显示到屏幕上,显然是不对的,必须把 XYZ 的值转换到屏幕的 RGB 空间中的值
对于 RGB 色彩空间来说,关键点在于两个:1. 如何选择三个作为基底的颜色;2. 如何定义白色;一旦选好这两个关键参数,那么从 CIE XYZ 空间到设备的 RGB 空间的转换就完全确定了;我们平时常说的 sRGB 空间和 Adobe RGB 空间,他们的区别就在于这两个关键参数的定义不同,常用的的 RGB 空间的转换矩阵如下表:
不同的RGB色域空间
上面讲到 ,对于RGB 色彩空间来说,关键点在于两个:1. 如何选择三个作为基底的颜色;2. 如何定义白色;所以这两个定义的不同,产生了不同的RGB色域空间:
不同的 RGB 空间所能表示的颜色范围是不一样的,即使是同样的 RGB 分量,在不同的 RGB 空间中所代表的颜色也是不一样的;所以我们在描述一个 RGB 颜色的时候,不仅需要描述它的 RGB 三个分量,还要说明是在哪个空间,这就是 ICC 文件的作用
sRGB色域空间
根据定义,sRGB 的三原色以及白色点的 XYZ 坐标是:
白色点的意义在于校准三原色在向量空降中的长度,使得当 RGB = (1, 1, 1) 的时候正好对应的是白色