提示:我没有自己使用过 Imatest(好贵),以下内容基于观看别人的分析结果后的主观和直觉。
Pipeline
sRGB -> XYZ -> CIELAB (Display) <-> CIELAB (Reference)
如上的测试是面向最终结果(输出的 JPG 图像)而非中间过程的,图像处理器里的流程会对色卡上的颜色产生不同的影响,也就是说,类似自动曝光(AE)也会影响结果。
从最终输出的 JPG 图像出发(假设它是 sRGB 空间),先将其转换到 XYZ 三刺激值(使用对应色彩空间的转换矩阵和电光传递函数),此时得到的 XYZ 三刺激值是显示器参考(Display Referred)且归一化的,即和完美色彩管理或标准显示器上测量的三刺激值除以亮度相同。
计算色差需要在均匀颜色空间内进行,将 XYZ 转换到 CIELAB 还需要一个参考白点($\text{XYZ}_{n}$),对于显示器参考的颜色来说,显示屏白点是一个常见的选择。
色卡上的 CIELAB 值,通常直接可以查到,或者色卡公开了其反射率,使用标准照明体(通常是 D65)的光谱功率分布和标准观察者的颜色匹配函数可以计算出其 XYZ,再以 D65 做参考白点就能计算出其 CIELAB 值。
然后在 CIELAB 上选一个色差公式计算色差,比如最常用的 DeltaE2000,当然也可以把 CIELAB 换成别的均匀颜色空间或者色貌模型来进行更多维度的对比。
结果和分析
简单的计算所有颜色的平均色差是不合理的,能得出的结论非常有限(除非你的目标只有颜色的完全再现)。
白平衡和色适应
如上计算出的色卡的 CIELAB 值中,灰阶的 Chroma 应该接近 0,而实际图像中的灰阶 Chroma 是否也是接近 0 则取决于拍摄光源和相机的白平衡处理。如果相机的白平衡完全矫正了光源(相当于完全适应到 D65),那么图像中色卡的灰阶部分也应该表现出中性色。
但白平衡算法不一定会将所有的拍摄环境都进行完全色适应,这也与我们的主观感觉不符,最典型的例子是白炽灯,这种昏黄的光源下不会表现出完全的颜色恒常性,此时比较理想的颜色再现是保留一部分“黄色”,即不完全适应,那么图像中色卡中的灰阶部分就不是中性色,而是具有一定的彩度。
在需要完全适应到 D65 的情况下(灰阶应该呈现出中性色),可以用灰阶区域的彩度偏差 $\Delta C$ 描述白平衡是否准确。
如果图像的白点不是 D65,白平衡的目标光源应该是这个白点,此时需要考虑 CIELAB 中错误的色适应变换是否会有影响(CIELAB 应该仅在 D65 下工作)。
风格化
因为测试图像已经进行了整个图像处理流程,自然也会包含一些风格化,比如记忆色增强或是一些比较复杂和强烈的处理。此时再评价颜色是否“准确”就显得有些不合理了,不过仍可以通过比较色卡的标准色和图像中色卡的颜色来观察典型颜色向哪一个方向移动和调整。
需要注意的是,这时候就不应再评价颜色是否“准确”,而且由于相机不符合所谓 Luther 条件,在将相机的 RGB 转换到 XYZ 的时候就已经存在不小的误差。用色卡自己训练,自己检验,在 RAW 转出来的 XYZ 上计算色差一般都不会小于 3,之后各种风格化、空间转换、色域和色调压缩只会引入更多的误差,因此,在判断是否准确、风格化倾向时,需要考量是由误差引起的,还是由风格化引入的。色差累积的过程也不是一直向一个方向的,有可能最终的色差反而会变得很小,甚至出现个别颜色的色差小于 1 的情况,也不能代表这个相机在其他情况下还原该颜色时是否还能这么准确。
分析风格化的时候,可以用图像的平均彩度与色卡的平均彩度之比来观察图像整体的彩度是否增大了,以及观察每一个典型颜色的偏移,或转换到 CIELCh 和别的空间进行更深入的分析。
自动曝光和亮度
相机的自动曝光策略也会影响色差,而且最终图像变换回的 XYZ 是 Display Referred 的,相对色卡上的反射率,原始场景的亮度不一定线性,在这个显示器参考的 XYZ 上乘系数假装增益不能代表拍摄时候的曝光控制,更像是在调节显示器的背光亮度(但不同步调整计算 CIELAB 时选用的参考白点),这是一个很奇怪的操作,但可以有效的降低因为曝光错误导致的色差异常,下面这个实例中,通过在 XYZ 上乘一个 0.76 的系数,能降低三个色差单位(可能只在计算上有意义)。
因此,Imatest 中也提供了不含亮度的彩度差,只计算彩度上的差距,不考虑明度的影响,这似乎更加奇怪(因为改变背光亮度或曝光控制这样的操作也会影响彩度)。
不均匀的光照和同色异谱
拍摄色卡时,能够有一个均匀的光照是再好不过,但使用灯箱的时候,不可避免的会出现上面更靠近光源而更亮的情况。使用上面提到的模拟亮度调整后,可以观察明度差别,如果发现前几排都为正值,底下几排都是负值,就需要考虑是否是由于不均匀的光照导致的。
RAW 上的修正方法是用一个均匀的表面(灰卡或是哑光相纸)来矫正,但现在图像已经是走完整个 ISP,得到的线性光是显示器参考的,不能够代表场景参考那边的线性光。
关于同色异谱问题:色卡提供的 CIELAB 是由反射率和 D65 标准照明体计算出来的,但是实际上并不存在一个光源的光谱功率分布和标准照明体相同,相机的光谱敏感函数经由颜色矩阵校正后和标准观察者的颜色匹配函数也有差异,因此同色异谱是不可避免的,这也会导致色差的错误增加,因为色卡不仅评价了相机的颜色还原,一定程度上也评价了光源的显色指数和相机的同色异谱现象。
色卡和颜色分析
色卡在图像处理和评价中到底起到了什么样的作用,那些各种空间里的数字又有什么含义。
对我来说,色卡最大的价值在于提供了 30 个很典型的反射率样本,包括了记忆色,饱和色和中性色,标准照明体、标准观察者的光谱数据都可以很方便的获得,从而进行很灵活的三刺激值计算,这远比一个只能在 D65 下使用的 CIELAB 更有意义。
这也是为什么更推荐使用 PMCC,因为其反射率是公布和发表的,理论上你甚至可以不拥有实际的色卡,只当作 30 个反射率样本来用就可以。
另外,我觉得直接对色卡图片进行主观的颜色评价是很不合适的,脱离了实体,记忆色的效果应该微乎其微,观察一个蓝色的色块真的能够联想到蓝天,并进行记忆色增强吗?对于观察者来说,通过看三十个颜色方块,就评价颜色是否自然,甚至评价颜色是否准确是很不合理的。
另外,用各种颜色空间和色貌模型进行分析的时候,应该注意专业术语的用词,而不是随意的使用“饱和”,“鲜艳”。既然用了色貌模型,就应该使用准确的颜色属性来描述。
色卡的有关数据和文章可以在这里找到:
M. R. Luo, “The new preferred memory color ( PMC ) chart,” Color Research & Application, p. col.22940, May 2024, doi: 10.1002/col.22940.
简单实践
这是一张由相机自动白平衡、自动测光拍摄的色卡,照明条件是普通的白光 LED,不是标准照明体模拟器或全光谱 LED。
直接按照上述方法计算色差,得到的平均 $\Delta E_{2000}$ 色差是 6.5,几乎所有的明度都偏高,也就是按照使用屏幕白点做参考白,图像偏亮,在 XYZ 上乘以 0.76 后,得到的色差最小,为 3.8,这个操作是在不改变屏幕亮度的情况下调暗图像,等效于降低背光亮度但不调整计算 CIELAB 时的屏幕白点。
意思是降低屏幕亮度观察上面那个图,和不降低屏幕亮度看这个图是一模一样的,但算出来的色差会不一样。
对灰阶和明度的分析
具体到每一个颜色的色差,原图中的白色块色差只有 0.83,而降低亮度后则有 6.01。灰阶上,第二和倒数第二色块与参考间的明度差几乎为 0,白色和黑色的明度低于参考,中间两个色块的明度则高于参考,意味着 ISP 中可能包含了一个增加对比的形如 Sigmoid 的色调曲线。