七维世界

一张普通照片保留固定相机位置和朝向覆盖的有限视场,并把曝光时间和颜色通道上的光积分成二维结果。若要描述一个观察者在世界中可能看到的全部光线,还需要记录观察位置、光线方向、波长和时间。把这些变量放在一起,就得到 全光函数 Plenoptic Function:

P(θ,ϕ,λ,t,Vx,Vy,Vz).P(\theta,\phi,\lambda,t,V_x,V_y,V_z).

其中 (Vx,Vy,Vz)(V_x,V_y,V_z) 是观察位置,(θ,ϕ)(\theta,\phi) 是单位方向的两个角度,λ\lambda 是波长,tt 是时间。位置使用长度单位,角度用弧度表示,波长可以用纳米表示。函数值更准确地说是给定方向和波长上的光谱辐亮度 Spectral Radiance,而不是不带方向信息的总能量。

从最简单的情况逐层放回被丢弃的变量,可以看出每一维的作用。固定观察位置、时间和波长,只改变方向,得到一个人在固定地点环顾四周看到的灰度环境;加入波长,不同波长上的能量分布被保留下来,观察结果才具有颜色;加入时间,得到从同一地点观看的彩色视频;最后允许观察位置在三维空间中变化,便能从新的视点观看场景。完整函数于是回答了一个极强的问题:任意时刻、任意位置、任意方向上,进入观察者眼睛的光是什么。

全光函数包含位置、方向、波长和时间

上图把全光函数画成许多位置和方向的采样。它表达的是同一场景存在大量可能视图,并不意味着一张静态 RGB 图片已经采集了所有波长、所有时刻和所有位置。若每一维各取 nn 个样本,直接采样七维空间需要 n7n^7 个样本,存储量会极快增长。因此实际设备都要固定一部分变量、降低分辨率,或利用光线之间的规律压缩数据。

沿线减维

在忽略时间与波长后,一条光线最直接的表示是三维空间中的一个位置加上一个二维方向,也就是五个自由度。这里的“位置”不能理解成光线上的任意坐标都要保存:在均匀、无吸收、无散射、无自发光的自由空间中,光线沿直线传播,辐亮度沿同一条光线保持不变。于是只要指定一条参考平面上的交点和传播方向,就能代表整条直线,沿光线的那一维位置被消去了。

辐亮度不变与辐照度不变是两件事。辐亮度是单位投影面积、单位立体角上的辐射通量;投影面积因子在沿线传播时相互抵消,所以它可以作为光线的属性搬运。辐照度则是到达一个表面的辐亮度对入射半球积分,距离变远时同一束光覆盖的立体角会缩小,辐照度会下降。若存在折射界面、吸收或散射,光线方向或光谱会发生变化,必须分段处理,不能把整条折线路径当作一个自由空间的常量。

这样得到的四维函数就是光场 Light Field;文献中的 Lumigraph 也用于描述同一类四维光线表示:

L(二维位置,二维方向).L(\text{二维位置},\text{二维方向}).

它是全光函数在忽略时间和波长、并利用自由空间沿线不变量之后的一个子集。也可以只在包围场景的某个曲面上记录光线;对曲面外的视点,仍需用采样和遮挡关系合成,而不是凭空获得没有采集到的遮挡区域。

两平面参数化

一条光线可以用起点和方向表示,也可以用两点表示。取两张相互平行、间距归一化为 11 的平面,一条不与它们平行的光线分别经过

(s,t,0),(u,v,1).(s,t,0),\qquad (u,v,1).

两组交点坐标一共四个数,所以可写成

L(s,t,u,v).L(s,t,u,v).

两平面之间的方向与

(u−s, v−t, 1)(u-s,\ v-t,\ 1)

平行。给定两组交点,直线唯一确定;反过来,光线与两平面的交点也唯一确定。与参数平面平行的光线不能用有限交点表示,实际系统还会限制视场和深度范围,这种边界通常通过另选参考平面或裁剪处理。

两平面参数化用四个坐标表示一条光线

固定 (u,v)(u,v) 而遍历 (s,t)(s,t),可以看成把一台针孔相机放在 (u,v)(u,v) 处,(s,t)(s,t) 平面上的样本组成这台相机的一张图像。改变固定的 (u,v)(u,v),就能得到不同位置的子孔径视图。反过来固定 (s,t)(s,t) 而遍历 (u,v)(u,v),表示从一个空间位置接收的不同方向的辐亮度;普通像素只保存这些方向的积分,也就是辐照度,而光场把它们展开成角度维度。

