编辑
2023-04-07
计算机图形学
00

目录

《Fundamentals of Computer Graphics》5th(计算机图形学基础/虎书),中文翻译。

第 18 章 Color 颜色

光子是光学信息的载体。它们通过介质传播,具有与波相关的属性。在表面边界处,它们与物质相互作用,更像粒子。它们也可以被视网膜吸收,其中它们携带的信息被转换成电信号,随后由大脑处理。只有在那里才会产生颜色的感觉。

因此,对颜色以其各种形式的研究涉及到几个不同的领域:物理学研究光在空间中的传播、化学研究光与物质的相互作用、以及神经科学和心理学研究与颜色感知和认知相关的方面(Reinhard 等人,2008)。

在计算机图形学中,我们传统上采取了一种简化的观点来描述光如何在空间中传播。光子沿着直线路径传播,直到它们撞击到表面边界,然后根据某种反射函数进行反射。单个光子将携带一定量的能量,其波长表示。因此,一个光子只有一个波长。其波长λ与其携带的能量ΔE 之间的关系由以下公式给出:

λΔE=1239.9λ ΔE=1239.9,

其中 ΔEΔE 以电子伏特 (eV)(eV) 为单位进行测量。

在计算机图形学中,模拟单个光子效率不高;而是同时模拟大量的光子。如果我们采用非常大量的光子,每个光子携带可能不同数量的能量,则它们共同代表一个光谱。可以将光谱视为一张图,其中光子数量以波长为基准绘制。由于两个波长相同的光子携带的能量是单个该波长的光子的两倍,因此该图也可以看作是能量与波长的图。图 18.1 显示了一个光谱的示例。人类敏感的波长范围大约在 380 到 800 纳米 (nm) 之间。

fig11_1.jpg

图 18.1。光谱描述了在每个波长λ处可用的能量量,这里以相对辐射功率测量。此特定光谱代表平均日光。

因此,在模拟光时,可以跟踪每个携带光谱的光线。完成这一点的渲染器通常称为光谱渲染器。从前面的章节中,应该清楚,我们通常不会花费大量成本来构建光谱渲染器。相反,我们将光谱替换为通常使用红色、绿色和蓝色组件的表示。这是可能的原因与人类视觉有关,并将在第 18.1 节中讨论。

通过跟踪光线模拟光处理光学问题,尽管应该注意到,在这种方式下,包括偏振、衍射和干涉在内的几个光的属性都没有被建模。

在表面边界上,我们通常通过反射函数来模拟光线的行为。通过 gonioreflectometers 可以直接测量这些函数,导致产生大量的表格数据,可以由各种不同的函数更紧凑地表示。尽管如此,这些反射函数本质上是经验性的,即它们摘掉了一个光子被电子吸收和再发射时所发生的化学反应。因此,反射函数对于计算机图形学建模非常有用,但不能解释为什么某些波长的光被吸收而其他波长的光被反射。因此,我们不能使用反射函数来解释为什么反射出香蕉的光具有出现为黄色的光谱组成。为此,我们需要研究分子轨道理论,这是本书范围之外的话题。

最后,当光到达视网膜时,它被转换为电信号,并传播到大脑。大脑的很大一部分致力于处理视觉信号,其中一部分会产生颜色感觉。因此,即使我们知道反射出香蕉的光的光谱,我们还不知道为什么人类将“黄色”这个术语与其相关联。而且,正如我们在本章的剩余部分中发现的那样,我们对颜色的感知比起乍一看要复杂得多。它随着照明的改变而改变,在观察者之间变化,在观察者内部随时间变化。

换句话说,从香蕉上反射出来的光谱是在一个环境的背景下被感知的。要预测观察者如何感知“香蕉光谱”,需要了解包含香蕉的环境以及观察者的环境。在许多情况下,这两个环境是相同的。但是,当我们在显示器上显示香蕉的照片时,这两个环境将不同。由于人类视觉感知取决于观察者所处的环境,因此它可能会将照片中的香蕉与直接观察香蕉的观察者感知方式不同。这对处理颜色有重大影响,并展示了涉及颜色的复杂性。

强调了人类视觉发挥的关键作用,我们只需要看一下颜色的定义:“颜色是视觉感知方面,观察者可以区分大小形状相同的两个无结构视野之间差异的方面,可能由于观测中相关辐射能量的光谱成分不同而引起”(Wyszecki&Stiles,2000)。实质上,没有人类观察者就没有颜色。

幸运的是,我们所知道的很多关于颜色的东西都可以量化,以便进行计算,以纠正人类视觉的特异性,并显示出设计这些图像的人所期望的观察者看到的图像。本章包含了所需的理论和数学。

18.1 色度测量学

色度测量学是关于颜色测量和描述的科学。由于颜色最终是人类反应,因此颜色测量应该始于人类观察。人体视网膜中的光电检测器包括杆状细胞和锥状细胞。杆状细胞非常敏感,在低光条件下发挥作用。在正常照明条件下,锥形细胞是有效的,调节人类视觉。有三种不同类型的锥体,它们共同负责颜色视觉。

虽然可能直接记录在呈现某些视觉刺激时,锥体的电输出,但这种程序将是侵入性的,同时忽略了观察者之间的差异。此外,颜色测量的大部分已经发展好几年了,而在这段时间内,并没有直接记录技术可用。

替代方法是通过测量人对颜色块的响应方式来测量颜色。这导致了颜色匹配实验,稍后将在本节中描述。执行这些实验导致了几个标准化观察者,可以将其视为实际人类观察者的统计近似值。然而,首先,我们需要描述一些支持颜色匹配可能性的假设,这些假设由 Grassmann 定律总结。

