颜色的研究涉及多个领域:光在空间中传播的物理,光与物质相互作用的化学,色彩感知的神经科学与心理学。图形学中,一般用遵从几何光学的能量波包——光子——来描述光在空间中的传播。光子的波长和能量之间满足如下关系:
λΔE=1239.9 nm⋅eV
模拟单个光子的效率极低,因此图形学中通常同时模拟大量光子,并用光谱(spectrum)——能量或光子数与波长之间的关系——来描述。人眼能感知到的光波长大致在 380 nm 到 800 nm 之间。带光谱的射线追踪渲染器称为谱渲染器(spectral renderer)。但一般不会直接构造谱渲染器,而是用红绿蓝分量表示来代替光谱。
物体表面上光的行为通常用一个反射函数来模拟。反射函数是电子吸收光子并重新发射这一过程中所发生的化学的抽象,对于计算机图形学建模是有用的,但它没有对物理过程的解释性。光到达视网膜后会转化为电信号,进而传给大脑。颜色感知比表面上看起来复杂得多,它与光照、观测者有关,甚至会随着时间而变。除了反射光谱之外,颜色感知还与所处环境有关。颜色是视觉感知的一个方面,观察者可以通过颜色来区分两个相同形状大小的无结构视场之间的差异,比如,可能根据辐射能谱的差异来区分。
色度学(Colorimetry)
色度学是颜色测量与描述的科学。人类视网膜上感光细胞分为视杆细胞(rods)和视锥细胞(cones)。视杆细胞高度灵敏,在弱光条件下发挥作用。正常光照下,视锥细胞调节人类视觉。三种类型的视锥细胞一起决定了色觉。
直接记录视锥细胞的输出电信号具有侵入性,而且忽略了观测者之间有时存在的本质性差异。另一种方法是测量受试者对色块的响应,这导致了颜色匹配实验(color matching experiments),进行这种实验需要有一些标准化观测者,他们是实际人群的统计近似。
格拉斯曼定律(Grassmann’s Laws)
颜色匹配的实验定律可以总结为三原色通则(trichromatic generalization),即三个适当调制的颜色源的加法混合可以完全匹配上任何颜色刺激。Hermann Grassmann 最早描述了颜色匹配的代数法则,该法则被称为格拉斯曼加色匹配定律(Grassmann’s laws of additive color matching),用符号 ∼ 表示匹配,那么格拉斯曼定律可以总结为:
- 对称律(Symmetry law),A∼B⇒B∼A;
- 传递律(Transitive law),A∼B、B∼C⇒A∼C;
- 正比律(Proportionality law),A∼B⇒αA∼αB,其中 α>0;
- 加法律(Additivity law),A∼B、C∼D⇒A+C∼B+D。
加法律构成了颜色匹配、甚至整个色度学的基础。更严格地,上述匹配应该理解为光谱匹配,对称律、传递律,再结合显然成立的自反律可知,上述匹配 ∼ 是一种等价关系,颜色就是其等价类。而正比律和加法律则说明,颜色可根据代表元定义出数乘和加法:
αA=αAA+B=A+B
其中,A 是光谱 A 所对应的等价类,即颜色。
视锥细胞响应(Cone Responses)
每种视锥细胞都只对某一波长范围灵敏,根据响应主峰的位置可以将视锥细胞分为三类:S(short)、M(medium)、L(long)。视锥细胞的响应可以表示为输出电信号与输入波长之间的关系,三种视锥细胞响应函数(cone response function)分别记为:L(λ)、M(λ)、S(λ)。对颜色刺激 Φ(λ) 的真实响应为:
LMS=∫λΦ(λ)L(λ)dλ=∫λΦ(λ)M(λ)dλ=∫λΦ(λ)S(λ)dλ
L、M、S 称为视锥细胞响应的三刺激值(tristimulus values)。容易知道,类似 L、M、S 这种线性积分形式的颜色表示,向量 (L,M,S) 的数乘和加法自动保持了颜色的数乘(正比律)和加法(加法律)。