这两个读法不能把单个参数任意移动来理解:改变虚拟相机位置或焦平面时,必须按照新的几何关系重采样整组 (s,t,u,v)(s,t,u,v)。

重聚焦

光场最直观的用途是拍摄之后改变焦平面。先看一维截面。若光线在 z=0z=0 和 z=1z=1 两个平面上的坐标分别为 ss、uu,它在深度 dd 处的坐标是两端点的线性插值:

x(d)=(1−d)s+du.x(d)=(1-d)s+du.

当目标焦平面上的像素位置为 xx 时,应收集满足

(1−d)s+du=x(1-d)s+du=x

的光线,再对这些样本求和或平均。固定 dd 后,这个条件在 (s,u)(s,u) 平面上是一条直线;改变 xx 会平移这条直线,改变 dd 会改变它的斜率。因此,数字重聚焦本质上是在四维光场中换一个积分切片。

例如 d=1/2d=1/2 时有 s+u=2xs+u=2x。孔径位置改变 Δs\Delta s,像平面坐标应改变 −Δs-\Delta s,仍然会穿过同一个目标点。d=1d=1 时则固定 u=xu=x,对不同的 ss 求平均。实际实现通常把不同子孔径图像按该深度的视差平移后相加;在目标深度上,同一物点的样本对齐并变清晰,其他深度的样本错开并变模糊。

这里的“增强”是非负图像值对齐后的叠加,不是波动光学中的相干干涉。物点越近,视图之间的视差通常越大,所以正确的重采样斜率也更敏感。角度采样太稀疏时,可用的斜率有限,焦平面范围和深度质量都会受限。与薄透镜景深相对应,参与平均的孔径越大,进入的光更多、景深更浅、离焦区域更明显;孔径越小则更接近针孔成像,景深大但通光量和信噪比下降。平移子孔径图像还会留下边界空洞,合成结果需要裁剪或标出无效边缘。

从微透镜块中选择方向

黄块是微透镜,右侧细分块是传感器,红蓝线记录不同来向;黑线表示每个块选择同一相对位置的样本,组成一张子孔径图像。改变选择位置得到不同虚拟视点,重聚焦还要按深度改变跨块的对齐关系。

微透镜相机

记录光场有两种直观方式。相机阵列让每台相机从不同位置拍摄同一场景,直接采样位置维度;相机间的基线提供视差,但基线过小会使深度变化不明显,过大又会增加遮挡和视图空洞。

相机阵列从不同位置采样同一场景

另一种方案是在主镜头和传感器之间加入微透镜阵列 Microlens Array。普通相机的一个感光像素把来自不同方向的光积分成一个辐照度值;微透镜把主镜头孔径不同区域来的光分散到其后的不同传感器像素,于是一个原来的像素位置变成一个小块,块内像素记录方向样本。

微透镜阵列把孔径方向映射到传感器像素

原始光场照片放大后会看到很多圆形的小盘,每个小盘对应一个微透镜。每个微透镜的位置提供空间采样,圆盘内部的像素提供角度采样。对每个圆盘选取同一个相对位置的像素,可以合成一张近似从某个虚拟位置拍摄的普通照片;选取不同相对位置就像移动了相机。重聚焦则不是每个圆盘都取同一行,而是根据目标深度查询不同的光线并重新对齐。

原始光场照片的小圆盘与方向分配

左侧放大的原始照片由很多小圆盘组成,圆盘内部还保留多个方向样本;右侧红蓝光路解释微透镜把不同来向落到不同传感器位置的过程。普通照片把这些方向相加,光场相机则用传感器面积把它们分别记录。

Lytro 光场相机把微透镜设计与计算重聚焦结合起来,允许先拍摄、再改变虚拟焦平面和孔径大小。

两种 Lytro 光场相机

左侧为早期矩形机身,右侧为带较大主镜头的机型。设备外形并不能直接说明光场的四维数据,关键仍是主镜头后方的微透镜与传感器如何分配空间、方向样本。

总传感器像素数固定时,空间分辨率和角度分辨率必须折中。若每个微透镜使用 m×mm\times m 个像素记录方向,那么空间方向的采样大约在两个方向各减少 mm 倍;例如一个原来可用于一个像素的区域现在被 10×10=10010\times10=100 个方向样本占用,若再提高到 100×100100\times100,空间样本会进一步减少。增加角度采样可以改善重聚焦、视点合成和深度恢复,但会牺牲纹理细节,同时微透镜的加工、标定与装配也使成本增加。光场相机不能合成任意远离采集范围的新视点:遮挡后从未采样的区域没有信息,标定误差也会在重聚焦时表现为对齐和深度偏差。

