目标 🚩
图像处理的目标之一是颜色再现(Colour Reproduction),当置身于实际场景中,接收到的光可能来自不同物体的反射、透射、散射及它们的混合,或者直接来自光源。它们的光谱千变万化,亮度也可能跨越很大范围。显示器则不同,它只能提供有限的亮度范围,光谱上仅能提供三种基色的混合。
幸运的是,同色异谱和视觉对颜色感知的复杂性使得颜色再现成为可能,经过色彩科学的研究和发展,我们追求的已经不仅是亮度或色坐标的再现,而是颜色外貌(Colour Appearance)的再现,这需要色貌模型(Colour Appearance Model)的参与。
色貌模型可以用来预测特定观察条件下,一个三刺激值的颜色外貌(明度、彩度等)。对于图像和颜色再现来说,需要考虑实际场景和显示器上截然不同的观察条件,传统的电影院能提供的亮度不过 48 nits,却能够再现出栩栩如生的各种场景,这部分是因为电影院提供了一个几乎无光的昏暗观察条件。
通过正向色貌模型,从三刺激值计算出每一个像素的色貌,并根据显示器的观察条件应用逆向的色貌模型,预测显示器需要产生一个怎样的三刺激值来获得这样的色貌。这便是一个比较完整的利用色貌模型进行颜色再现的图像处理过程。
iCAM06 是 Jiangtao Kuang 等人提出的一种用于渲染 HDR 图像的色貌模型,其中用到了很多色貌模型的理论和算法,实现了比较科学的从大亮度范围的场景到显示器的图像处理。
起点:输入
一个典型的色貌模型接受三刺激值和观察条件作为输入。
三刺激值区别于更常见的 RGB 空间,是一种设备无关的空间,它独立于设备,观察条件一样的情况下,只要两个颜色的三刺激值相等,他们就能实现匹配(看起来一样)。而 RGB 是一个设备相关的空间,比如两个不同的显示器都显示一个纯红色,RGB 相等但颜色很可能不同,因为不同的显示器有不同的红色光基元。
在传统的图像处理流程中,从 raw 图像出发,经过白平衡和色彩校正矩阵(Colour Correction Matrix),可以将颜色空间转换到 XYZ 三刺激值。一个常见的实现是在 raw 图像处理库 rawpy 中,使用 output_color = rawpy.ColorSpace(5)
指定输出色空间。
需要注意的是,这样获得的 XYZ 并非实际场景中的三刺激值,而是已经经过白平衡(色适应)后的三刺激值。而我们需要的是能代表实际场景的颜色,因此,需要一个稍作修改的初始 ISP。
从更底层的角度看,raw 图像是如何从光谱产生的?
$$ R=\int P(\lambda)\,\bar{r}(\lambda)\,\mathrm{d}\lambda $$上式中是一个理想图像传感器的表达式,$P$ 表示光谱功率,$\bar{r}$ 表示传感器的光谱敏感度,由光电二极管的光谱特性、滤色片的透过率等共同决定,$R$ 是输出的像素值,可以从 raw 文件中读取。
而三刺激值的表达式可以写作:
$$ X=\int P(\lambda)\,\bar{x}(\lambda)\, \mathrm{d}\lambda $$其中,$\bar{x}$ 表示人眼的光谱敏感度。因此,如果可以从 $\bar{r}(\lambda),\bar{g}(\lambda),\bar{b}(\lambda)$ 线性组合出 $\bar{x}(\lambda)$ 等,我们就可以用相机的 raw 像素值估计三刺激值。这个线性组合的过程可以用一个 3x3 的矩阵表示。
上图是一个利用线性组合从相机的光谱敏感函数预测三刺激值的示意图,经过线性组合的相机光谱敏感函数具有与三刺激值的光谱敏感函数相近的形状。
另外,还需要一个系数进行缩放,转化为能代表绝对亮度的三刺激值,这个系数可以通过相机的光圈、快门速度、感光度计算得到,这些用于控制进光量的参数不会影响光的线性程度和相对关系。
图像分解
按照视觉对颜色和细节的感知不同,将图像分解为基础层(Base-layer)和细节层(Details-layer)。对颜色的操作,比如色适应和色调压缩都只对基础层生效,细节层则经过增强或调整后合并到调整过的基础层上。
基础层通过使用一种保边的双边滤波器获得,该方法由 Durand 和 Dorsey 先前提出。双边滤波是一种非线性滤波器,其中每个像素的权重由空间域中的高斯滤波和强度域中的另一高斯滤波共同决定,后者会降低与中心像素强度差异较大像素的权重。
因此,双边滤波能在有效平滑图像的同时保持锐利边缘不受影响,从而避免了局部色调映射算子常见的"光晕"伪影现象。其中强度域是在对数空间计算的,对数空间中的强度更能代表感知对比度和对整幅图像更均匀的处理。
细节层由原本的图像减去基础层获得,两层图像都需要转换回线性空间。
iCAM06 中使用的双边滤波通过分段线性近似和最近相邻降采样加速。
色适应
一个物体在不同的光照条件和观察环境下,其颜色会发生变化,但是人类视觉系统可以在一定程度上保持对物体颜色的稳定感知。这种现象被称为颜色恒常性(Colour Constancy)。这种保持相对稳定的过程称为色适应(Chromatic Adaptation)。
色适应变换(Chromatic Adaptation Transform,CAT)是用于预测对应色的模型。输入为两个观察条件(通常用场景白点的三刺激值表示)和一个观察条件下的颜色,预测在另一个观察条件下能够与之组成对应色的颜色。
根据 von Kries 的假设,色适应在视觉器官的层面是独立的。色适应变换的基本结构为:
-
将输入的 XYZ 转换到某个代表视觉器官的空间(锥体响应)。
-
在这个空间内对每个量进行独立的处理(比如乘各自的增益系数)
-
转回到 XYZ 空间,得到另一个观察条件下的颜色三刺激值。
按照这个结构设计的色适应变换有很多,其中 CAT02 和 CAT16 是 CIE 先后推荐的两个色适应变换模型。在第二步中有一个适应度 D,代表了色适应的程度,iCAM06 中,把这个适应度乘以了一个 0.3 的系数,相当于降低了适应程度,更接近场景中的颜色而非适应后的对应色,来增加图像的颜色饱和度。
这是非常奇怪的做法,我更倾向于是代码错误导致不乘这个系数会出现数值错误。因为原始代码中色适应一步用到的两个锥体响应,一个是归一化的,一个是绝对值。
iCAM06 中,这一步色适应的目标适应场是 D65,因为之后的几个均匀颜色空间都是设计在 D65 白点的,而适应场的白点选用的是基础层的高斯模糊,这有一点类似于灰度世界的假设。
$$ \begin{align*} D &= 0.3 F \left[ 1 - \left( \frac{1}{3.6} \right) e^{-\frac{(L_A - 42)}{92}} \right] \\ R_c &= \left[ \left( R_{D65} \frac{D}{R_W} \right) + (1-D) \right] R \end{align*} $$原文式中适应度 D 的计算里,$e$ 上的指数中 42 的正负号是错的。
色调压缩
人眼感知亮度并不是线性的,而是高度非线性。按照这个非线性的特性进行色调压缩,可以在有限的亮度范围内再现出更大亮度范围的颜色外貌。
这个非线性关系也是由视觉实验得到的,iCAM06 使用的是 CIECAM02 中的后适应部分,形如一个 Sigmoid 函数。使用时,从三刺激值转换到另一个代表视觉细胞的空间,再应用被称作“后适应”的响应曲线。在 iCAM06 中,还加入了暗视觉下杆状细胞的响应,叠加在锥体细胞的响应上,来预测暗视觉-混合视觉区间的亮度,杆细胞的响应非常小。
锥细胞的后适应非线性关系如下:
$$ R'_a = \frac{400 (F_L R' / Y_W)^p}{27.13 + (F_L R' / Y_W)^p} + 0.1 $$这一步中用到的参考白 $Y_{W}$ 也是基础层的高斯模糊,但模糊程度比色适应时的更小。
这一步完成了亮度的压缩,原本很大的亮度范围,经过这样的 Sigmoid 函数之后,范围是 0.1 到 400,实际上很少有超过 200 的情况出现。在这一步之前,都是和场景光保持线性,这一步之后则是和显示光保持线性,因此,这一步也可以理解成是一种光光传递函数(OOTF)。
合并图像与输出
完成色适应和色调压缩之后,基础层已经是一个可以在屏幕上相对正常显示的图像,可以把细节层增强后合并回去。
此时得到的图像仍然是在线性的 XYZ 三刺激值空间中,将 XYZ 转换到可以用于显示的 RGB 空间分为两步:
- 转换到线性 RGB 空间
- 应用传递函数编码
对于最常见的 sRGB 空间来说,第一步用到的矩阵可以很方便的在网上找到,第二步则是一个 gamma 校正,系数为显示器 gamma 的倒数,通常取 0.45-0.5 之间。
附加操作:IPT 空间
将一个高动态范围,高亮度的原始图像压缩到低亮度的显示器上,有时候其颜色会变得不那么鲜艳,明暗之间的对比也需要增强。
iCAM06 的解决方法是转换到一个均匀颜色空间中做增强,选用的是 IPT 空间,I 代表明度,P 和 T 是两个颜色方向,分别代表红-绿和黄-蓝。
增强对比的方法是在明度上应用一个 1.0-1.5 之间的 gamma 指数,取值由观看环境决定。其原理是根据观看环境的相对亮度,感知对比度会发生变化,电影院这样的昏暗环境需要更高的对比度,因此通常采用一个较高的系统 gamma 指数。潜在的问题在于以往的系统 gamma 是施加在线性光的,而不是明度这样非线性的尺度。
增强彩度的方法是对两个颜色方向拉伸,拉伸的程度与亮度有关,这依据了 Hunt 效应:亮度的增加会导致感知视彩度的增加。
$$ P = P \cdot \left[ (F_L + 1)^{0.2} \left( \frac{1.29C^2 - 0.27C + 0.42}{C^2 - 0.31C + 0.42} \right) \right] $$结果与分析
该算法解决了两个问题:
- 如何在显示器上再现真实世界的场景。
- 如何在传统的低动态范围显示器上再现高动态范围图像。
与计算机视觉不同,色彩科学更关注人类视觉感知,旨在从视觉角度处理图像。iCAM06 通过色彩适应、色调压缩和均匀色彩空间等方法,为从高动态范围到低动态范围的图像处理提供了一个可解释的解决方案。
然而,iCAM06 也存在一些不足:
- 色彩适应算法存在问题,校正后的效果不理想,可能是由于色彩适应模型的局限性和灰度世界假设的影响。
- 用于色调压缩的 Sigmoid 函数过度降低了图像对比度,无法平衡低动态范围和高动态范围输入的效果。
- 边缘保持变换和细节增强可能会引入伪影和过度锐化。
- 在均匀色彩空间中进行处理缺乏可靠的理论基础,特别是对明度应用伽马指数的做法。
总体而言,iCAM06 利用色彩科学的研究成果,提出了一种有效的高动态范围图像处理方法,是将色彩科学融入图像处理的成功探索。
References
[1] M. D. Fairchild and G. M. Johnson, “Meet iCAM: A next-generation color appearance model,” Proc. 10th Color Imaging Conf., vol. 10, no. 1, pp. 33–38, Jan. 2002.
[2] J. Kuang, G. M. Johnson, and M. D. Fairchild, “iCAM06: A refined image appearance model for HDR image rendering,” J. Visual Communication and Image Representation, vol. 18, no. 5, pp. 406–414, Oct. 2007.
[3] F. Durand and J. Dorsey, “Fast bilateral filtering for the display of high-dynamic-range images,” in Proc. 29th Annual Conf. Computer Graphics and Interactive Techniques (SIGGRAPH), San Antonio, TX, USA, Jul. 2002, pp. 257–266.
[4] P. Hung and R. S. Berns, “Determination of constant hue loci for a CRT gamut and their predictions using color appearance spaces,” Color Research & Application, vol. 20, no. 5, pp. 285–295, Oct. 1995.
[5] M. R. Luo and C. Li, “CIECAM02 and its recent developments,” in Advanced Color Image Processing and Analysis, C. Fernandez-Maloigne, Ed., New York, NY, USA: Springer, 2013, pp. 19–58.
[6] M. D. Fairchild, “A revision of CIECAM97s for practical applications,” Color Research & Application, vol. 26, no. 6, pp. 418–427, 2001.