颜色匹配实验
根据三刺激值可知,人眼的视觉系统并不是一个波长探测器,而是一个线性积分器。这导致了同色异谱(metamerism)现象:输入光谱 Φ1(λ)、Φ2(λ) 不同,但色觉响应 (L,M,S) 相同。同色异谱是人眼视觉的关键特征,它让颜色复现成为可能,它也是颜色匹配实验的基础。

假定选择三个不同的颜色作为原色(primary)。通过调节它们的强度,使得加法混合(格拉斯曼定律)后的三刺激值和第四种颜色相同(同色异谱),此时称为颜色匹配(color match),而混合系数可作为第四种颜色的表示。
标准观测者(Standard Observers)
为了更加方便地进行颜色匹配,需要知道视锥细胞响应谱,并对不同的观测者平均以消除偏差。国际照明委员会(Commission Internationale de l´Eclairage,简称 CIE)规定波长 435.8 nm、546.1 nm、700 nm 的单色光为三原色。对可见光波段进行颜色匹配,并对观测者平均,可以得到波长为 λ 的单色光在三原色下的表示,即颜色匹配函数(color matching function)rˉ(λ)、gˉ(λ)、bˉ(λ)。任意光谱 Φ(λ) 的三刺激值分别为:
RGB=∫λΦ(λ)rˉ(λ)dλ=∫λΦ(λ)gˉ(λ)dλ=∫λΦ(λ)bˉ(λ)dλ
颜色匹配函数也可以看作是单色光的三刺激值。根据格拉斯曼定律容易知道:
Φ(λ)=∫λ′Φ(λ′)δλ′(λ)dλ′∼∫λ′Φ(λ′)[rˉ(λ′)δλR(λ)+gˉ(λ′)δλG(λ)+bˉ(λ′)δλB(λ)]dλ′=RδλR(λ)+GδλG(λ)+BδλB(λ)
这里采用了形式 δλ′(λ)≡δ(λ−λ′) 表示狄拉克函数。
即,按 R、G、B 对三原色混合后的光与光谱 Φ(λ) 匹配,这说明若三刺激值 R、G、B 相同,则颜色一定匹配。计算三原色混合后光谱的 L、M、S 值:
⎣⎡LMS⎦⎤=∫λdλ(RδλR(λ)+GδλG(λ)+BδλB(λ))⎣⎡L(λ)M(λ)S(λ)⎦⎤=⎣⎡L(λR)M(λR)S(λR)L(λG)M(λG)S(λG)L(λB)M(λB)S(λB)⎦⎤⎣⎡RGB⎦⎤
可以知道,任意光谱的 L、M、S 与 R、G、B 之间由矩阵变换联系起来,这说明互相匹配的颜色的 R、G、B 值相同。因此,R、G、B 构成了颜色的一种表示,可以直接通过这一表示来比较颜色。
负值表示为待匹配颜色加上一个等值的颜色。

由于
- 20 世纪 30 年代数值积分难以进行,尤其对有正有负的函数;
- CIE 已经发展了视锥细胞光亮度响应函数(photopic luminance response function)V(λ);
因此,CIE 给了一组正的颜色匹配函数 xˉ(λ)、yˉ(λ)、zˉ(λ),称为 CIE 1931 标准观测者,其中 yˉ(λ)=V(λ)。相应的三刺激值记为 X、Y、Z,它和 R、G、B 之间满足如下变换:
⎣⎡XYZ⎦⎤=0.176971⎣⎡0.49000.176970.00000.31000.812400.01000.20000.010630.9900⎦⎤⎣⎡RGB⎦⎤