光谱

牛顿的棱镜实验说明白光可以在空间上分解成彩虹色带。不同波长在介质中的折射率不同,所以传播方向被分开;把这些波段重新合起来又可得到白光。

棱镜分光实验

图中光束经过棱镜后在另一侧分成不同传播方向,说明白光原来就包含多个波段。已经分离出的单色光再经过棱镜不会继续分成新的颜色;分光来自折射率随波长变化。

光的颜色感知不能直接等同于一条“颜色波长”,更基本的物理量是光谱功率分布 Spectral Power Distribution,SPD:

S(λ)S(\lambda)

表示各波长上的辐射功率密度。可见光通常取约 400 nm400\,\mathrm{nm} 到 700 nm700\,\mathrm{nm};紫外和红外仍是电磁辐射,但不在普通人眼的可见响应范围内。SPD 的纵轴可以使用 W/nm\mathrm{W/nm} 等辐射度量单位,也可以在只比较形状时使用相对单位。

光源在不同波长上的光谱功率分布

独立光源的辐射功率可以线性相加:

S(λ)=aS1(λ)+bS2(λ),a,b≥0.S(\lambda)=aS_1(\lambda)+bS_2(\lambda),\qquad a,b\ge 0.

物理上可实现的 SPD 必须满足 S(λ)≥0S(\lambda)\ge0。颜色匹配实验中的负系数不是负的光功率,而是把某一盏原色灯移到测试光一侧后产生的代数记号。不同光源可能具有完全不同的 SPD,却被感知成接近的白色。对于被照亮的材料,若入射光源谱为 E(λ)E(\lambda)、表面反射率为 ρ(λ)\rho(\lambda),简化模型下离开表面的谱可写成

L(λ)∝E(λ)ρ(λ).L(\lambda)\propto E(\lambda)\rho(\lambda).

因此同一物体在日光、白炽灯和窄带 LED 下可能呈现不同颜色;只保存 RGB 值也不能恢复已经丢掉的光谱结构。

三刺激视觉

人眼可以粗略看成成像系统:瞳孔限制入射光,角膜和晶状体完成聚焦,睫状肌改变晶状体形状,视网膜接收成像结果。视网膜上的感光细胞分成杆状细胞和锥状细胞。杆状细胞在暗视觉中更重要,主要给出强度而不区分颜色;锥状细胞在通常光照下负责颜色感知,数量远少于杆状细胞。

眼球中的成像结构

光从角膜和瞳孔进入,经晶状体汇聚到后方视网膜;晶状体形状变化用于调焦,视网膜才是感光位置。下面的三类锥体曲线描述感光细胞的波长响应,与这张解剖图的空间结构不同。

人眼有三类锥状细胞,分别记为 S、M、L,峰值响应大致位于短、中、长波段。它们的光谱敏感度曲线彼此重叠,同一波长通常会同时激发不同比例的三类锥体。

S、M、L 三类锥体的光谱响应

不同个体的三类锥体数量和空间分布并不相同,标准观察者数据是许多正常色觉观察者匹配结果的平均,不能代表每个人的精确生理响应。给定入眼光谱 S(λ)S(\lambda),三类锥体响应可近似写成

ck=∫S(λ)sk(λ) dλ,k∈{S,M,L}.c_k=\int S(\lambda)s_k(\lambda)\,\mathrm d\lambda, \qquad k\in\{S,M,L\}.

sk(λ)s_k(\lambda) 是相应锥体的光谱敏感度,ckc_k 是积分后的响应。光谱原本是关于波长的连续函数,三次积分把它压缩为三个数;视觉系统接收到的是这三个响应,而不是每个波长上的功率。因此这一映射不可逆。

若两个光谱满足

∫[S1(λ)−S2(λ)]sk(λ) dλ=0,k∈{S,M,L},\int\bigl[S_1(\lambda)-S_2(\lambda)\bigr]s_k(\lambda)\,\mathrm d\lambda=0, \qquad k\in\{S,M,L\},

它们在该观察者的三类锥体响应完全相同,就称为同色异谱 Metamerism。显示器不必复制自然物体的完整光谱,只需让三刺激响应接近,就可能被观察者看成同一种颜色;换一个观察者或改变照明条件,匹配也可能失效。

不同光谱可以产生相同三刺激响应

匹配实验