18.1.1 Grassmann 定律

鉴于人类有三种不同类型的锥体,颜色匹配的实验规律可以概括为三色法的普适性(Wyszecki&Stiles,2000),它指出任何颜色刺激都可以通过三个适当调制的颜色光源的加性混合来完全匹配。这种颜色的特征在实践中经常被使用,例如电视和显示器通过对每个像素添加红色、绿色和蓝色光的混合来再现许多不同的颜色。这也是仅使用三个值来描述每种颜色构建渲染器的原因。

三色法的普适性允许我们在任何给定刺激和三种其他颜色刺激的加性混合之间进行颜色匹配。赫尔曼·格拉斯曼首次描述了颜色匹配依从的代数规则。它们称为格拉斯曼的加性颜色匹配定律(Grassmann,1853),并具有以下特点:

  • 对称律 如果颜色刺激 AA 与颜色刺激 BB 匹配,则 BBAA 匹配。
  • 传递律 如果 AABB 匹配,BBCC 匹配,则 AACC 匹配。
  • 比例律 如果 AABB 匹配,则 αAαAαBαB 匹配,其中 αα 为正比例因子。
  • 加性律 如果 AABB 匹配,CCDD 匹配,并且 A+CA + CB+DB + D 匹配,则可得出 A+DA + DB+CB + C 匹配。

加性律构成了颜色匹配和整个色度测量学的基础。

18.1.2 锥反应

每种锥体类型对一定波长范围内的波长具有敏感性,涵盖了大部分全可见光谱范围。然而,对于波长的敏感性并不均匀分布,而是包含一个灵敏度最大的峰值波长。该峰值波长的位置对于每种锥体类型都不同。三种锥体类型被分类为 SSMMLL 锥体,其中字母代表短、中、长,表示灵敏度峰值位于可见光谱的哪个区域。

然后,给定锥体上发生的波长光谱的函数,该锥体的响应是它输出的电信号大小。每种锥体类型作为波长λ的函数的锥响应函数为 L(λ)L(λ)M(λ)M(λ)S(λ)S(λ)。它们绘制在图 18.2 中。

fig11_1.jpg

图 18.2 LLMMSS 锥的锥响应函数。

然后,对于具有给定光谱组成、Phi (λ) 的刺激,每种锥体类型的实际响应如下所示:

L=λΦ(λ)L(λ)dλ,M=λΦ⁢ (λ)M(λ)  dλ,S=λ  Φ(λ)  S(λ)  dλL=∫λ \Phi (λ) L(λ) dλ,M=∫λ \Phi ⁢ (λ) M(λ)  dλ,S=∫λ  \Phi (λ)  S(λ)  dλ,

这三个集成响应称为三基色值。

18.1.3 颜色匹配实验

鉴于三基色值是通过在可见范围内积分两个函数的乘积来创建的,因此很明显人类视觉系统不是简单的波长探测器。相反,我们的光感受器作为大致线性积分器发挥作用。因此,可以找到两种不同的光谱组成,例如 Φ1(λ)\Phi 1(λ)Φ2(λ)\Phi 2(λ),在积分后产生相同的响应 (L,M,S)(L,M,S)。这种现象被称为元色异色现象,其中一个例子如图 18.3 所示。

fig11_1.jpg

图 18.3 两个刺激 Φ1(λ)\Phi 1(λ)Φ2(λ)\Phi 2(λ),在积分后导致相同的三基色值。

元色异色现象是人类视觉的关键特征,它使得构建颜色重现设备成为可能,包括本书中的彩色图像以及打印机、电视和显示器上再现的任何内容。

颜色匹配实验也依赖于元色异色原理。假设我们有三种不同颜色的光源,每个光源都有一个调节强度的旋钮。我们称这三个光源为原色。我们现在应该能够调整每种光源的强度方式,以便在加性混合时,产生的光谱集成到三基色值与感知的第四个未知光源的颜色匹配。当我们进行这样的实验时,我们基本上是将我们的原色与未知颜色匹配。然后,我们三个旋钮的位置是第四个光源的颜色表示。

在这样的实验中,我们使用格拉斯曼定律将我们的三个原色的三个光谱相加。我们还使用了元色异色现象,因为我们三个原色的组合光谱几乎肯定不同于第四个光源的光谱。但是,从这两个光谱计算出的三基色值将是相同的,并产生颜色匹配。

请注意,我们实际上不必知道锥体响应函数才能进行这样的实验。只要我们在相同条件下使用相同的观察者,就能够匹配颜色并记录每种颜色的旋钮位置。但是,每次我们想要测量颜色时都要进行这样的实验非常不方便。因此,我们确实需要知道光谱锥响应函数,并对一组不同观察者的平均值进行平均,以消除观察者之间的差异。

18.1.4 标准观察者

如果我们对一大范围的颜色进行颜色匹配实验,并由一组不同的观察者进行实验,那么可以生成平均颜色匹配数据集。如果我们专门使用单色光源来匹配我们的原色,那么我们可以重复这个实验,适用于所有可见波长。然后得到的三基色值称为光谱三基色值,并可以绘制在波长 λλ 上,如图 18.4 所示。

fig11_1.jpg

图 18.4 平均许多观察者的光谱三基色值。原色为单色光源,波长分别为 435.8、546.1 和 700 nm。

