【ISP】颜色的理解
目录
1.人类的视觉系统与颜色
1.1 人类的视觉系统与颜色
1.2 可见光,以及功率谱分布
1.3 人类的颜色视觉
1.4 其他人类视觉系统和颜色的知识
1.5 总结
1.6 参考资料
2.三原色理论与颜色匹配实验
2.1 三原色理论
2.2 颜色匹配实验
2.3 颜色空间
2.4 总结
2.5 参考资料
3. 色域、色温和白平衡
3.1 xyY色彩空间
3.2 光照的影响
3.2.1 色调适应
3.2.2 色温
3.3 总结
3.4 参考资料
4.与设备相关的颜色
4.1 标准颜色:XYZ和sRGB
4.2 再看数码相机内部的处理流程
4.3 总结
4.4 参考资料
5.其他参考
1.人类的视觉系统与颜色
我们在生活中见过、听过各种各样的颜色,我们平常用的各种数码软件也能够呈现出丰富多彩的颜色,在输入字符时还可以调整各种颜色,颜色对我们来说是似乎非常自然的事物,但你有没有像我一样思考过颜色是什么?我们看到的颜色和动物看到的颜色一样吗?为什么不同的物体呈现出不同的颜色?颜色是如何测量的?我们经常听说的RGB颜色空间是怎么回事?同样的物体,在不同的光照下有时候看起来颜色不太一样是怎么回事?
Mac OS上典型的颜色选择界面
因为颜色跟计算摄影的主题高度相关, 所以我希望能够通过一些文章来回答这些问题。颜色跟视觉系统高度相关,所以首先让我们来看看人类的视觉系统
1.1 人类的视觉系统与颜色
这幅图展示了人眼的结构示意图,这是一个非常复杂的光学成像系统。在视觉系统中,视网膜是一个超级重要的组件,起到了承上启下的作用。在视网膜表面以前,是一个个单独的光感细胞在进行光信号的搜集,人类的感知系统还没有介入,据估计光感细胞的数量在1.3亿左右。你可以粗略的认为从角膜到视网膜的表面构成了一个1.3亿像素的数码相机。而视网膜光感细胞内部则形成了复杂的连接,有趣的是,视神经由大约一百万根纤维组成,携带着大约1.3亿光感受器产生的信息,因此从光感细胞到视神经纤维信号经过了极大的、人类现在还没有完全理解的压缩过程。下图是一个视网膜的结构示意图:
对于颜色这个主题,我们现在首先关注的就是光感细胞。大家可以从上图看到很明显有两种类型的光感细胞:
在低亮度水平时,只有视杆细胞发挥作用,而在高亮度水平时则是视锥细胞发挥作用,在中间亮度水平时,两者都会同时工作。 但最关键的一点是,视杆细胞只有1种,对感知颜色没有贡献,但是视锥细胞则有3种,这3种细胞对不同波长的光的响应程度是不一样的, 下图展示了3种视锥细胞(这里我们命名之为L/M/S)对不同波长的光的相对响应值,正是如此才导致了人类产生各种颜色的感觉。
1.2 可见光,以及功率谱分布
我们目前对光和颜色本质的理解可以追溯到牛顿的工作。在讨论对象时,通常会说它们具有某些颜色。例如,天空可以被描述为蓝色,苹果被描述为红色,草被描述为绿色。然而,在现实中,没有观察者就没有颜色;因此,将颜色归因于对象并不是严格准确的。牛顿在其文章中很早就阐明了这种想法,“正确地说,光线不是有色的;在它们里面,没有别的什么,只有某种力量和倾向来激起对这种或那种颜色的感觉。”因此,准确地说,来自天空的光不是蓝色的,而是在观察者看到时唤起蓝色的感觉。
那么如果光线里面并没有“颜色”这种属性,那么我们用什么来描述光线呢?牛顿发现阳光能够被分解为不能进一步分解的单色光。
因此,光的物理特征在于它的光谱成分。因此我们通常采用光谱功率分布(SPD)的表征光,它表示光中不同波长的单色光的相对能量分布,下图展示了常见光源的SPD:
不同颜色的物体反射的光线也具有不同的SPD:
光谱功率分布如此与颜色高度相关,我们可以利用这个概念对人类的颜色视觉进行进一步建模。
1.3 人类的颜色视觉
人的视觉系统在感知颜色时是有层次的,下图展示了这种层次结构。
人们对视觉系统的深层次机理还有很多未知的地方,但是对视网膜颜色已经有了深入的理解,视网膜本质上是一个传感器,而光传感器对不同波长的光的敏感度用光谱敏感度函数f()来描述,这样一个光源造成的响应R可以描述为:
它实际上是光源中各个单色光的响应的加权和。当用
而这些响应可以用一个具有3个元素的向量c来描述,它就是我们所说的“视网膜颜色”
有趣的是,不同SPD的光,可以得到同样的视网膜颜色。这使得我们测量颜色时有了更多的挑战和困难。比如下面展示了两个不同的光谱功率分布,一个来自生菜,一个来自绿茶,但是在观察者看来都是同样的绿色。
我们可以认为视网膜颜色空间是一个3维的颜色空间,我们称之为LMS颜色空间。任何一种纯色光在这个3维空间中都有对应的坐标,我们可以画出这些坐标,并从不同的角度去观察画出的曲线:
可以观察到这条曲线呈套索状,并位于3维空间的第一象限,它的起始点和终点都是原点,并且除了原点之外都与M轴无交点。
上面的曲线假设输入的纯色光是单位强度的,那么如果强度有变化呢?此时的曲线的样子是下面这样的,可以看到我们得到的颜色坐标位于一个凸面上。
如果是由多种不同强度不同波长纯色光混合而成的光呢?此时它的颜色坐标则会位于这个凸面包裹的范围之中:
1.4 其他人类视觉系统和颜色的知识
这里我记录了一些有趣的人类视觉系统与颜色相关的知识:
- 晶状体会随着年龄的老化而变得越来越黄,这会导致它比年轻时吸收更多的蓝色光。如果一个物体是紫色的,那么其中的蓝光被吸收会导致老年观察者比起年轻观察者更倾向于认为这个物体偏红。
- 如果晶状体在水平和垂直方向的曲率不一样,会导致散光。散光的一个结果是,在视网膜上,水平边缘将始终显示彩色条纹,色差,而垂直边缘将显示不同颜色的条纹
- 晶状体还会吸收入射的紫外线(295nm到400nm之间)的光波,尽量减少它们到达视网膜。但很少一部分吸收的光能会以新的波长重新发射出来,形成眩光。年轻人的晶状体的发射比例很少(例如30岁时入射的天空光的再发射比例约为0.002),但约到老年,这种再发射比例越高(有报道指出60岁时会达到了0.017,80岁时会达到0.121)。这会导致老年人观察偏紫色物体时会感觉到眩光。
- 视网膜后面是一层被称为色素上皮的层。这个深色的色素层用来吸收任何恰好通过视网膜而不被光感受器吸收的光。色素上皮的功能是防止光线通过视网膜散射回来,从而降低感知图像的清晰度和对比度。夜间活动的动物的视觉系统放弃了图像质量的改善而将光反射回来,以便为其光感细胞提供第二次吸收能量的机会。这就是为什么鹿或其他夜间活动的动物的眼睛在迎面而来的汽车的前灯下看起来会发光。
- 视网膜的中心凹是视锥细胞最集中的区域,这里有一层黄斑(Macula)保护视网膜的这一关键区域避免强烈暴露于短波光线中。由此它还减少了短波光的色差,而这种色差会导致图像严重失焦。
- 人类的暗视能力取决于视杆细胞,而它对蓝色光更加敏感。因此在非常暗的环境下观察物体时,蓝色物体会显得较亮,而红色物体则几乎接近黑色。
- 眼见不一定为实,由于视觉系统各种复杂的色调自适应性,我们经常会出现错误的判断,例如下图中A、B两个格子具有同样的颜色值,但我们却倾向于认为它们是不同的颜色:
1.5 总结
在这篇文章中,我介绍了与人类视觉系统感知颜色相关的一些知识,为进一步阐述计算摄影学中与颜色相关的知识打下一些基础,希望对你有帮助。也请期待后面我对颜色这一与计算摄影相关的重要主题的更多文章。
1.6 参考资料
此次的文章参考资料较多,包括了:
- Fairchild, “Color Appearance Models,” Wiley 2013.
- Michael Brown, “Understanding the In-Camera Image Processing Pipeline for Computer Vision,” CVPR 2016
- CMU 2017 Fall Computational Photography Course 15-463, Lecture 11
- Gortler, “Foundations of 3D Computer Graphics,” MIT Press 2012.
2.三原色理论与颜色匹配实验
2.1 三原色理论
在3种视锥细胞被发现和深入研究之前,人们很早就通过经验观察到仅通过3种基本颜色就可以组合成其他的颜色,这就是三元色理论。
虽然三元色理论能够解释一些现象,但是人们还需要更加准确的方法来量化颜色。于是在三元色理论的基础上,人们希望构建3个标准的基本颜色,并以此来量化所有的可见的颜色。
2.2 颜色匹配实验
20世纪20年代,帝国理工学院的W.David Wright 和 伦敦国家物理实验室的John Guild发起了一系列颜色匹配实验,来进行这样的量化。而后来国际照明委员会(CIE)也基于他们的实验给出了CIE的各种关于颜色的结论和标准。
在这个实验中,观察者通过一个2度的FOV的观测窗口观察投影纯色的屏幕,屏幕被分为两个投影区域,一个区域用于投影待测试的光,另外一边则是投影3个基本光的混合光(如上图所示,这里的基本光是625nm, 545nm以及435nm的光,代表着R/G/B三种基本颜色)。观察者可以改变三个基本光的强度,直到他不再能区分屏幕上的两部分颜色,此时就记录下3种基本颜色光的强度。
实验首先从设置待测光线为单色光开始,希望能找到所有可见光范围内的3种基本颜色光的强度组合。但他们却发现,对于某些单色光,无论如何调整基本颜色光的强度,都无法使它们的混合光与左侧的待测单色光一致。此时他们允许观察者在左侧投影任意一种或两种基本光,使得最终结果还是能左右平衡,这个过程相当于是在右侧投影“负”的基本光,或是在右侧“减去”基本光。
当所有的单色光都用这种方式遍历一次后,他们得到了一大堆数据,并可以画出如下的曲线:
这个实验非常有趣,如果你现在想模拟这个实验的话,可以访问
Color matching
通过下面这个界面可以自己来做一次观察者。
Wright/Guild的实验方法可以用下面的公式来描述:
当待测光源是混合光,而且每种波长的光强用来描述时,该实验可以表示为
对于所有具有单位强度的单色光,可以在这个3维空间中画出它们的坐标。从不同视角观察这些坐标构成的连线如下:
如果做了适当的归一化,这个曲线看起来会更加的规整:
考虑到光强的变化,单色光的坐标构成了一个曲面:
前面我们讲过了LMS颜色空间,这里又有了一种通过颜色匹配实验得到的CIE RGB颜色空间,这两者其实都是为了描述颜色而存在的,本质上具有等同的意义。当我们说LMS颜色时,是在分解(Analytic)颜色,此时我们认为颜色可以表示成光谱功率分布函数和传感器的光谱敏感度函数相乘的结果。而当我们说RGB颜色时,我们是在合成(Synthetic)颜色,是指颜色可以用3个基本颜色根据颜色匹配函数积分而成,这对于我们制造显示设备来重现出颜色很有必要。
当然,LMS颜色空间中,所有颜色空间都位于第一象限(即不存在坐标为负的点),而CIE RGB颜色空间则具有负的坐标点。由于实际的显示设备只能表现“正”的颜色,所以CIE RGB颜色空间在实际使用过程中只能表现出有限的颜色。
到此我们介绍了人眼的3种视锥细胞具有不同的光谱敏感度函数,由此引出了LMS颜色空间。同时我们介绍了颜色匹配实验,从而引出了CIE RGB颜色空间。接下来我们来看看线性颜色空间的概念,以及与之相关的其他的重要的颜色空间。
2.3 颜色空间
正如前面所讲,单位强度的单色光的颜色匹配实验可以用如下公式来描述:
写成矩阵形式就是
对于任意强度组合的混合光,则可以表示为:
实际上,我们前面介绍过的LMS颜色空间和CIE RGB颜色空间就符合这种关系,很多重要的颜色空间也是如此,这里我首先介绍的是1931年CIE制定的XYZ颜色空间。
我们前面讲过,RGB颜色空间的颜色匹配函数有负值,这使得在实际使用过程中它无法表征所有人眼可以感知到的颜色:
1931年, CIE在此基础上制定了一种标准的颜色空间:XYZ颜色空间,它实际上是由RGB颜色转换而来
其新的颜色匹配函数表示如下:
如果已知光的SPD,那么X/Y/Z的值就可以通过上述匹配函数得到:
这个颜色空间中不再需要负的匹配函数值,它可以表现出全部可见的颜色,其中Y表示了亮度,而X/Z则表示了色度.
在XYZ色彩空间中,单色光的坐标也位于一个套索曲线上。对X/Y/Z值做适当的归一化后,这条曲线的样子如下,第二行我们连接了曲线上的点和原点,这些直线表现了不同的光强。
如果两种具有不同SPD的光经过上述匹配函数得到的X/Y/Z值相同,那么它们就会表现出同一种颜色:
对比一下我们到此为止介绍的3种颜色空间的匹配函数:
XYZ色彩空间是一种理论上设备无关的色彩空间,任何设备都可以将自己的色彩通过某种线性方式(我们上面提到的M矩阵)转换到XYZ色彩空间,这使得CIE XYZ成为了一种标准的颜色空间,我们之后还会看到它的重要应用。
2.4 总结
这篇文章介绍了三原色原理,以及在此基础上接近100年前人类所做的颜色匹配实验和随之带来的重要成果:CIE RGB和CIE XYZ颜色空间,后者已经成为了一种非常重要的标准颜色空间。之后的文章会继续探讨计算摄影学中的颜色知识,希望能够给你启发和帮助,别忘了给我点赞哦^_^
2.5 参考资料
此次的文章参考资料较多,包括了:
- Fairchild, “Color Appearance Models,” Wiley 2013.
- Michael Brown, “Understanding the In-Camera Image Processing Pipeline for Computer Vision,” CVPR 2016
- CMU 2017 Fall Computational Photography Course 15-463, Lecture 11
- Gortler, “Foundations of 3D Computer Graphics,” MIT Press 2012.
3. 色域、色温和白平衡
3.1 xyY色彩空间
XYZ色彩空间中,Y代表了亮度,有的时候我们只想独立探讨亮度-色度时,就会用到另外一种颜色空间: CIE xyY,它实际上是由XYZ色彩投影到X+Y+Z=1平面得到:
x,y 坐标与色彩的关系如下:
这里面有一些关键的概念可以由下图展示出来:
整个马蹄形曲线所包裹的范围就称为XYZ色彩空间的色域,这里面包括了所有的可见颜色。然而并非所有的色彩空间都能够展现出所有的可见颜色。由于颜色匹配函数中的负值,RGB色彩空间能实际重现的颜色只是整个颜色空间中的一部分。
3.2 光照的影响
3.2.1 色调适应
我们之前讨论的场景都忽略了光照的物体颜色的影响,我们假设是由均匀的单色光组成的白光照射物体产生的颜色。但实际上的情况是这样的:
这里e是环境的光谱分布,r是物体表面的反射系数,而l才是人眼接受到的光辐射。由此可见,物体呈现出来的颜色本应跟环境光照和其表面反射高度相关。当环境光改变时,我们看到的颜色有很大概率应该不同。
不过人的视觉系统具有一种神奇的能力,这使得我们的视网膜得到的颜色和感知颜色是不同的,在不同的光照下,同一个物体的感知颜色是相同的,我们称之为人眼的色调适应能力所带来的颜色一致性:
人眼具备的这种能力数码相机并不具备,所以在不同的光照下如果没有经过特别的处理,拍摄的照片的颜色是不一致的——注意人眼只对当前看到的实际场景有这种色调适应能力,对拍摄的图像是没有的。
3.2.2 色温
有时候,人们会用色温来描述不同颜色的光源,这是一个跟黑体辐射相关的概念,其深层次的原理已经超纲了,所以这里就不进行细节阐述了,我们只看现象:
不同色温的光的颜色不一致,如果把这些光表现在CIE xy色度图上,会是这样的:
CIE制定了一些标准的人工照明光源的SPD,它们可用于模拟不同的自然光线,例如:
- A光:代表标准的白炽灯
- B光:代表午后的日光
- C光:代表一般的日光
- D光:代表不同色温(如5000K, 5500k, 6000K)下的自然光,一般称作D50,D55,D65
- E光:等能量恒定光源,类似D55,但不代表任何真实光源
- F光:模拟各种荧光灯
我们来看看它们的SPD:
这里面有一个概念跟我们之前讲的色调适应高度相关,那就是白点,白点代表着某种SPD,在人眼看来这种光是白色的。我们又讲过在不同的光照下,相机拍摄的颜色是不一样的,那么这就引出了“白平衡”的概念,就是要让在不同的光照条件下拍摄的白色看起来都一致。下图展示了不同的人工光照在色度图上的位置:
下图是不同色温照明下,白色物体在照片上展现出不同的颜色:
如果我们进行可白平衡,就可以让白色的物体在不同的光照下在相片上看起来颜色一致:
可以用下图展示一种简单的白平衡方法:
3.3 总结
本文主要介绍了色域、色温、色调适应以及白平衡的概念,希望能把我在2. 从入射光到JPEG相片-数码相机内部的秘密中没有讲清楚的白平衡的概念阐述的更清晰一些,也希望对你有帮助,别忘了给我点赞哦^_^
3.4 参考资料
此次的文章参考资料较多,包括了:
- Fairchild, “Color Appearance Models,” Wiley 2013.
- Michael Brown, “Understanding the In-Camera Image Processing Pipeline for Computer Vision,” CVPR 2016
- CMU 2017 Fall Computational Photography Course 15-463, Lecture 11
- Gortler, “Foundations of 3D Computer Graphics,” MIT Press 2012.
4.与设备相关的颜色
4.1 标准颜色:XYZ和sRGB
于是1996年微软和惠普一起共同制定了sRGB颜色(Stardard RGB), 试图形成某种标准,它的转换如下:
其中R/G/B三个基本颜色在xyY中的坐标是:
由此形成的色域为:
在这个色域中,白点刚好是D65光照对应的点,这是一个很重要的性质,意味着sRGB暗含了对显示信息观看条件的要求是D65光照,另外它也对应于sRGB空间中的R=G=B=1
XYZ和xRGB都是标准颜色,都与设备无关。同样的sRGB值对应着同样的XYZ值。所以现在各种拍照设备里面都大量采用了sRGB标准颜色,我们可以将这种拍摄出的颜色转换到各种实际设备上的不同颜色空间。
这里面我们又看到了XYZ颜色所起的中介作用,事实上,XYZ颜色是很多颜色空间的基础,这也是CIE当初制定这一标准颜色空间的原因:
4.2 再看数码相机内部的处理流程
当然,虽然有了sRGB, XYZ这样与设备无关的颜色标准,但是正如我们在2. 从入射光到JPEG相片-数码相机内部的秘密一文中所说,不同的相机内部的流程是不一样的,因此最终产生的照片看起来也会有很大的不同。我们当时对相机内部流程的介绍忽略了颜色空间的转换:
这里我的理解:
sensorRGB是CFA经过解码赛克后的图像,此时的图像还没有色域的概念,只有经过了CCM,此时往哪个色域校正,那么此时校正完成后,就应该处在哪个色域。
一般使用的爱色丽24色卡,他在xyz的坐标是固定,只会因为色域选择的不同,导致RGB值不同。
CCM校正其实就是RGB值之间的线性变换关系。一般可以使用随即梯度下降+deltaE的方式。
但事实上,这一步非常的重要。由于图像传感器中颜色滤波器阵列(CFA)的存在,在颜色空间转换之前,我们获取的R/G/B颜色是跟设备高度相关的,它取决于传感器对入射光SPD的光谱敏感度函数(SSF)
例如Canon 40D和Canon 50D的SSF就非常不同(即使是同一厂商)
因此很有必要将这种不同的RGB转换为标准的sRGB进行处理,这通常是通过Color Correction Matrix(颜色转换矩阵)来完成的。例如在一些重要书籍里面,整个颜色转换的过程分解如下:
可以看到为了得到sRGB颜色,我们经过了device RGB->XYZ->LMS->WB->XYZ->sRGB的过程,其中WB(白平衡)放在了这里,与我们原来描述的白平衡在前的方式不同(这取决于设备生产商,不同的厂商做法不一样,总的来说,在工业界更加倾向于白平衡在前的做法)
颜色转换以及随后的Tone Reproduction共同构成了“颜色渲染"步骤,这一步每个设备生产商甚至同一生产商的不同设备的做法都是不一样的。
这也就造成了用不同设备拍摄同一场景时,我们看到的照片颜色不一样的现象:
4.3 总结
这篇文章基于前面所讲的知识,对设备相关的颜色以及处理流程做了更多的探讨。我们知道了人们对制定标准的颜色空间所作出的努力(XYZ颜色和sRGB颜色),也看到了之前在2. 从入射光到JPEG相片-数码相机内部的秘密中没有讲清楚的颜色转换过程的细节。希望本文对你有帮助,别忘了给我点赞哦^_^
4.4 参考资料
此次的文章参考资料较多,包括了:
Fairchild, “Color Appearance Models,” Wiley 2013.
Michael Brown, “Understanding the In-Camera Image Processing Pipeline for Computer Vision,” CVPR 2016
CMU 2017 Fall Computational Photography Course 15-463, Lecture 11
Gortler, “Foundations of 3D Computer Graphics,” MIT Press 2012.
5.其他参考
人类的视觉系统与颜色23. 颜色知识1-人类的视觉系统与颜色 - 知乎
三原色理论与颜色匹配实验24. 颜色知识2-三原色理论与颜色匹配实验 - 知乎
色域、色温和白平衡25. 颜色知识3-色域、色温和白平衡 - 知乎
与设备相关的颜色26. 颜色知识4-与设备相关的颜色 - 知乎
计算摄影学 - 知乎
Welcome to Bruce Lindbloom's Web Site