加色匹配 Additive Color Matching 用几种原色光的非负强度组合去匹配测试光。若原色的 SPD 为 SR(λ),SG(λ),SB(λ)S_R(\lambda),S_G(\lambda),S_B(\lambda),混合光谱为

Smix(λ)=R SR(λ)+G SG(λ)+B SB(λ),R,G,B≥0.S_{\mathrm{mix}}(\lambda) =R\,S_R(\lambda)+G\,S_G(\lambda)+B\,S_B(\lambda), \qquad R,G,B\ge0.

实验者调节三盏原色灯的强度,使混合光与测试光在固定视场、背景和观察者条件下看起来一致。匹配意味着视觉等效,不要求两边的 SPD 相同。

某些测试光无法由选定三原色的非负组合匹配。实验可以把一盏原色移到测试光一侧,此时方程中的对应系数记为负。例如图中的柱状图把 p2p_2 画在零线下方,含义是把该原色加到测试光一侧;这不是负光强,而是等价的移项:

C(λ)+∣g(λ)∣G=r(λ)R+b(λ)B.C(\lambda)+|g(\lambda)|G =r(\lambda)R+b(\lambda)B.

CIE RGB 实验中的负原色系数

CIE RGB Color Matching Functions 记录每个单色测试波长所需的三原色系数。实验中测试光和原色都可以近似为窄谱单色光;例如取 450 nm450\,\mathrm{nm},测出匹配它所需的红、绿、蓝强度,便得到匹配函数在该波长的一个取值。历史 CIE RGB 匹配实验使用约 700 nm、546.1 nm 和 435.8 nm 的三束原色光,它们不同于现代显示器 sRGB 原色的实际光谱。把可见光范围逐点测完,就得到 rˉ(λ),gˉ(λ),bˉ(λ)\bar r(\lambda),\bar g(\lambda),\bar b(\lambda)。

这些匹配函数不是三类锥体的生理响应曲线,也不是三束原色的 SPD。对于任意输入光谱 S(λ)S(\lambda),用匹配函数加权积分便可得到其 CIE RGB 三刺激值:

R=∫S(λ)rˉ(λ) dλ,G=∫S(λ)gˉ(λ) dλ,B=∫S(λ)bˉ(λ) dλ.R=\int S(\lambda)\bar r(\lambda)\,\mathrm d\lambda, \qquad G=\int S(\lambda)\bar g(\lambda)\,\mathrm d\lambda, \qquad B=\int S(\lambda)\bar b(\lambda)\,\mathrm d\lambda.

颜色匹配的线性还意味着:若两组颜色在标准观察条件下匹配,对它们做同样的线性混合后仍然匹配。因此不同线性颜色坐标可以用矩阵变换互相转换,但 CIE RGB 与后来用于显示的 sRGB 不是同一套原色定义。

XYZ与色域

CIE RGB 的匹配函数有负段,计算和表示都不够方便。CIE XYZ 通过线性变换构造一组物理上不存在的虚拟原色,使三条匹配函数在可见范围内非负,并把 YY 设计成与明视觉光效率相关的亮度权重:

X=∫S(λ)xˉ(λ) dλ,Y=∫S(λ)yˉ(λ) dλ,Z=∫S(λ)zˉ(λ) dλ.X=\int S(\lambda)\bar x(\lambda)\,\mathrm d\lambda, \qquad Y=\int S(\lambda)\bar y(\lambda)\,\mathrm d\lambda, \qquad Z=\int S(\lambda)\bar z(\lambda)\,\mathrm d\lambda.

在给定观察者和辐射度量标定下,YY 与光度学亮度成正比;若颜色值被归一化到白点,YY 只是相对亮度,不应自动写成 cd/m2\mathrm{cd/m^2}。XYZ 是设备无关的参考坐标,虚拟原色不意味着可以造出三束对应的物理灯光。

为了把三维 XYZ 的色度可视化,令

x=XX+Y+Z,y=YX+Y+Z,z=ZX+Y+Z=1−x−y.x=\frac{X}{X+Y+Z},\qquad y=\frac{Y}{X+Y+Z},\qquad z=\frac{Z}{X+Y+Z}=1-x-y.

三个小写坐标之和为 11,所以通常只画 (x,y)(x,y),并把 YY 作为独立的亮度尺度。已知 (x,y,Y)(x,y,Y) 且 y≠0y\ne0 时,可反解

X=xYy,Z=(1−x−y)Yy.X=\frac{xY}{y},\qquad Z=\frac{(1-x-y)Y}{y}.

黑色的 X=Y=Z=0X=Y=Z=0 没有可定义的色度坐标;y=0y=0 时也不能直接套用上式。色度图外侧的弯曲边界是光谱轨迹,弯曲边界上的点对应单色光,内部是混合颜色;连接红端与紫端的直线称为紫色线,它上的颜色来自两端的混合,不对应单一波长。显示设备的原色只能以非负权重混合,因此其色域是原色色度点的凸包,三原色设备在图上通常形成一个三角形。

CIE 色度图以 x、y 表示色度、以 Y 表示亮度

sRGB

sRGB 把一组显示器原色、参考白点和通道传递函数标准化,使不同设备可以通过校准近似复现同一套 RGB 数值。其参考白点为 D65,即模拟平均日光的标准照明体白点;把 D65 归一化为 Y=1Y=1 时,可写成

(Xn,Yn,Zn)≈(0.95047,1,1.08883).(X_n,Y_n,Z_n)\approx(0.95047,1,1.08883).

在线性 sRGB 与 XYZ 使用同一 D65 白点时,常用转换矩阵为

(XYZ)=(0.41245640.35757610.18043750.21267290.71515220.07217500.01933390.11919200.9503041)(RlinGlinBlin),\begin{pmatrix}X\\Y\\Z\end{pmatrix} = \begin{pmatrix} 0.4124564&0.3575761&0.1804375\\ 0.2126729&0.7151522&0.0721750\\ 0.0193339&0.1191920&0.9503041 \end{pmatrix} \begin{pmatrix}R_{\rm lin}\\G_{\rm lin}\\B_{\rm lin}\end{pmatrix},

反向矩阵为

(RlinGlinBlin)=(3.2404542−1.5371385−0.4985314−0.96926601.87601080.04155600.0556434−0.20402591.0572252)(XYZ).\begin{pmatrix}R_{\rm lin}\\G_{\rm lin}\\B_{\rm lin}\end{pmatrix} = \begin{pmatrix} 3.2404542&-1.5371385&-0.4985314\\ -0.9692660&1.8760108&0.0415560\\ 0.0556434&-0.2040259&1.0572252 \end{pmatrix} \begin{pmatrix}X\\Y\\Z\end{pmatrix}.

矩阵中的负系数是坐标换基的代数权重。若转换后的 RGB 通道出现负值,则该 XYZ 颜色超出非负 sRGB 原色组合能够表示的范围,需要色域映射或裁剪。文件中的 sRGB 通道通常不是线性光强,而是经过分段传递函数编码的数值。对归一化线性通道 ClinC_{\rm lin},编码为

CsRGB={12.92 Clin,Clin≤0.0031308,1.055 Clin1/2.4−0.055,Clin>0.0031308.C_{\rm sRGB}= \begin{cases} 12.92\,C_{\rm lin},&C_{\rm lin}\le0.0031308,\\ 1.055\,C_{\rm lin}^{1/2.4}-0.055,&C_{\rm lin}>0.0031308. \end{cases}

解码为

Clin={CsRGB12.92,CsRGB≤0.04045,(CsRGB+0.0551.055)2.4,CsRGB>0.04045.C_{\rm lin}= \begin{cases} \dfrac{C_{\rm sRGB}}{12.92},&C_{\rm sRGB}\le0.04045,\\ \left(\dfrac{C_{\rm sRGB}+0.055}{1.055}\right)^{2.4},&C_{\rm sRGB}>0.04045. \end{cases}

因此着色、光照叠加、纹理滤波和 mipmap 构造应在线性空间进行,最后才编码为 sRGB。直接平均编码值一般不等于平均物理亮度:编码值 00 与 11 的平均是 0.50.5,而线性亮度 0.50.5 编码后约为 0.7350.735。读取 sRGB 纹理后若要参与光照,应先解码;法线、粗糙度和金属度等数据纹理不具有 sRGB 颜色语义。

HDR High Dynamic Range、曝光和色调映射也不能与 sRGB 编码混为一谈。曝光通常在线性值上做整体缩放,色调映射把超出显示范围的 HDR 值压缩到可显示范围,最后才进行通道编码。

负原色实验只说明匹配方程的代数记号,不能代替色域图。实际色域比较应看 CIE 色度图中各原色点的凸包;可用下面的图示理解 sRGB 三角形与可见色度区域的关系:

三原色设备的色域

马蹄形区域给出可见色度,标为 sRGB 的三角形只覆盖其中一部分。Adobe RGB 等原色不同的系统形成不同凸包;图底部的 Purple line 由光谱两端的混合产生,不对应单一波长。图中颜色仍受当前显示器色域限制。

感知坐标

RGB 与 XYZ 适合描述物理或设备变换,却不适合直接让艺术家按“颜色是什么样”来调节。HSV Hue–Saturation–Value 用色相、饱和度和明度组织 RGB 颜色立方体,常见于颜色拾取器。色相描述颜色类别;饱和度描述颜色接近中性白/灰还是接近该色相的纯色;Value 在标准 HSV 定义中是 RGB 三通道的最大值,描述通道强度尺度,不等同于光度学亮度 YY。HSV 和 HSL 不是同一个空间,不能把 Value 与 HSL 的 Lightness 当成完全相同的定义。饱和度接近零时色相在数值上虽可保留,视觉上却没有明确意义,插值或动画应处理这条灰轴边界。

CIELAB 试图让欧氏距离在规定观察条件下近似感知差异。给定参考白点 (Xn,Yn,Zn)(X_n,Y_n,Z_n),先定义

f(q)={q1/3,q>δ3,q3δ2+429,q≤δ3,δ=629,f(q)= \begin{cases} q^{1/3},&q>\delta^3,\\ \dfrac{q}{3\delta^2}+\dfrac4{29},&q\le\delta^3, \end{cases} \qquad \delta=\frac6{29},

再计算

L∗=116f(Y/Yn)−16,L^*=116f(Y/Y_n)-16,

a∗=500[f(X/Xn)−f(Y/Yn)],a^*=500\bigl[f(X/X_n)-f(Y/Y_n)\bigr],

b∗=200[f(Y/Yn)−f(Z/Zn)].b^*=200\bigl[f(Y/Y_n)-f(Z/Z_n)\bigr].

L∗L^* 是相对于参考白的明度,a∗a^* 的正负端分别偏红、偏绿,b∗b^* 的正负端分别偏黄、偏蓝。分段函数在暗部使用线性段,避免立方根在零附近的无限斜率;CIELAB 只是近似感知均匀,不能保证整个颜色空间中相同欧氏距离都对应相同的可见差异。

这两个色度轴与对立色 Opponent Color 组织方式相似。视觉系统中常用白—黑、红—绿、黄—蓝三条对立轴;“偏红的绿色”难以作为一种独立颜色被感知,正是红—绿对立的直观表现。

盯住一幅带有强烈颜色的图案一段时间后切换到白底,会看到相应的负后像:视觉系统对原有颜色的通道适应,使对立方向暂时更突出。若先看彩色图案,再切换到灰度图案,互补色会叠加在灰度结构上。这个现象支持对立色组织,但不意味着 CIELAB 的每个坐标都直接等同于某个神经元。

相对颜色

颜色判断依赖上下文。同一个像素放在不同背景上,可能被感知成不同的明暗和色相;棋盘格阴影错觉中,两个实际 RGB 值相同的格子会因为周围亮暗关系而看起来不同。颜色校正、材质评估和显示设备标定都不能只看孤立的通道数值,还要说明白点、亮度和观察环境。

颜色与明度的上下文错觉

色适应 Chromatic Adaptation 是视觉系统随照明环境调整响应的生理和神经过程;颜色恒常性 Color Constancy 是观察者结合适应、背景和场景线索,对不同照明下的物体保持近似颜色判断。跨白点的颜色变换可以使用 Bradford 等 3×33\times3 色适应矩阵;颜色恒常性还涉及从图像估计照明,缺少中性参照时容易失败。

减色印刷

显示器把光直接叠加,属于加色系统 Additive System;印刷依靠墨水或颜料选择性吸收光谱,属于减色系统 Subtractive System。青色 Cyan、品红 Magenta、黄色 Yellow 分别主要吸收红、绿、蓝。理想条件下三层叠加可以接近黑色,但真实油墨还受到纸张反射、散射、墨层厚度和网点空间混合影响,不能用

C=1−R,M=1−G,Y=1−BC=1-R,\qquad M=1-G,\qquad Y=1-B

精确描述所有打印设备。

实际印刷加入黑色通道 KK 形成 CMYK。黑色文字和暗部通常占很大比例,若每次都用三种彩色油墨叠印成黑,会增加彩色墨水消耗;黑墨成本较低,单独使用还可以减少套印误差造成的彩边。KK 不只是对不理想油墨的补偿,也是墨量控制、文字边缘和色域映射中的工程选择。