通过使用一组定义良好的原色光源,可以得到三个颜色匹配函数的光谱三基色值。国际照明委员会(CIE)已经定义了这样三个原色,分别是波长为 435.8、546.1 和 700 nm 的单色光源。使用这三种单色光源,所有其他可见波长都可以通过添加不同数量的每种颜色来匹配。匹配给定波长λ所需的每种颜色的数量编码在颜色匹配函数中,由 rˉ(λ)\bar{r}(\lambda)gˉ(λ)\bar{g}(\lambda)bˉ(λ)\bar{b}(\lambda) 给出,并在图 18.4 中绘制。与这些颜色匹配函数相关联的三基色值称为 R、G 和 B。

考虑到我们正在添加光,并且光不能为负,您可能已经注意到图 18.4 中存在一个异常:为了创建某些波长的匹配,需要减去光。尽管不存在负光,但我们可以再次使用格拉斯曼定律,而不是从原色混合物中减去光线,而是将相同数量的光线添加到正在匹配的颜色中。

CIE rˉ(λ)\bar{r}(\lambda)gˉ(λ)\bar{g}(\lambda)bˉ(λ)\bar{b}(\lambda) 颜色匹配函数允许我们通过比较使用这些颜色匹配函数积分获得的结果三基色值,确定光谱分布、Phi 1 是否与第二个光谱分布、Phi 2 匹配:

λΦ1(λ)rˉ(λ)=λΦ2(λ)rˉ(λ)λΦ1(λ)gˉ(λ)=λΦ2(λ)gˉ(λ)λΦ1(λ)bˉ(λ)=λΦ2(λ)bˉ(λ)\begin{aligned} \int_{\lambda} \Phi_{1}(\lambda) \bar{r}(\lambda) & =\int_{\lambda} \Phi_{2}(\lambda) \bar{r}(\lambda) \\ \int_{\lambda} \Phi_{1}(\lambda) \bar{g}(\lambda) & =\int_{\lambda} \Phi_{2}(\lambda) \bar{g}(\lambda) \\ \int_{\lambda} \Phi_{1}(\lambda) \bar{b}(\lambda) & =\int_{\lambda} \Phi_{2}(\lambda) \bar{b}(\lambda) \end{aligned}

当然,只有当三个三基色值全部匹配时才能保证颜色匹配。

这些颜色匹配函数的重要性在于我们现在能够通过三基色值简洁地传达和描述颜色。对于给定的光谱函数,CIE 颜色匹配函数提供了一种精确计算三基色值的方法。只要每个人都使用相同的颜色匹配函数,应该始终可以生成匹配。

如果没有相同的颜色匹配函数,则可能将一组三基色值转换为适用于相应原色集的不同三基色值集。CIE 已经为两个特定原因定义了这样一个变换。首先,在 20 世纪 30 年代,数值积分很难进行,尤其是对于既可以是正数又可以是负数的函数更是如此。其次,CIE 已经开发出光度响应函数 CIE V(λ)V(\lambda)。希望具有三个积分函数,其中 V(λ)V(\lambda) 是其中之一,并且所有三个在可见范围内都是正的。

为了创建一组正的颜色匹配函数,需要定义虚构的原色。换句话说,要再现可见光谱中的任何颜色,我们需要不能在物理上实现的光源。 CIE 确定的颜色匹配函数称为 xˉ(λ)\bar{x}(\lambda)yˉ(λ)\bar{y}(\lambda)zˉ(λ)\bar{z}(\lambda),并在图 18.5 中显示。请注意,yˉ(λ)\bar{y}(\lambda) 等于光度响应函数 V(λ)V(\lambda),每个函数确实都是正的。它们被称为 CIE 1931 标准观察者。

fig11_1.jpg

图 18.5 CIE xˉ(λ)\bar{x}(\lambda)yˉ(λ)\bar{y}(\lambda)zˉ(λ)\bar{z}(\lambda) 颜色匹配函数。

相应的三基色值被称为 XXYYZZ,以避免与通常与可实现原色相关联的 RRGGBB 三基色值混淆。从 (R,G,B)(R,G,B) 三基色值转换为 (X,Y,Z)(X,Y,Z) 三基色值的转换由简单的 3×33×3 变换定义:

[XYZ]=10.17697[0.49000.31000.20000.176970.812400.010630.00000.01000.9900][RGB]\left[\begin{array}{l} X \\ Y \\ Z \end{array}\right]=\frac{1}{0.17697}\left[\begin{array}{ccc} 0.4900 & 0.3100 & 0.2000 \\ 0.17697 & 0.81240 & 0.01063 \\ 0.0000 & 0.0100 & 0.9900 \end{array}\right] \cdot\left[\begin{array}{l} R \\ G \\ B \end{array}\right]

要计算三基色值,我们通常直接使用感光度标准观察者颜色匹配函数与所需光谱、Phi (λ) 进行积分,而不是首先使用 CIE rˉ(λ)\bar{r}(\lambda)gˉ(λ)\bar{g}(\lambda)bˉ(λ)\bar{b}(\lambda) 颜色匹配函数,然后进行上述变换。它使我们能够计算一致的颜色测量结果,并确定两种颜色何时相互匹配。

18.1.5 色度坐标

每种颜色都可以用一组三基色值 (X,Y,Z)(X,Y,Z) 表示。我们可以用 XXYYZZ 轴定义一个正交坐标系,并在生成的 3D 空间中绘制每种颜色。这被称为色彩空间。颜色所在的体积的空间范围称为色域。

