CS巴别塔(1)

闲聊色彩学(Chromatology)

Posted in Uncategorized by Kenny Yuan on 2009/09/28

色彩学是一门听上去没什么内容(“不就是RGB么?有什么了不起的!”)的学问。

同时,它也是一门稍微深入就能够斩获颇丰的学问。

为了激励大家对色彩学的兴趣,俺这里就把某次聚会时一个未完成的幻灯片拿出来,试着用文字讲解一下。

screenshot

绝大多数人都无时无刻不在感受着色彩,但很少有人真地明白色彩是怎么回事。和许多其它东西一样,这些问题最早都是由哲学家来回答(在这里插一句:哲学家算个屁!具体参见孔德先生关于太阳的讲义),然后被当成科学来研究(尤其是物理学),最终过了好多年,科学家们才搞明白它是怎么一回事,但可惜的是,这些研究成果的普及也仅限于极少数的一小撮别有用心的专业人士。

说到色彩学,就得要先说说什么是色彩。首先要纠正的就是认识上的误区——和人们通常认为的不同,色彩不是物体本身的属性。其实这一点很早就被物理学家认识到了,比如波义耳就认为“物体没有颜色”;色彩也不是光线的属性,牛顿在研究了他的光学之后,也说过一句著名的话:“光线没有颜色”。

那么,色彩到底是什么?我给出的定义是:色彩是人的眼睛在视觉过程中产生的一种物体的附加属性,它所反映的主要是从物体反射入眼睛的电磁波的频率(请注意“主要是”这三个字,后面会解释为什么)。我的这个定义和辞海或国标中的不同。比如国标中说“色彩是除形象以外的视觉特征”,这个定义有些故弄玄虚,所以我给它下了一个直入主题的定义。

一般来说,码农(程序员)们多数都知道RGB合成颜色的基本原理——只要改变RGB的分量,就可以合成所有的颜色;也听说过人眼中有三种细胞(视锥细胞),分别能够感受红、绿、蓝三种颜色的光,最终靠这三种细胞感受的三原色光形成了颜色视觉。

上面的这些说法基本上来说是没有问题的,但它们和其它的入门知识一样,仅仅是一种“近似的正确”。

为了方便大家以后装B,俺就把这些常见的说法一一剖析,还它们以本来的面目:

Fact 1、RGB三原色不能还原所有的色彩

从物理学知识我们知道,光线的颜色是它的频率的表现,从400纳米到700纳米波长的称为可见光(实际上不同的人能看到的范围是不太一样的)。如果将不同颜色的光混合在一起,虽然用眼睛看上去它的颜色改变了,但每种光的频率是不会改变的,改变的只是对人眼的三色视锥细胞的刺激。所以首先请记住一点:RGB三原色不能合成不同频率的光线,只是从人的眼睛看上去,合成的色彩非常近似罢了。一般把三原色的强度称为三刺激值,在选取三种原色的频率值之后(比如CIE1931采用的是700纳米的红,546.1纳米的绿和435.8纳米的蓝),就可以通过实验来进行色彩的匹配了。如果能够选取一个合适的三刺激值rgb,使它们从视觉上等同于某个可见光的颜色A,那么rgb就称为颜色A的三刺激值。很多人曾经信心满满地进行了这种实验,但最终发现:无论如何选取RGB三原色的频率,都无法还原所有的可见光谱表现出来的色彩。比如500纳米左右的黄绿色,是无论如何也不能用RGB三原色去模拟的。为了能够匹配上这种黄绿色,不得不把部分红光“添加”到了这种黄绿色上面,然后才能得到满意的匹配。于是,在这个频段,三刺激值中的红色R就只好标成了负值——之所以我们平时用不到负值,是因为CIE标准中对计算三刺激值的颜色三角进行了变形,引入了虚拟的顶点X、Y和Z,然后变形到麦克斯韦三角形。我们使用的三刺激值其实不是真正的RGB,而是虚拟的XYZ(比如:X=2.7689R+1.7517G+1.1302B)。

Fact 2、眼睛会错误地感知色彩

1)颜色不变亮度变化:颜色变化了。

既然色彩是光线频率的被人眼所感知到的属性,那么它应该和光线的强度无关。但实际上,改变光线的强度,人眼感受到的色彩是在变化中的(贝楚德-朴尔克效应)。

2)亮度不变颜色变化:亮度变化了。

在光的能量(强度)不变的情况下,改变光的频率(颜色),眼睛感知到的亮度会变化。举例来说,如果你在显示器上调出255的蓝和255的绿,就会发现它们的亮度感觉上至少差一倍。实际上,人眼中感绿的视锥细胞占50%,感红的和感蓝的加起来占另外的50%。这种亲近绿色的生理特性很可能是进化而得来的。

3)距离不变颜色变化:距离变化了。

按理说,颜色应该和离物体的距离无关。但因为红色的波长大于蓝色的波长,故而它的折射率较低,所以红色光线的焦距更长一些。最终导致红色的物体看起来更近(嗯,从这点可以看出,人眼的确是廉价货,都不支持相机镜头中最常见的“防色散”功能)。

4)以上都不变但视角变了:颜色又变化了。

前面提到的色彩还原的实验都是在2度的视场下做的。在大视角下,人眼感知的颜色是不均匀的,而且受到黄斑中央凹中的黄色素的影响,颜色的饱合度也会降低。

5)啥都不变时间推移:颜色还是变化了。

原因很简单:神经的疲劳。

6)在不同的基础色彩上,能够分辨的颜色变化程度不同。

既然色彩是频率的表象,那么在不同的频率下,当频率的变化值相同时,应该都能够分辨得出的。但实验结果正好相反,在某些频率下,人眼是相当不敏感的。比如在红光的区域,即使是很大的频率变化,人的眼睛也不能识别它们在颜色上的差别。

(注:以上提到的都是人的眼睛在“静态”和“纯色”的情况下的“毛病”。在动态场景、混合形状和混合颜色的情况下,人眼的问题会更多,与之相关的内容这时暂时不涉及)

写了好久,才刚刚写完一页幻灯片的内容。看来这个“闲聊”得分系列了,所以来一个“下期预告”吧:人的眼睛真的是用RGB体系来感知色彩吗?

Tagged with: