这篇的参考资料来自于ICCV2023的一个PPT,名称为《Understanding the in-camera rendering pipeline & the role of AI and deep learning》,我就不贴地址了,自己搜一下题目就能搜出来。
这个PPT的分为两大部分,前半部分是颜色学,后半部分是AI用于ISP的介绍。选择它作为本章的参考文献有两个理由,第一是ICCV足够权威,ICCV全称IEEE International Conference on Computer Vision,即国际计算机视觉大会,是计算机视觉方面公认的三大顶级会议中级别最高的,另外两个是CVPR和ECCV,统称ICE。第二是它足够新,2023年的PPT,又新又权威,是做为学习一个新知识的最理想的参考资料,毕竟一开始就学习正确的知识,总好过学一堆错误的然后再不断证伪,不是么?
本文的配图都来自这个PPT,PPT中的内容有些单薄,我又查找了一些别的资料,加上自己的理解,写成了这篇文章。颜色空间在图像处理中的重要性是不言而喻的,本文从人眼的模型开始写起,计划是写完常见的几种颜色空间结束,这是第一篇。
牛津词典是这样定义颜色的:The property possessed by an object of producing different sensations on the eye as a result of the way it reflects or emits light.(翻译:由物体反射或发出光的方式对眼睛产生不同感觉的特性。)
从这个定义可以找到两个关键词,光和眼睛。
一、光和人眼
上小学的时候就做过一个物理实验,用一个三棱镜就能把光分解成“赤橙黄绿青蓝紫”这7种颜色,这7种颜色代表了不同波长的7种光源(一般认为在380nm - 780nm之间)。而人眼是通过感受光“看见”事物的,这个原理大致可以用图1中的内容来解释。

图1 人眼和光的关系
人眼当中感受光的是视网膜,视网膜当中的感光细胞首先可以分为视锥细胞(在明亮的环境当中起作用)和视杆细胞(在黑暗的环境当中起作用)这两类,而视锥细胞又进一步分为Short(简写为S)、Medium(简写为M)、Long(简写为L)三种。虽然图1当中3种视锥被分别标注成了红绿蓝3色,但是实际上人眼的S、M、L视锥细胞并非是真正的“红绿蓝”细胞,只是S、M、L三种视锥细胞对于不同波长的敏感性不同。
通过实验测得三种细胞对于不同波长光源的敏感度(光-生物电响应)如图1右侧所示,S对应蓝色,M对应绿色,L对应红色,每个细胞都对相当大范围的光谱有反应,只是非常大致地相较来说,一个偏爱蓝,一个居中,一个稍微偏爱红。
针对人眼的这种特性,我们定义了颜色,颜色其实更多是一种心理学上的概念(主观认识)。不同的物种对于色彩的认知是不同的,比如狗就没有颜色的概念,就是同为人类,不同的人对于色彩的感受也是有区别的,据说女性对色彩的识别能力普遍要高于男性,何况人类中还有一部分被认为是“色盲”。
二、从光谱到色匹配函数
想想看,人类有那么多的显示设备,这些显示设备都是彩色的,总得有一套规范来定量的描述颜色吧,那该用什么来描述颜色呢?有一个叫做国际照明委员会(英语:International Commission on illumination,法语:Commission Internationale de l´Eclairage,采用法语简称为CIE)的组织,给出了色域的标准定义。
他们是这么做的,因为人眼是通过亮度和色彩感知的,而光又是有强度和颜色的,他们把人眼当成一个黑盒子,根据光和人眼之间的联系分别设计了闪烁实验(flicker photometry)和色匹配(color matching)来测试光的强度和颜色。
用闪烁实验测试光的亮度,如下图2所示,准备可调光和参考光两种光源,可调光和参考光以每秒17次的速度交替(17 hz的频率),由观察者来判断两束光是否一致,如果两束光的亮度不一样,人眼会感受到闪烁,观察者可以通过调节source light让两束光亮度一致。

图2 闪烁实验
最后得到的结果是图3中的曲线,注意这里的y轴,y轴代表的是测试光(或参考光)的匹配功率,也就是说,为了匹配参考光,source light需要调整到多大?这条曲线告诉我们,两边的蓝光和红光需要比较大的功率,而中间的绿色需要的功率最低,这说明在人眼看来绿色相对较亮,这可能就是为什么bayer模式保留了2个通道的green,而green在色差恒定(demosaic算法中的理论)理论中被认为是亮度分量的原因,因为在人眼看起来,绿色就是比其他两个通道更亮。

图3 闪烁实验的结果
接下来是CIE的第二个实验:色匹配实验(color matching),CIE选取了700nm的红光、546.1nm的绿光和435.8nm的蓝光作为基光(因为这三种波长的光可以稳定的产生),通过调整这三种基光的比例,所有人眼可见的色光都可以产生,这就是光的三基色理论,如下图4所示。

图4 光的三基色理论
图4中的R1、G1和B1是比例系数,这就是说,我们现在调试颜色使用的数值不是颜色,而是选定基色的比例系数,这个系数该是多少呢?CIE是这么做的,如图5所示,左边是测试色,右边是匹配色,匹配色是由R、G、B三个基光产生的,然后准备一个观测者,正对着观察颜色(要求视野为2度,这个角度人眼的色锥细胞最集中),然后不断的增加或者减少匹配色的三分量的比例,把这个比例记录下来,就获得了某个颜色的色匹配系数,把可见光的380nm~780nm全观测一遍,就获得了色匹配函数(图6所示)。
但是在实验中CIE遇见了一个问题。