在 3D 颜色空间中可视化颜色相当困难。此外,任何颜色的 YY 值都对应于其亮度,因为 yˉ(λ)\bar{y}(\lambda) 等于 V(λ)V(\lambda)。因此,我们可以将三基色值投影到近似色度信息的 2D 空间中,即与亮度无关的信息。这种投影称为色度图,并通过归一化同时删除亮度信息来获得:

x=XX+Y+Zy=YX+Y+Zz=ZX+Y+Z\begin{array}{l} x=\frac{X}{X+Y+Z} \\ y=\frac{Y}{X+Y+Z} \\ z=\frac{Z}{X+Y+Z} \end{array}

考虑到 x+y+zx+y+z 等于 1,zz 值是多余的,使我们可以在色度图中将 xxyy 色度坐标相互绘制。尽管仅使用 xxyy 不能完全描述一种颜色,但我们可以使用这两个色度坐标和三基色值中的一个(传统为 YY)来恢复另外两个三基色值:

X=xyY,Z=1xyyY.\begin{aligned} X & =\frac{x}{y} Y, \\ Z & =\frac{1-x-y}{y} Y . \end{aligned}

通过在色度图中绘制所有单色(光谱)颜色,我们得到一个马蹄形曲线。这条曲线上的点称为光谱位置。所有其他颜色产生的点都位于此曲线内部。图 18.6 显示了 1931 年标准观察者的光谱位置。紫色线段不代表单色光,而是短波长和长波长刺激的组合。

fig11_1.jpg

图 18.6 CIE 1931 标准观察者的光谱位置。

(非单色光)原色可以在所有可见波长上进行积分,导致 (X,Y,Z)(X,Y,Z) 三基色值,随后是 (x,y)(x,y) 色度坐标,即色度图上的一个点。对两个或更多原色重复此过程会产生一组在色度图上的点,可以用直线连接。以这种方式跨越的体积表示可以通过这些原色的加性混合重现的颜色范围。三原色系统的示例显示在图 18.7 中。

fig11_1.jpg

图 18.7 CIE RGBRGB 原色在 435.8、546.1 和 700 nm 处的色度边界(实线)以及典型 HDTV(虚线)。

色度图提供了对加性颜色混合的洞察。但是,应谨慎使用它们。首先,马蹄形的内部不应该着色,因为任何颜色再现系统都有自己的原色,并且只能再现色度图的某些部分。其次,由于 CIE 颜色匹配函数并不代表人类锥细胞敏感性,色度图上任意两点之间的距离并不是指示这些颜色将被感知不同程度的好指标。

为了至少在一定程度上解决这些问题中的第二个问题,开发了更均匀的色度图。 CIE uvu'v'色度图提供了更具感知均匀间隔的计算方法,因此通常优选于 (x,y)(x,y) 色度图。通过应用不同的归一化可以从 (X,Y,Z)(X,Y,Z) 三基色值计算出 uvu'v'

u=4XX+15Y+3Zv=9YX+15Y+3Z\begin{array}{l} u^{\prime}=\frac{4 X}{X+15 Y+3 Z} \\ v^{\prime}=\frac{9 Y}{X+15 Y+3 Z} \end{array}

也可以直接从 (x,y)(x,y) 色度坐标中计算出:

u=4x2x+12y+3,v=9y2x+12y+3.\begin{array}{l} u^{\prime}=\frac{4 x}{-2 x+12 y+3}, \\ v^{\prime}=\frac{9 y}{-2 x+12 y+3} . \end{array}
fig11_1.jpg

图 18.8 显示了 CIE uvu'v'色度图。

18.2 色彩空间

如上所述,每种颜色可以由三个数字表示,例如由 (X,Y,Z)(X,Y,Z) 三基色值定义。然而,其原色是想象的,这意味着不可能构造具有三个光源(全部为正数)的设备,以再现可见光谱中的所有颜色。

出于同样的原因,图像编码和图像计算可能并不实用。例如,有大量可能的 XYZXYZ 值不对应于任何物理颜色。这将导致存储可用位的低效利用,并且在图像处理后保持视觉完整性需要更高的位深度。尽管可能可以构建一个具有接近 CIE XYZXYZ 颜色匹配函数的原色的捕获设备,但硬件成本和图像处理成本使其成为一种不受欢迎的选项。无法构建与 CIE XYZXYZ 相对应的显示器。因此,需要设计其他色彩空间:物理可实现性、有效编码、感知均匀性和直观的颜色规范。

CIE XYZXYZ 色彩空间仍然广泛使用,主要用于其他色彩空间之间的转换。它可以看作是一个独立于设备的色彩空间。其他色彩空间可以根据它们与 CIE XYZXYZ 的关系来定义,通常由特定的变换来指定。例如,线性和加性三基色显示设备可以通过简单的 3×33×3 矩阵与 CIE XYZXYZ 之间进行转换。还可以指定一些非线性附加变换,例如在数据以有限位深度存储时最小化感知误差,或使其能够直接在具有输入信号和发出光量之间非线性关系的设备上显示。

18.2.1 构建矩阵变换

对于具有三个原色(例如红、绿、蓝)的显示设备,我们可以通过发送颜色向量 (1,0,0)(1,0,0)(0,1,0)(0,1,0)(0,0,1)(0,0,1) 来测量发出光的光谱组成。这些向量分别代表其中一个原色全开,其他两个关闭的情况。从测量得到的光谱输出中,我们可以计算相应的色度坐标 (xRyR)(x_R,y_R)(xGyG)(x_G,y_G)(xByB)(x_B,y_B)