为了保证颜色匹配函数全为正,必须允许虚原色(imaginary primaries),即物理上无法实现的颜色,而是直接用相应的颜色匹配函数来表示。
实际上,类似的任意线性积分形式的颜色表示,和 R、G、B 之间都可以由一个矩阵变换联系起来,由于颜色匹配函数就是单色光的三刺激值,因此这个矩阵变换也是颜色匹配函数之间的变换。
色坐标(Chromaticity Coordinates)
以三刺激值 X、Y、Z 为轴构成的、用于表示颜色的三维空间称为色空间(color space)。真实颜色所占据的区域称为色域(color gamut)。由于 yˉ(λ) 是光亮度响应函数,因此 Y 就是颜色的亮度(luminance)。这使得三刺激值可以投影到二维空间,近似表示与亮度无关的色度信息(chromatic information)。这一投影称为色度图(chromaticity diagram),可以通过归一化并移除亮度信息来得到:
xyz=X+Y+ZX=X+Y+ZY=X+Y+ZZ
通常省略 z 值,以 x、y 坐标画出色度。使用这两个色度坐标和一个三刺激值,通常是 Y,可以找到另外两个三刺激值:
XZ=yxY=y1−x−yY
单色光在色度图上形成的曲线称为光谱轨迹(spectrum loci)。将光谱 Φ1、Φ2 按 k1、k2 比例系数混合起来得到光谱 Φ3=k1Φ1+k2Φ2,容易计算它的色坐标一定在 Φ1、Φ2 的连线上:
[x3y3]=k1T1+k2T21(k1[X1Y1]+k2[X2Y2])=k1T1+k2T21(k1T1[x1y1]+k2T2[x2y2])
其中,Ti=Xi+Yi+Zi。由此可知,一组光源的色坐标凸包就是这组光源能够表示的所有色度。由于任何光谱都可以分解为单色光的叠加,因此,其它所有光谱都会落在光谱轨迹凸包内。

上图中紫色的线是短波和长波的混合,而非单色光。找出所有原色光在色度图上的坐标,这些色坐标的凸包就是这组原色光通过加法混合所能够表示出的颜色范围。

虽然色度图可以很好地洞察加色混合,但仍有两个问题:
- 任何颜色复现系统都有自己的原色,而且只能复现色度图中的一部分;
- 由于 CIE 颜色匹配函数并不等同于人眼的视锥细胞响应,因此色度图中两点间距不能很好地衡量颜色感知上的差别;
更常用的是 CIE u′v′ 色度图,它在视觉上更加均匀,可以从 X、Y、Z 中计算出来:
u′v′=X+15Y+3Z4X=X+15Y+3Z9Y
也可以由色坐标 (x,y) 计算:
u′v′=−2x+12y+34x=−2x+12y+39y

色空间
由于 (X,Y,Z) 对应的是虚原色,而且 XYZ 空间中大量的点都没有物理上的真实颜色与之对应,这使得存储效率很低,因而需要更高的位深(bit-depth)来保证图像在视觉上完整性。虽然有可能制造一个接近于 CIE XYZ 颜色匹配函数的设备,但是硬件和图像处理方面所需付出的代价使这种做法没有吸引力。出于这些原因,有必要设计其它的物理可实现(physical realizability)、编码高效(efficient encoding)、感知均匀(perceptual uniformity)、颜色描述直观(intuitive color specification)的色空间。
CIE XYZ 色空间常用于其他色空间之间的转换,它可以看作是设备无关的色空间(device-independent color space)。线性可加三色显示器(linear and additive trichromatic display devices)可以从 CIE XYZ 经一个 3×3 矩阵变换而来。非线性变换有时也需要,比如,当数据用有限位深存储时,最小化感知误差(perceptual errors),或是直接展示在非线性设备上——输入信号与输出光信号之间存在非线性关系。
构造矩阵变换
对于那些基于红、绿、蓝三原色的显示设备,通过测量输入颜色向量为 (1,0,0)、(0,1,0)、(0,0,1) 时所发出的光谱,可以计算出相应的色坐标 (xR,yR)、(xG,yG)、(xB,yB)。颜色向量为 (1,1,1) 时设备输出的光谱称为白点(white point),相应的色坐标为 (xW,yW)。三原色和白点刻画了整个显示设备,并且决定了显示器色空间和 CIE XYZ 之间的变换矩阵。
如果知道了白点最大亮度,可以计算相应的三刺激值 (XW,YW,ZW),并通过求解下面的线性方程组得到亮度比 SR、SG、SB:
XWYWZW=xRSR+xGSG+xBSB=yRSR+yGSG+yBSB=zRSR+zGSG+zBSB
进而得到 X、Y、Z 与设备 R、G、B 之间的变换:
⎣⎡XYZ⎦⎤=⎣⎡xRSRyRSRzRSRxGSGyGSGzGSGxBSByBSBzBSB⎦⎤⎣⎡RGB⎦⎤
如果未指定设备 RGB 色空间,则一般默认采用标准 RGB 色空间,用于 HDTV 编码和广播的 ITU-R BT.709 标准是一个合理的选择。