图5 色匹配实验
对于一些测试颜色来说,无论怎么调节右边的三基色都无法与左边测试色相匹配,比如某种光的强度已经减到0了,按照这个趋势还得往下减,这个时候怎么办呢?有办法的,让观测者对左边的测试色增加某种基色来与右边相匹配,对左边增加,就相当于对右边减少,这样一来,得到的结果中就有负数(如图6所示)。

图6 CIE的RGB色匹配函数
其实图6中的负数也在告诉我们一个信息,就是选择RGB三分量作为基色,并不能覆盖人眼感知到的颜色的全部范围,但是大部分都可以被覆盖到。实际上,基色可以自己定义,你可以任意定义三种颜色或者是几种颜色作为基色,比如定义两种紫色作为基色也是没问题的,只是能表达出的颜色没那么多而已。而且,作为普通人,你定义的基色不会被普遍采用,只能自娱自乐,看看人家CIE,全称是国际照明委员会,这个江湖地位是全球学术界承认过的,所以我们只能乖乖用人家定义好的RGB色匹配函数。
色匹配函数(CMF,Color Matching Function)的江湖地位这么高,猜猜CIE用了多少人当观测者来获得它?500个?1000个?答案是17个。
三、从色匹配函数到XYZ
上面的色匹配函数是有了,但是它不好用啊,里面还有负数呢,怎么办呢?还是CIE,在1931年整了个活儿,他们推出了一个矩阵,就是下面的这个公式(1),终于让RGB转到了XYZ。
(1)
这个矩阵的意义是把RGB基转到了XYZ基,转换之后消灭了负数,把白色定义在了X=1/3、Y=1/3、Z=1/3的中心位置。经过公式(1)转换到XYZ之后,XYZ还是代表三基色系数,本质上和RGB是一回事,只是和RGB差了一个线性关系,这个就像大学时微积分里面把直角坐标系转到极坐标系或者是球坐标系的道理是一样的,坐标系里面的内容还是那些,只是换了一个角度来看待它。
CIE给出的这个XYZ画出来如图7所示,这张图是为了说明和图6相比,负数被解决,同时纵坐标轴也有了变化。

图7 CIE在1931定义出的XYZ
CIE推出的XYZ提供了一个在设备之间匹配的规范空间,使得电子设备(例如:相机、平板、扫描仪、打印机、显示器)可以计算其设备特定值与对应的CIE XYZ值的映射。
根据图7可以画出一个3D的XYZ图,我找到的资料是图8这个样子的。它的意思是把图7中横轴上每个位置对应的(x,y,z)三个值读出来,对应到图8的三维坐标上就能确定一个位置,然后把图7中横坐标的波长所对应的颜色标记上去,就得到了图8这样的一个3D的图,所以这个图应该是个立体的,只是图8的这个3D图立体的没那么明显。

图8 CIE XYZ的3D图
我又另外找到一张立体效果更好的图,如图9所示,虽然它的坐标是LMS,但是我们知道XYZ对应的就是RGB,而LMS对应的就是RGB三基色的意思。图9中暗红色就是图8中的那一圈线。这里需要一点儿想象力,把图8往左方向立起来,再往右转45度,就是图9的造型。

图9 LSM的3D图
好了,现在还是得回到图8,我们已经知道它是个立体的图了,它的意思就是XYZ张成的颜色空间其实是一个锥体,而不是一片,那么舌形图又是怎么来的呢?答案是从XYZ空间切了一片切下来的,但是切法是有讲究的。
四、从XYZ到舌形图(马蹄图)
舌形图其实是XYZ空间的一个投影,先说一下为什么要投影。我们讨论某种颜色其实是在讨论它的亮度和色度,亮度决定了颜色是明亮还是灰暗,色度决定了它是浓烈还是寡淡,在使用时,假定亮度是固定的,这个时候想要查色度,那个三维的XYZ就开始不好用了,所以我们需要一个2D的能表达颜色的图。
具体要怎么投影呢?图10解释了XYZ投影到2D平面的原理,光可以看成是从一个点向3维空间发散的模型,如果把发光的这个点放在XYZ的原点处,就是图10左边的样子,这个时候如果拿一个平面去挡住这些光,比如X+Y+Z=1这个平面,就可以获得光投影在平面上的图,如图10右边所示。

图10 XYZ投影原理
图10的右边还重新定义了平面x和y的坐标,x=X/(X+Y+Z),y=Y/(X+Y+Z),计算三维投影相当于消灭掉了一个坐标,所以x轴和y轴要做个转换。把这个原理用在CIE的XYZ上,就是图11所示的情况,图11相当于把图9拽着原点向右转了180度,原点从图的最里面被转到了面向观众的位置。

图11 CIE XYZ在X+Y+Z=1上的投影
现在面向我们的0点就是这束光的原点,用X+Y+Z=1的平面截断它,就得到了图12所示的投影平面,在投影平面上,亮度是一样的,这样就可以忽略掉一个坐标系,只用x和y就能标记出颜色的色相和饱和度,CIE把这个平面叫做xyY坐标系,Y代表亮度。

图12 CIE XYZ在X+Y+Z=1上的投影平面
把这个xy平面画出来,就是2D的色度图(图13),在这个平面上,亮度被限制成了1,整体形状像个舌头,因此得名舌形图,也有文献叫它马蹄图。注意中间标记出来的那个“E”,它还是XYZ平面定义出的“white point”,在舌形图上,这个“E”也是投影过来的。

图13 CIE xy chromaticity diagram
(未完待续)