显示器的白点定义为当将颜色向量 (1,1,1)(1,1,1) 发送到显示器时发出的光谱。它对应的色度坐标是 (xWyW)(x_W,y_W) 。三个原色和白点共同描述了显示器,并且需要每个元素来构造显示器的颜色空间与 CIE XYZXYZ 之间的转换矩阵。

这四个色度坐标可以扩展为色度三元组,从 z=1xyz = 1-x-y 重构 zz 坐标,导致三元组 (xRyRzR)(x_R,y_R,z_R) (xGyGzG)(x_G,y_G,z_G)(xByBzB)(x_B,y_B,z_B)(xWyWzW)(x_W,y_W,z_W) 。如果我们知道白点的最大亮度,我们可以计算其相应的三基色值 (XWYWZW)(XW,YW,ZW) ,然后求解以下一组方程以获得亮度比例标量 SRS_RSGS_GSBS_B

XW=xRSR+xGSG+xBSBYW=yRSR+yGSG+yBSBZW=zRSR+zGSG+zBSB\begin{aligned} X_{W} & =x_{R} S_{R}+x_{G} S_{G}+x_{B} S_{B} \\ Y_{W} & =y_{R} S_{R}+y_{G} S_{G}+y_{B} S_{B} \\ Z_{W} & =z_{R} S_{R}+z_{G} S_{G}+z_{B} S_{B} \end{aligned}

然后,RGBRGBXYZXYZ 之间的转换由以下公式给出:

[XYZ]=[xRSRxGSGxBSByRSRyGSGyBSBzRSRzGSGzBSB][RGB]\left[\begin{array}{c} X \\ Y \\ Z \end{array}\right]=\left[\begin{array}{ccc} x_{R} S_{R} & x_{G} S_{G} & x_{B} S_{B} \\ y_{R} S_{R} & y_{G} S_{G} & y_{B} S_{B} \\ z_{R} S_{R} & z_{G} S_{G} & z_{B} S_{B} \end{array}\right]\left[\begin{array}{c} R \\ G \\ B \end{array}\right]

任何给定颜色的亮度都可以通过计算以这种方式构建的矩阵的中间行来计算:

Y=yRSRR+yGSGG+yBSBBY=y_{R} S_{R} R+y_{G} S_{G} G+y_{B} S_{B} B

要将给定设备的 XYZXYZRGBRGB 之间进行转换,只需简单地反转上述矩阵即可。

如果用未知原色和白点的 RGB 颜色空间表示图像,则下一个最好的选择是假设该图像是在标准 RGB 颜色空间中进行编码的。一个合理的选择是假设图像按照 ITU-R BT.709 进行指定,这是用于 HDTV 编码和广播的规范。其原色和白点在表 18.1 中指定。请注意,相同的原色和白点用于定义众所周知的 sRGB 颜色空间。此 RGB 颜色空间与 CIE XYZXYZ 之间的转换及其逆变换由以下公式给出:

[XYZ]=[0.41240.35760.18050.21260.71520.07220.01930.11920.9505][RGB]; [RGB]=[3.24051.53710.49850.96931.87060.04160.05560.20401.0572][XYZ].\begin{array}{l} {\left[\begin{array}{l} X \\ Y \\ Z \end{array}\right]=\left[\begin{array}{rrr} 0.4124 & 0.3576 & 0.1805 \\ 0.2126 & 0.7152 & 0.0722 \\ 0.0193 & 0.1192 & 0.9505 \end{array}\right]\left[\begin{array}{l} R \\ G \\ B \end{array}\right] ;} \\ \space \\ {\left[\begin{array}{l} R \\ G \\ B \end{array}\right]=\left[\begin{array}{rrr} 3.2405 & -1.5371 & -0.4985 \\ -0.9693 & 1.8706 & 0.0416 \\ 0.0556 & -0.2040 & 1.0572 \end{array}\right]\left[\begin{array}{l} X \\ Y \\ Z \end{array}\right] .} \end{array}

通过替换设备的最大 RGBRGB 值,我们可以计算出白点。对于 ITU-R BT.709,最大值为 (RWGWBW)(R_W,G_W,B_W) = (100100100)(100,100,100) ,导致白点为 (XWYWZW)(X_W,Y_W,Z_W) = (95.05100.00108.90)(95.05,100.00,108.90)

fig11_1.jpg

表 18.1 ITU-R BT.709 指定的原色和白点的 (x,y)(x,y) 色度坐标。sRGB 标准也使用这些原色和白点。

除了线性变换外,sRGB 颜色空间还具有后续的非线性变换。非线性编码由以下公式给出:

