【首先明确概念,色彩是什么】
关注了我们很久的粉丝应该都比较清楚我们以往的测试和点评相对来说强调的都是明度方向的信噪比和分辨率,对于色彩还原和色度感知这个事情则相对来说谈得比较少。不过谈得少并不是因为我们不在意这个(实际上大家应该也都明白色彩表现是影像系统非常重要的一部分,尤其对于被微信压图摧残到身心俱疲的朋友圈摄影大师们),而是色彩科学本身就是一个复杂的多变量系统,很难通过简单的测试来盖棺定论的给一个结论。今天我们要做的就是系统的讨论一下这件事情,让大家了解一下色彩这个事情究竟复杂在哪,为什么拿相机拍出来的跟你眼睛看到的总是有差异,标板色卡还原得好并不能代表实拍场景也能还原好,等等。
要讨论一个东西第一件要明确的就是它的定义或者概念。要问色彩是什么,可能有一些物理学基础的人就会脱口而出:色彩是人对不同频率电磁波的视觉感受。
(严格来说应该按频率算,介质的折射率会影响波长——但是泡在水里的红色物体并不会变蓝。不过一般讨论这个问题的时候都默认是同种介质,λ=1/f,用波长和用频率严格来说指的都是单个光子的能量,下同)
这句话怎么讲呢,没有错,但是只说对了一部分。
上面这句话如果拆开来看实际上包含了两个命题,一个是“相同频率与频率分布的光在人眼看来是相同的颜色”,这个没什么问题,同样波长的单色激光在同一个人眼里看来确实都会是同一个样子的(或者说光子是全同玻色子无法区分)。但另一个命题“不同频率与频率分布的光在人眼看来是不同的颜色”,这个可就不一定成立了。
乍一看可能很多人会感觉很奇怪,波长都不一样了为什么人眼看起来还可能是同一种颜色呢?这个问题理解起来其实也很简单,人眼所见的绝大部分光都是非单一频率的复色光,人眼看到的是 2,但这里边的 2 可能是 1+1,也可能是 0.5+1+0.5,也可能是 0.5+0.5+0.7+0.3……千变万化,无数组合。
最根本的原因还是在于人眼和人耳对于入射信号频率的感知方式完全不同,人耳是连续取样的,声音不同的振动频率会引起听觉毛细胞的不同信号,进而被大脑感受和区分。而人眼的色觉细胞是有基底的,只有有限种频率可以触发响应——准确的来说,是三种。
绝大部分人类都有三种视觉色素,其中感受短波(蓝光)的感受器是从远古时代海洋祖先那里继承来的,红绿色的感受器同源,所以人类红绿色盲一般成对出现。当然,我们今天讲的是大部分人的色觉感受,暂时先不考虑色盲以及四色视觉这种极为特殊的情况。
所以很简单,假设入射到你眼里的是一个 575nm 波长的黄色光光子,根据上面的图可以查到此时人眼对它的响应是[X,Y,Z]=[0.95,0.95,0],然后大脑就会判断你看到的是黄色物体。但是反过来,假设我们接受的是同时射入感光细胞的一个 525nm 绿色光子和一个 625nm 红色光子呢?我们将得到的响应是[X,Y,Z]=[0.6,0.6,0],你只会看到一个黯淡一点的黄色物体,而不是区分出它原来有红有绿。
是的,三原色是根据人眼视觉特性演化而来的一个人为规定,而不是什么自然真理。
用线性代数的语言来说,假设 380nm~780nm 之间每隔 1nm 就进行采样的话我们得到的是一个 400 维空间,而人眼只有三种色觉感受器,我们看到的是 400 维空间在三维空间中的投影。想象一个三维物体对二维平面的投影,只看正投影的话,最简单的一个圆锥、一个圆柱和一个球的底面二维正投影都是一个圆,换句话说,就是降维投影必然会存在多对一映射,最终产生信息损失。
这种因为人眼色度采样特性而导致无法区分具体的颜色是由什么样的光产生的现象叫作同色异谱——是的,我们这一整节都在介绍这个概念,因为这个概念几乎是所有色彩理论和色彩问题的基础,了解这个概念之后,我们接下来就可以回答一些大家对于色彩还原、色彩管理的常见疑问了。
【显色性是怎么一回事】
接下来我们就尝试利用同色异谱这个概念以及一些其它的物理原理与逻辑来说明一些我们在摄影当中碰到的关于色彩的一些问题。
上来第一个问题我们先聊一些简单的,比如现在大家去买 LED 摄影灯甚至不摄影的普通灯都会看到商家在宣传一个概念叫显色性,那么这个东西究竟是怎么一回事呢?
从同色异谱这个角度出发就很容易了解到这么一件事——白色 LED 灯发出来的在我们眼里看来是白光,太阳发射的光在我们眼里看来也是白光,但这两种白光,可以完全不是同样的东西。
太阳光谱
某款 LED 灯的光谱
很显然这两种光源虽然看起来似乎都是白色,但完全是不同的东西。普通的物体在反射低能光子的时候又不会产生任何改变光子频率的效应(高能 X 射线或者γ射线的光子倒是会与物体的电子或者原子核发生碰撞散射而改变频率但是很显然这件事与我们今天讨论的可见波段无关),只能是有什么反射什么,缺失的颜色就显示不好或者干脆显示不出来。
而且不光是可能不同,接下来我们会发现 LED 的发色与太阳的光谱必然是不同的——太阳的光谱来自于外层大气(光球)被内部核聚变反应产生的能量加热到 5800K 之后产生的黑体辐射(没错,别看太阳那么亮它也是个黑体),等离子气体的黑体辐射来自于其中自由电子海里的电子碰撞减速时释放的动能转化成的光子,动能可以是连续的,光子的能量分布自然也是连续的(量子力学说的是光子本身的能量是分立的这两个事情不矛盾)。然后我们在地球上进化的人类把这种混合光谱叫作白光——实际上如果只看能量分布的话,它分布的峰值在绿色,我们的太阳是一颗绿色的恒星。
(所以这也是另一个有趣问题的答案:为什么天上的星星有红橙黄蓝白色的,就是没有绿色的?答案是绿色的星星在你眼里看来就是白色的)
中间这条黑色的曲线就是不同温度的黑体辐射混合谱在你眼里看起来的颜色
人类所制造的光源里靠高温物体的黑体辐射发光的基本上也只有白炽灯,所以你到现在都还可以看到很多对色彩要求极高的拍摄里依然在用钨丝灯之类的光源。LED、CCFL 之类的这些光源发射的光子都来自于荧光粉的原子内部电子的能级跃迁,而大家都知道核外电子能级是分立的,发射的光谱也只能是有限的几个频率。通过混合使用不同的荧光粉来补色可以提高光谱的丰富程度进而提高显色性,但终究达不到黑体辐射光源那样完美的连续谱——所以人们定义太阳光的显色性 Ra=100,人工 LED 的显色性都用太阳去标定,光谱越接近太阳光,则在这个光源照明之下所能呈现的色彩越丰富。
【为什么都用灰卡校正白平衡了,拍出来的颜色还是不一样】
一句话式的答案就是你校正的是白平衡,不是色平衡,只对白色校准,其它颜色的还原还是各不相同这种事情太正常了。
接下来还是详细的说一说这个事。实际上白平衡虽然保证不了色彩还原的绝对准确,但对于一个成像系统哪怕人眼来说也是极为必要的。人眼在漫长的进化过程当中学会了适应不同的光源,尽量保证在不同的光源下看到的白色是一致的,颜色都看不对怎么找食物吃啊您说是不是这个道理。
相机之类的模拟人眼感色原理的设备也是如此。不过跟我们介绍同色异谱原理时候面对的问题类似,如果是一个 400 维空间对 400 维空间的校正,希望输入是全 1 的时候输出也是全 1(白色),那么用一个简单的线性缩放就可以了。不仅如此在这个线性缩放之后不光白色是准确的,其它颜色也是准确的,不会存在诸如偏色之类的问题。
但是相机也是一个用三维色取样来试图还原理论上来说无穷多维度的所有色彩空间的设备,这个时候要通过缩放(白平衡调整)来实现白色的完美还原([R,G,B]·[α]=[R’,G’,B’])是没有问题的,对于白色乘以一个线性因子之后(灰色)的还原也是没有问题的。但是具体到其它复杂颜色上面依然无法保证色彩还原的一致性。
要保证色彩一致的话就需要做色平衡,也就是我们常说的校色——不仅让全 1 矩阵可以一一对应,其它的点也要尽量对应,然后在连续性假设下即使没测到的点也不会报道出现大偏差,就差不多 OK 了。校色的时候只测个黑白灰行不行?很显然不行,单纯的白平衡保证不了色平衡。
具体到相机和手机厂商这边由于各家的传感器滤色片感色特性不一样甚至还有上 RYYB 这种异型滤色片的,直出的色平衡都是厂商自己来做,最多给用户在机身里设置个色彩偏移选项。后期修图的时候也是,以 Adobe 系列软件为例,用户能自己去做色平衡的,其实也只有有限的几种颜色:
最终也只能实现有限的色平衡。
这一节我们就用摄影圈日常吵架经常会吵到的哪个问题来结尾:理论上来说后期是不是万能的,是不是我用索尼相机拍出来的照片,无论里面内容是什么都能调出同场景富士相机直出的那个颜色?
很显然这也是一个色平衡问题,所以答案就是:理论上来说可以,但是我们平时用的修图软件给提供的色平衡调整维度不够。即使真的有提供 400 维色彩调整的软件,你也未必有那个时间和心情去一张张修。
【可以做出完美还原人眼色彩特性的相机吗?】
还是开门见山讲答案吧:
如果采集设备的光谱敏感度函数是人眼色匹配函数的线性组合,则此时该设备可以完美、准确的还原人眼所能识别的所有颜色。这个就叫作卢瑟条件(Luther Condition)。
或者再简单点说就是感光材料&滤色片的“色域”可以识别到人眼所能感应的所有色彩,也就是相机感光覆盖的色域舌形图面积必须完美包含人眼的感色面积,并且中间不能有间断点。
但很遗憾的事情就是我们目前还没有找到跟人眼视锥细胞里那些感光色素的感色能力完全一致或者完美包含的滤色片材料——可能未来也不会有(有机色素的吸收有很多专属的特征,这里就不展开讲了)。所以可能我们人类永远无法制造出完美满足卢瑟条件的色彩采集设备(不仅仅指相机)。何况实际相机系统里不能说我用 0.0001 乘以个 1145140000 也可以表示 114514 这样就算可以线性表达了,还要考虑到信噪比的问题。
某款 CMOS 图像传感器的光谱响应特性——很显然人眼感红色色素能有响应的 450~480nm 波段在这个传感器的红色像素上几乎是 0 响应,而且覆盖面积远大于人眼的感应波段(可以感受红外线)
【所以为什么看到的和拍到的色彩总是不一样】
在讲解了一些基础概念,然后分析问题到这个阶段,我们终于可以正式回答这个问题了。
【同色异谱】看起来是同样颜色的物体或者光源,其实际光谱分布可以(而且几乎必然)完全不同。
【非理想采集设备】目前的设备,几乎不可能完全包含或者模拟人眼的全部色彩响应特性。
【非线性变换】线性变换只能保证白平衡,而对于色平衡,需要一对一的做非线性变换修正。
以上三个问题综合起来,就导致在图像传感器设备试图还原人眼所见色彩时会出现以下几种可能性:
1、某些人眼可以看出来的光谱差异,该设备看不出来
这种情况肯定是完全无解的,如果你不认同类似于 P 月亮这种贴图式 AI 技术应该被引入摄影成为标准流程的话。信息不能无中生有,除非引入外部信息。
2、某些人类看不出来的光谱差异,该设备可以看出来
但最后显示的图片都要映射回可见光波段,所以这种情况会产生伪彩色图片——实际上人们也在有选择性的利用伪彩色,比如那些天文上常见的红外波段、射电波段和 X 射线照片都是用人眼看不到但是该设备可以看到的频谱通过某种映射变成伪彩色图片产生的。但就具体的色彩还原这个问题来说,设备可以还原人眼看不到的色彩这必然也是会产生偏色的一个因素,所以现代数码相机在图像传感器前面都会加一个红外截止滤镜来防止红外线感光产生的伪彩色。
3、非线性变换产生的色彩空间扭曲
这个其实就是我们一般意义上来说的偏色,也是相机手机做色平衡色彩修正的时候要做的主要工作。
设有一种感光材料其光谱敏感度可以表示为矩阵 C,然后乘以一个修正方阵 T 之后得到一个矩阵方程:
由于不满足卢瑟条件不存在完备的线性相关性所以矩阵 T 并不存在解析解,但是我们可以求近似解比如最小二乘解。再去比较 C2deg 和 T·C 两个矩阵的均方根误差即可评估感应器的色偏程度。
但最终无论如何都得不到精确的矩阵 T,也就是说 RGB 到 XYZ 的映射是非线性扭曲的,一定程度上来说是对原始 RGB 数值搞适配人眼的强行上色。即使是真的去强制上色,也会因为没有无限高精度的 3DLut 从而无法实现真正的完美色彩还原。去求最小二乘解之类强行求解矩阵 T 的做法一般来说也不实用,很多时候还是采用类似显示器的拍色卡然后一对一做 lut 这种方式来进行非线性空间变换的办法。但这样的话,问题又回到一开始了——实验室的光源和实际使用的光源之间会有同色异谱,实验室色卡的材料反射特性和实拍物体的材料反射特性之间也会有同色异谱。很多新奇的传感器滤色片构型都是实验室里拍标板拍色卡好好的,一到各种复杂光源实拍场景就各种翻车,基本上就是这个原因。
【结论与碎碎念】
看起来这个问题到这里就应该结束了,如果人类找不到完美满足卢瑟条件的相机传感器材料和滤色片,那么就永远造不出色彩还原绝对准确的相机。但凡事都不是非黑即白的,物理学上的问题结束了,留下的永远都是一些思辨性的讨论:
·既然所有相机都无法准确的还原色彩,那么不如放弃色彩还原性去追求高感光性能,这种做法是正确的吗?
·在人眼作为绝对裁判不可动摇的这个大前提下,摄影讲究所谓的“真实”究竟有意义吗?
·如果一个相机直出色彩就不理想,那么通过简单的后期色平衡无法实现自己想要的色彩。这个前提下,购买相机的时候,直出色彩的优先级是否应该被提高呢?
·单一环境的拍摄无论如何合理安排都无法体现出一个影像系统在各种环境下的色彩性能,那么除了大批量的看样片(最好是每一张 RAW 样片都拿来自己修图,因为 Adobe 自己也会用一套映射)之外,是不是就没有别的办法了?
·在不会做任何输出打印甚至图都不想发的前提下,对显示器做严格的校色操作,究竟有必要吗?
欢迎大家在评论区留言,表达一下自己的看法。