这个 RGB 色空间与 CIE XYZ 之间的变换如下:
⎣⎡XYZ⎦⎤⎣⎡RGB⎦⎤=⎣⎡0.41240.21260.01930.35760.71520.11920.18050.07220.9505⎦⎤⎣⎡RGB⎦⎤=⎣⎡3.2405−0.96930.0556−1.53711.8706−0.2040−0.49850.04161.0572⎦⎤⎣⎡XYZ⎦⎤
sRGB 色空间还多了一个非线性变换,以最小化数字应用的量化误差所导致的感知误差:
RsRGBGsRGBBsRGB={1.055 R1/2.4−0.05512.92 RR>0.0031308,R⩽0.0031308;={1.055 G1/2.4−0.05512.92 GG>0.0031308,G⩽0.0031308;={1.055 B1/2.4−0.05512.92 BB>0.0031308,B⩽0.0031308;
设备依赖的 RGB 空间
每个设备都有自己的原色和白点,因此相应的 RGB 色空间是设备依赖的。由于缺少了颜色管理,同样的一幅 RGB 图像在不同设备上的表现也就不同。通常可以指定图像表示在某个已知的 RGB 色空间,然后转换到设备无关的 XYZ 色空间,再变换到设备自身的 RGB 色空间。有一些 RGB 色空间是定义良好的,它们均由线性变换和非线性变换复合而成,其中,非线性变换形式如下:
RnonlinearGnonlinearBnonlinear={(1+f)Rγ−fsRt<R⩽1,0⩽R⩽t;={(1+f)Gγ−fsGt<G⩽1,0⩽G⩽t;={(1+f)Bγ−fsBt<B⩽1,0⩽B⩽t;
s、f、t、γ 和原色、白点一起指定了一类 RGB 色空间。

LMS 视锥空间(Cone Space)
视锥细胞响应信号 LMS 与 CIE XYZ 之间的变换称为 Hunt-Pointer-Estevez 变换,可用于色适应变换(chromatic adaptation transforms)和色貌模型(color appearance modeling)。
⎣⎡LMS⎦⎤⎣⎡XYZ⎦⎤=⎣⎡0.38971−0.229810.000000.688981.183400.00000−0.078680.046411.00000⎦⎤⎣⎡XYZ⎦⎤=⎣⎡1.910190.370950.00000−1.112140.629050.000000.201950.000001.00000⎦⎤⎣⎡LMS⎦⎤
CIE 1976 L∗a∗b∗
对立色空间(color opponent space)包含一个无色通道(achromatic channel)——也就是亮度,和两个对立色通道(color opponency channel)——通常是红绿和黄蓝通道。对立色通道在正负轴上分别编码两种颜色,零值表示中性(neutral)。与图形学最相关的对立色系统是 CIE 1976 L∗a∗b∗ 颜色模型,也称为 CIELAB,它是一个感知上或多或少均匀的色空间,对色差(color difference)计算很有用。
CIELAB 的输入是三刺激值 (X,Y,Z),以及在一个已知光源照射下的白色漫反射表面的三刺激值 (Xn,Yn,Zn)。CIELAB 的三通道分别记为 L∗、a∗、b∗,L∗ 是颜色亮度通道,a∗、b∗ 是对立色通道。它和 XYZ 之间满足如下变换:
⎣⎡L∗a∗b∗⎦⎤=⎣⎡05000116−50020000−200−1600⎦⎤⎣⎡f(X/Xn)f(Y/Yn)f(Z/Zn)1⎦⎤f(r)=⎩⎨⎧3r7.787r+11616for r>0.008856for r⩽0.008856
亮度 L∗ 被归一化到 0(黑)到 100(白)之间,a∗、b∗ 通常在 [−128,128] 上。由于 CIELAB 在感知上近似线性,因此可以直接只用欧氏距离来计算感知色差:
ΔEab∗=[(ΔL∗)2+(Δa∗)2+(Δb∗)2]1/2
CIELAB 与 XYZ 之间的逆变换如下:
XYZ=Xn⎩⎨⎧(116L∗+500a∗+11616)37.7871(116L∗+500a∗)if L∗+12529a∗>7.9996if L∗+12529a∗⩽7.9996=Yn⎩⎨⎧(116L∗+11616)37.7871116L∗if L∗>7.9996if L∗⩽7.9996=Zn⎩⎨⎧(116L∗−200b∗+11616)37.7871(116L∗−200b∗)if L∗+5029b∗>7.9996if L∗+5029b∗⩽7.9996
色适应(Chromatic Adaptation)
CIELAB 中的 (Xn,Yn,Zn) 已经计入了观测环境。观测物体和图像时所处的环境会在很大程度上影响视觉感知。光照条件包括光的亮度和颜色。
人眼视觉系统对环境变化的响应过程称为适应(adaptation)。适应分三类:明适应(light adaptation,也称光适应)、暗适应(dark adaptation)、色适应(chromatic adaptation)。从非常暗的环境到非常亮的环境时会产生明适应,反之,则产生暗适应。暗适应所需时间通常比明适应的更长。
色适应是指适应——通常是忽略——光照颜色变化的能力。人眼视觉系统可以将观测环境归一化以呈现一致的视觉体验,这在一定程度上保证颜色恒定(color constancy):尽管光照变化,物体反射率看起来几乎不变。人眼虽然不能完全忽略掉观测环境,但可以明确知道光照条件影响整体色貌,而不是改变物体本身的物理性质。
色适应的计算模型主要关注于视锥细胞的增益控制机制。最简单的模型是,假定每种视锥细胞相互独立地适应所吸收的能量:
LaMaSa=αL=βM=γS
其中,(La,Ma,Sa) 是色适应视锥信号,α、β、γ 是由观测环境决定的相互独立的增益控制,上述色适应称为 von Kries 适应(von Kries adaptation)。
自适应光照(adapting illumination)可以测量场景中的白色表面得到;数字图像中,自适应光照可以近似为场景中的最大三刺激值;这种方式得到的光称为自适应白光(adapting white)(Lw,Ww,Sw)。von Kries 适应在视锥响应空间中表述为:
⎣⎡LaMaSa⎦⎤=⎣⎡1/Lw0001/Mw0001/Sw⎦⎤⎣⎡LMS⎦⎤
当环境光照切换时,自适应光照从 (Lw,1,Mw,1,Sw,1) 变为 (Lw,2,Mw,2,Sw,2),物体颜色变为:
⎣⎡LcMcSc⎦⎤=⎣⎡Lw,2000Mw,2000Sw,2⎦⎤⎣⎡1/Lw,10001/Mw,10001/Sw,1⎦⎤⎣⎡LMS⎦⎤
虽然存在更复杂、更精确的色适应变换,但是 von Kries 模型仍然非常有效。对渲染而言,色适应的重要性在于,无需调整场景并重新渲染,只需作为图像后处理,即可修正观测环境的光照。为了减少色适应变换带来的量化误差,渲染的图像应保存为浮点格式。
色貌(Color Appearance)
色度学和色适应仍不足以描述真实颜色。为了对真实物体的颜色感知进行预测,还需要更多的环境信息。色貌模型(color appearance model)同时考虑了刺激本身的测量和观测环境。同样的图像在不同观测环境下存在明显差异,色貌模型可用于预测这些差异以准确地复现颜色。虽然色貌模型在颜色复现方面很重要,但实现起来非常复杂而繁琐。