RsRGB={1.055R1/2.40.055R>0.0031308,12.92RR0.0031308;GsRGB={1.055G1/2.40.055G>0.0031308,12.92GG0.0031308;BsRGB={1.055B1/2.40.055B>0.0031308,12.92BB0.0031308.\begin{aligned} R_{\mathrm{sRGB}} & =\left\{\begin{array}{ll} 1.055 R^{1 / 2.4}-0.055 & R>0.0031308, \\ 12.92 R & R \leq 0.0031308 ; \end{array}\right. \\ G_{\mathrm{sRGB}} & =\left\{\begin{array}{ll} 1.055 G^{1 / 2.4}-0.055 & G>0.0031308, \\ 12.92 G & G \leq 0.0031308 ; \end{array}\right. \\ B_{\mathrm{sRGB}} & =\left\{\begin{array}{ll} 1.055 B^{1 / 2.4}-0.055 & B>0.0031308, \\ 12.92 B & B \leq 0.0031308 . \end{array}\right. \end{aligned}

这种非线性编码有助于最小化数字应用中量化误差引起的感知误差。

18.2.2 设备相关的 RGB 空间

由于每个设备通常都有其自己的原色和白点,因此称相关的 RGB 颜色空间为设备相关的。应该注意的是,即使所有这些设备都在 RGB 空间中运行,它们的原色和白点也可能非常不同。因此,如果我们有一个在某个 RGB 空间中指定的图像,则根据我们显示它的设备而言,它可能看起来非常不同。

这显然是一种不可取的情况,由于缺乏颜色管理而产生。但是,如果图像在已知的 RGB 颜色空间中指定,则可以首先将其转换为 XYZXYZ,后者是独立于设备的,然后随后可以将其转换为将要显示它的设备的 RGB 空间。

还有其他几个已定义的 RGB 颜色空间。它们每个都由线性矩阵变换和类似于上述 sRGB 颜色空间的非线性变换组成。非线性变换可以参数化如下:

Rnonlinear ={(1+f)Rγft<R1,sR0RtGnonlinear ={(1+f)Gγft<G1,sG0GtBnonlinear ={(1+f)Bγft<B1,sB0Bt.\begin{array}{l} R_{\text {nonlinear }}=\left\{\begin{array}{ll} (1+f) R^{\gamma}-f & t<R \leq 1, \\ s R & 0 \leq R \leq t \end{array}\right. \\ G_{\text {nonlinear }}=\left\{\begin{array}{ll} (1+f) G^{\gamma}-f & t<G \leq 1, \\ s G & 0 \leq G \leq t \end{array}\right. \\ B_{\text {nonlinear }}=\left\{\begin{array}{ll} (1+f) B^{\gamma}-f & t<B \leq 1, \\ s B & 0 \leq B \leq t . \end{array}\right. \end{array}

参数 ssffttγγ 以及原色和白点共同指定了一类用于各个行业的 RGB 颜色空间。表 18.2 列出了几个常见的变换。

fig11_1.jpg

表 18.2 标准 RGB 颜色空间的转换(参考文献 (Pascale, 2003))。

18.2.3 LMS 圆锥空间

前面提到的圆锥信号可以用 CIE XYZXYZ 颜色空间表示。从 XYZXYZ 计算 LMS 信号以及反过来的矩阵变换如下所示:

[LMS]=[0.389710.688980.078680.229811.183400.046410.000000.000001.00000][XYZ]; [XYZ]=[1.910191.112140.201950.370950.629050.000000.000000.000001.00000][LMS].\begin{array}{l} {\left[\begin{array}{c} L \\ M \\ S \end{array}\right]=\left[\begin{array}{rrr} 0.38971 & 0.68898 & -0.07868 \\ -0.22981 & 1.18340 & 0.04641 \\ 0.00000 & 0.00000 & 1.00000 \end{array}\right]\left[\begin{array}{c} X \\ Y \\ Z \end{array}\right] ;} \\ \space \\ {\left[\begin{array}{c} X \\ Y \\ Z \end{array}\right]=\left[\begin{array}{rrr} 1.91019 & -1.11214 & 0.20195 \\ 0.37095 & 0.62905 & 0.00000 \\ 0.00000 & 0.00000 & 1.00000 \end{array}\right]\left[\begin{array}{c} L \\ M \\ S \end{array}\right] .} \end{array}

这个变换被称为 Hunt-Pointer-Estevez 变换(Hunt, 2004),在色适应变换和颜色外观建模中使用。

18.2.4 CIE 1976 LabL^* a^* b^*

色对空间的特征是具有代表无色通道(亮度)的通道,以及编码颜色对立关系的两个通道。这些通常是红绿和黄蓝通道。因此,这些颜色对手通道沿着一个轴编码两个色度,可以具有正值和负值。例如,红绿通道对于正值编码红色,对于负值编码绿色。值零编码了一种特殊情况:中性,既不是红色也不是绿色。黄蓝通道的工作方式基本相同。

由于至少对每个色度轴编码了两种颜色,因此不可能编码红色和绿色的混合。同时也不可能同时编码黄色和蓝色。虽然这可能看起来是一个缺点,但已知人类视觉系统早期计算类似属性。因此,人们无法感知同时为红和绿,或者黄和蓝的颜色。我们不会看到任何像红绿色或黄蓝色的颜色。但是,我们能够感知颜色混合物,例如黄红色(橙色)或绿蓝色,因为它们跨越色度通道编码。

对于计算机图形学而言,最相关的颜色对手系统是 CIE 1976 LabL^* a^* b^* 颜色模型。它是一种感知上大致均匀的颜色空间,用于计算颜色差异等方面非常有用。它也被称为 CIELAB。

CIELAB 的输入是刺激 (X,Y,Z)(X,Y,Z) 三基色值以及由已知光源照亮的漫反射白色反射表面的三基色值 (XnYnZn)(X_n,Y_n,Z_n)。因此,CIELAB 超出了普通的颜色空间,因为它考虑了一个已知照明下的颜色补丁。因此,它可以被视为一个基本的颜色外观空间。

在 CIELAB 中定义的三个通道是 LL^*aa^*bb^*LL^* 通道编码颜色的亮度,即具有三基色值 (X,Y,Z)(X,Y,Z) 的补丁的感知反射率。aa^*bb^* 是色度对手通道。XYZXYZ 和 CIELAB 之间的变换由以下公式给出:

[Lab]=[01160165005000002002000][f(X/Xn)f(Y/Yn)f(Z/Zn)1]\left[\begin{array}{c} L^{*} \\ a^{*} \\ b^{*} \end{array}\right]=\left[\begin{array}{rrrr} 0 & 116 & 0 & -16 \\ 500 & -500 & 0 & 0 \\ 0 & 200 & -200 & 0 \end{array}\right]\left[\begin{array}{c} f\left(X / X_{n}\right) \\ f\left(Y / Y_{n}\right) \\ f\left(Z / Z_{n}\right) \\ 1 \end{array}\right]

函数 ff 定义为:

f(r)={r3 for r>0.0088567.787r+16116 for r0.008856f(r)=\left\{\begin{array}{ll} \sqrt[3]{r} & \text { for } r>0.008856 \\ 7.787 r+\frac{16}{116} & \text { for } r \leq 0.008856 \end{array}\right.

从这个公式可以看出,色度通道确实取决于亮度 YY。虽然这在感知上是准确的,但这意味着我们无法在色度图中绘制 aa^*bb^* 的值。亮度 LL^* 在黑白之间归一化为 0 到 100。虽然 aa^*bb^* 通道没有明确的限制,但它们通常在范围内 [128,128][-128,128]

由于 CIELAB 大致是感知线性的,因此可以将两种颜色转换为 CIELAB,然后通过计算它们之间的欧几里得距离来估计感知颜色差异。这导致以下颜色差异公式:

ΔEab=[(ΔL)2+(Δa)2+(Δb)2]1/2\Delta E_{\mathrm{ab}}^{*}=\left[\left(\Delta L^{*}\right)^{2}+\left(\Delta a^{*}\right)^{2}+\left(\Delta b^{*}\right)^{2}\right]^{1 / 2}

字母 E 代表感觉上的差异(德语中为 Empfindung)(Judd,1932)。

最后,CIELAB 和 XYZXYZ 之间的逆变换由以下公式给出:

X=Xn{(L116+a500+16116)3 if L>7.9996,17.787(L116+a500) if L7.9996, Y=Yn{(L116+16116)3 if L>7.9996,17.787L116 if L7.9996, Z=Zn{(L116b200+16116)3 if L>7.9996,17.787(L116b200) if L7.9996.\begin{array}{l} X=X_{n}\left\{\begin{array}{ll} \left(\frac{L^{*}}{116}+\frac{a^{*}}{500}+\frac{16}{116}\right)^{3} & \text { if } L^{*}>7.9996, \\ \frac{1}{7.787}\left(\frac{L^{*}}{116}+\frac{a^{*}}{500}\right) & \text { if } L^{*} \leq 7.9996, \end{array}\right. \\ \space \\ Y=Y_{n}\left\{\begin{array}{ll} \left(\frac{L^{*}}{116}+\frac{16}{116}\right)^{3} & \text { if } L^{*}>7.9996, \\ \frac{1}{7.787} \frac{L^{*}}{116} & \text { if } L^{*} \leq 7.9996, \end{array}\right. \\ \space \\ Z=Z_{n}\left\{\begin{array}{ll} \left(\frac{L^{*}}{116}-\frac{b^{*}}{200}+\frac{16}{116}\right)^{3} & \text { if } L^{*}>7.9996, \\ \frac{1}{7.787}\left(\frac{L^{*}}{116}-\frac{b^{*}}{200}\right) & \text { if } L^{*} \leq 7.9996 . \end{array}\right. \\ \end{array}

18.3 色彩适应

刚刚描述的 CIELAB 颜色空间采用了刺激的三基色值和漫反射白色补丁的三基色值作为输入。因此,它构成了一个考虑观察环境的系统。

我们观察对象和图像的环境对我们感知这些对象的方式有很大影响。我们在日常生活中遇到的观测环境范围非常大,从阳光到星光,从烛光到荧光灯光。光照条件不仅在存在的光量上形成非常大的范围,而且在发出的光的颜色方面也差异很大。

人类视觉系统通过一种称为适应的过程来适应环境中的变化。可以区分三种不同类型的适应,即光适应、暗适应和色适应。光适应是指当我们从非常暗的环境移动到非常明亮的环境时发生的变化。当这种情况发生时,我们会被光线照射而感到目眩,但很快我们就能适应新的环境并开始分辨周围的物体。暗适应则相反——当我们从明亮的环境转移到黑暗的环境时。一开始,我们看到的很少,但经过一定时间后,细节会开始显现。适应到黑暗需要的时间通常比光适应时间长得多。

色适应是指我们适应和大部分忽略光照颜色变化的能力。本质上,色适应是现代大多数相机可用的白平衡操作的生物学等效物。人类视觉系统有效地将观察条件标准化,呈现出相对一致的视觉体验。因此,我们表现出一定程度的颜色恒常性:尽管照明有所变化,物体的反射率似乎相对不变。

虽然我们能够在很大程度上忽略视觉环境的变化,但并非完全如此。例如,在晴朗的日子里,颜色看起来比阴天更丰富多彩。尽管外观发生了变化,但我们不认为物体本身的反射率实际上已经改变了其物理属性。因此,我们理解照明条件影响了整体颜色外观。

尽管如此,颜色恒常性确实适用于色度内容。色适应使白色物体在大量照明条件下呈现为白色,如图 18.9 所示。

fig11_1.jpg

图 18.9。一系列光源在 CIE uvu'v' 色度图中绘制。被任何这些光源照射的白色纸张仍然呈现为白色外观。

色适应的计算模型通常侧重于锥体中的增益控制机制。最简单的模型之一假设每个锥体独立地适应其吸收的能量。这意味着不同类型的锥体根据所吸收的光谱而适应得不同。这样的适应可以建模为对锥体信号的自适应和独立缩放:

La=αLMa=βMSa=γS\begin{aligned} L_{a} & =\alpha L \\ M_{a} & =\beta M \\ S_{a} & =\gamma S \end{aligned}

其中 (La,Ma,Sa)(L_a,M_a,S_a) 是色度适应的锥体信号,ααββγγ 是由观察环境确定的独立增益控制。这种独立适应也称为冯·克里斯适应。如图 18.10 所示的例子。

fig11_1.jpg

图 18.10。冯·克里斯风格独立光感受器增益控制的示例。显示了相对锥体响应(实线)和对 CIE A 型光源的相对适应锥体响应(虚线)。颜色的单独块表示将 CIE A 型光源渲染到 sRGB 颜色空间中。

可以从场景中的白色表面上测量适应照明。在理想情况下,这将是一个 Lambertian 表面。在数字图像中,可以将适应照明近似为场景的最大三刺激值。以这种方式测量或计算的光是适应白色,由 (LwMwSw)(L_w,M_w,S_w) 给出。然后,von Kries 适应仅是在锥体响应空间中通过适应白色的倒数进行缩放:

[LaMaSa]=[1Lw0001Mw0001Sw][LMS].\left[\begin{array}{c} L_{a} \\ M_{a} \\ S_{a} \end{array}\right]=\left[\begin{array}{ccc} \frac{1}{L_{w}} & 0 & 0 \\ 0 & \frac{1}{M_{w}} & 0 \\ 0 & 0 & \frac{1}{S_{w}} \end{array}\right]\left[\begin{array}{c} L \\ M \\ S \end{array}\right] .

在许多情况下,我们有兴趣计算对应颜色,这可以通过级联两个色适应计算来实现。在本质上,前面提到的 von Kries 变换除去了适应照明——即我们的例子中的日光照明。如果随后乘入白炽灯照明,我们就计算出了相应的颜色。如果两个照明由 (Lw,1,Mw,1,Sw,1)(L_w,1,M_w,1,S_w,1)(Lw,2,Mw,2,Sw,2)(L_w,2,M_w,2,S_w,2) 给出,则相应颜色 (Lc,Mc,Sc)(L_c,M_c,S_c) 由以下公式给出:

[LcMcSc]=[Lw,2000Mw,2000Sw,2][1Lw,10001Mw,10001Sw,1][LMS].\left[\begin{array}{c} L_{c} \\ M_{c} \\ S_{c} \end{array}\right]=\left[\begin{array}{ccc} L_{w, 2} & 0 & 0 \\ 0 & M_{w, 2} & 0 \\ 0 & 0 & S_{w, 2} \end{array}\right]\left[\begin{array}{ccc} \frac{1}{L_{w, 1}} & 0 & 0 \\ 0 & \frac{1}{M_{w, 1}} & 0 \\ 0 & 0 & \frac{1}{S_{w, 1}} \end{array}\right]\left[\begin{array}{c} L \\ M \\ S \end{array}\right] .

存在数种更复杂因此更准确的色适应变换(Reinhard et al.,2008)。但是,简单的 von Kries 模型在建模色适应方面仍然非常有效,因此可以用于数字图像中的白平衡。

在渲染背景下,色适应的重要性在于我们离考虑观察者的视觉环境更近了一步,而不必通过调整场景并重新渲染我们的图像来进行校正。相反,我们可以对场景进行建模和渲染,然后作为图像后处理,纠正观察环境的照明。但是,为了确保白平衡不会引入伪影,重要的是要确保将图像呈现为浮点格式。如果呈现为传统的 8 位图像格式,则色适应变换可能会放大量化误差。

18.4 色貌

尽管色度学使我们能够以与设备无关的方式准确地指定和传达颜色,而色适应使我们能够预测在照明变化中的颜色匹配,但这些工具仍不足以描述颜色的实际外观。

要预测对象的实际感知,我们需要更多有关环境的信息并将其考虑在内。人类视觉系统不断适应其环境,这意味着对颜色的感知将受到这些变化的强烈影响。色貌模型考虑到了刺激本身以及观察环境的测量数据。这意味着所得到的颜色描述与观察条件无关。

色貌建模的重要性可以从以下示例中看出。考虑在液晶显示屏上显示的一张图像。在打印相同的图像并在不同的环境中查看时,往往会发现图像看起来明显不同。色貌模型可用于预测生成精确的跨媒体颜色再现所需进行的更改(Fairchild,2005)。

尽管色貌建模为颜色再现提供了重要工具,但在实际使用中,实际实现往往比较复杂和繁琐。预计这种情况随着时间的推移可能会发生改变。但是,直到那时,我们将把它们的描述留给更专业的教科书(Fairchild,2005)。

注释

关于色彩理论的所有书籍中,Reinhard 等人的工作(Reinhard et al.,2008)最直接面向工程学科,包括计算机图形学、计算机视觉和图像处理。Berns(Berns,2000)和 Stone(Stone,2003)提供了其他关于色彩理论的一般介绍。Wyszecki 和 Stiles 编写了一本详尽的数据和公式手册,是不可或缺的参考资料(Wyszecki&Stiles,2000)。对于色彩再现,我们推荐 Hunt 的书(Hunt,2004)。Fairchild 的书全面描述了色貌模型(Fairchild,2005)。与视频和高清晰度电视相关的色彩问题,Poynton 的书是必不可少的(Poynton,2003)。

本文作者:青波

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!