计算机图形学-13:光场、色彩与感知
七维世界
一张普通照片保留固定相机位置和朝向覆盖的有限视场,并把曝光时间和颜色通道上的光积分成二维结果。若要描述一个观察者在世界中可能看到的全部光线,还需要记录观察位置、光线方向、波长和时间。把这些变量放在一起,就得到 全光函数 Plenoptic Function:
其中 是观察位置, 是单位方向的两个角度, 是波长, 是时间。位置使用长度单位,角度用弧度表示,波长可以用纳米表示。函数值更准确地说是给定方向和波长上的光谱辐亮度 Spectral Radiance,而不是不带方向信息的总能量。
从最简单的情况逐层放回被丢弃的变量,可以看出每一维的作用。固定观察位置、时间和波长,只改变方向,得到一个人在固定地点环顾四周看到的灰度环境;加入波长,不同波长上的能量分布被保留下来,观察结果才具有颜色;加入时间,得到从同一地点观看的彩色视频;最后允许观察位置在三维空间中变化,便能从新的视点观看场景。完整函数于是回答了一个极强的问题:任意时刻、任意位置、任意方向上,进入观察者眼睛的光是什么。

上图把全光函数画成许多位置和方向的采样。它表达的是同一场景存在大量可能视图,并不意味着一张静态 RGB 图片已经采集了所有波长、所有时刻和所有位置。若每一维各取 个样本,直接采样七维空间需要 个样本,存储量会极快增长。因此实际设备都要固定一部分变量、降低分辨率,或利用光线之间的规律压缩数据。
沿线减维
在忽略时间与波长后,一条光线最直接的表示是三维空间中的一个位置加上一个二维方向,也就是五个自由度。这里的“位置”不能理解成光线上的任意坐标都要保存:在均匀、无吸收、无散射、无自发光的自由空间中,光线沿直线传播,辐亮度沿同一条光线保持不变。于是只要指定一条参考平面上的交点和传播方向,就能代表整条直线,沿光线的那一维位置被消去了。
辐亮度不变与辐照度不变是两件事。辐亮度是单位投影面积、单位立体角上的辐射通量;投影面积因子在沿线传播时相互抵消,所以它可以作为光线的属性搬运。辐照度则是到达一个表面的辐亮度对入射半球积分,距离变远时同一束光覆盖的立体角会缩小,辐照度会下降。若存在折射界面、吸收或散射,光线方向或光谱会发生变化,必须分段处理,不能把整条折线路径当作一个自由空间的常量。
这样得到的四维函数就是光场 Light Field;文献中的 Lumigraph 也用于描述同一类四维光线表示:
它是全光函数在忽略时间和波长、并利用自由空间沿线不变量之后的一个子集。也可以只在包围场景的某个曲面上记录光线;对曲面外的视点,仍需用采样和遮挡关系合成,而不是凭空获得没有采集到的遮挡区域。
两平面参数化
一条光线可以用起点和方向表示,也可以用两点表示。取两张相互平行、间距归一化为 的平面,一条不与它们平行的光线分别经过
两组交点坐标一共四个数,所以可写成
两平面之间的方向与
平行。给定两组交点,直线唯一确定;反过来,光线与两平面的交点也唯一确定。与参数平面平行的光线不能用有限交点表示,实际系统还会限制视场和深度范围,这种边界通常通过另选参考平面或裁剪处理。

固定 而遍历 ,可以看成把一台针孔相机放在 处, 平面上的样本组成这台相机的一张图像。改变固定的 ,就能得到不同位置的子孔径视图。反过来固定 而遍历 ,表示从一个空间位置接收的不同方向的辐亮度;普通像素只保存这些方向的积分,也就是辐照度,而光场把它们展开成角度维度。
这两个读法不能把单个参数任意移动来理解:改变虚拟相机位置或焦平面时,必须按照新的几何关系重采样整组 。
重聚焦
光场最直观的用途是拍摄之后改变焦平面。先看一维截面。若光线在 和 两个平面上的坐标分别为 、,它在深度 处的坐标是两端点的线性插值:
当目标焦平面上的像素位置为 时,应收集满足
的光线,再对这些样本求和或平均。固定 后,这个条件在 平面上是一条直线;改变 会平移这条直线,改变 会改变它的斜率。因此,数字重聚焦本质上是在四维光场中换一个积分切片。
例如 时有 。孔径位置改变 ,像平面坐标应改变 ,仍然会穿过同一个目标点。 时则固定 ,对不同的 求平均。实际实现通常把不同子孔径图像按该深度的视差平移后相加;在目标深度上,同一物点的样本对齐并变清晰,其他深度的样本错开并变模糊。
这里的“增强”是非负图像值对齐后的叠加,不是波动光学中的相干干涉。物点越近,视图之间的视差通常越大,所以正确的重采样斜率也更敏感。角度采样太稀疏时,可用的斜率有限,焦平面范围和深度质量都会受限。与薄透镜景深相对应,参与平均的孔径越大,进入的光更多、景深更浅、离焦区域更明显;孔径越小则更接近针孔成像,景深大但通光量和信噪比下降。平移子孔径图像还会留下边界空洞,合成结果需要裁剪或标出无效边缘。

黄块是微透镜,右侧细分块是传感器,红蓝线记录不同来向;黑线表示每个块选择同一相对位置的样本,组成一张子孔径图像。改变选择位置得到不同虚拟视点,重聚焦还要按深度改变跨块的对齐关系。
微透镜相机
记录光场有两种直观方式。相机阵列让每台相机从不同位置拍摄同一场景,直接采样位置维度;相机间的基线提供视差,但基线过小会使深度变化不明显,过大又会增加遮挡和视图空洞。

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

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

左侧放大的原始照片由很多小圆盘组成,圆盘内部还保留多个方向样本;右侧红蓝光路解释微透镜把不同来向落到不同传感器位置的过程。普通照片把这些方向相加,光场相机则用传感器面积把它们分别记录。
Lytro 光场相机把微透镜设计与计算重聚焦结合起来,允许先拍摄、再改变虚拟焦平面和孔径大小。

左侧为早期矩形机身,右侧为带较大主镜头的机型。设备外形并不能直接说明光场的四维数据,关键仍是主镜头后方的微透镜与传感器如何分配空间、方向样本。
总传感器像素数固定时,空间分辨率和角度分辨率必须折中。若每个微透镜使用 个像素记录方向,那么空间方向的采样大约在两个方向各减少 倍;例如一个原来可用于一个像素的区域现在被 个方向样本占用,若再提高到 ,空间样本会进一步减少。增加角度采样可以改善重聚焦、视点合成和深度恢复,但会牺牲纹理细节,同时微透镜的加工、标定与装配也使成本增加。光场相机不能合成任意远离采集范围的新视点:遮挡后从未采样的区域没有信息,标定误差也会在重聚焦时表现为对齐和深度偏差。
光谱
牛顿的棱镜实验说明白光可以在空间上分解成彩虹色带。不同波长在介质中的折射率不同,所以传播方向被分开;把这些波段重新合起来又可得到白光。

图中光束经过棱镜后在另一侧分成不同传播方向,说明白光原来就包含多个波段。已经分离出的单色光再经过棱镜不会继续分成新的颜色;分光来自折射率随波长变化。
光的颜色感知不能直接等同于一条“颜色波长”,更基本的物理量是光谱功率分布 Spectral Power Distribution,SPD:
表示各波长上的辐射功率密度。可见光通常取约 到 ;紫外和红外仍是电磁辐射,但不在普通人眼的可见响应范围内。SPD 的纵轴可以使用 等辐射度量单位,也可以在只比较形状时使用相对单位。

独立光源的辐射功率可以线性相加:
物理上可实现的 SPD 必须满足 。颜色匹配实验中的负系数不是负的光功率,而是把某一盏原色灯移到测试光一侧后产生的代数记号。不同光源可能具有完全不同的 SPD,却被感知成接近的白色。对于被照亮的材料,若入射光源谱为 、表面反射率为 ,简化模型下离开表面的谱可写成
因此同一物体在日光、白炽灯和窄带 LED 下可能呈现不同颜色;只保存 RGB 值也不能恢复已经丢掉的光谱结构。
三刺激视觉
人眼可以粗略看成成像系统:瞳孔限制入射光,角膜和晶状体完成聚焦,睫状肌改变晶状体形状,视网膜接收成像结果。视网膜上的感光细胞分成杆状细胞和锥状细胞。杆状细胞在暗视觉中更重要,主要给出强度而不区分颜色;锥状细胞在通常光照下负责颜色感知,数量远少于杆状细胞。

光从角膜和瞳孔进入,经晶状体汇聚到后方视网膜;晶状体形状变化用于调焦,视网膜才是感光位置。下面的三类锥体曲线描述感光细胞的波长响应,与这张解剖图的空间结构不同。
人眼有三类锥状细胞,分别记为 S、M、L,峰值响应大致位于短、中、长波段。它们的光谱敏感度曲线彼此重叠,同一波长通常会同时激发不同比例的三类锥体。

不同个体的三类锥体数量和空间分布并不相同,标准观察者数据是许多正常色觉观察者匹配结果的平均,不能代表每个人的精确生理响应。给定入眼光谱 ,三类锥体响应可近似写成
是相应锥体的光谱敏感度, 是积分后的响应。光谱原本是关于波长的连续函数,三次积分把它压缩为三个数;视觉系统接收到的是这三个响应,而不是每个波长上的功率。因此这一映射不可逆。
若两个光谱满足
它们在该观察者的三类锥体响应完全相同,就称为同色异谱 Metamerism。显示器不必复制自然物体的完整光谱,只需让三刺激响应接近,就可能被观察者看成同一种颜色;换一个观察者或改变照明条件,匹配也可能失效。

匹配实验
加色匹配 Additive Color Matching 用几种原色光的非负强度组合去匹配测试光。若原色的 SPD 为 ,混合光谱为
实验者调节三盏原色灯的强度,使混合光与测试光在固定视场、背景和观察者条件下看起来一致。匹配意味着视觉等效,不要求两边的 SPD 相同。
某些测试光无法由选定三原色的非负组合匹配。实验可以把一盏原色移到测试光一侧,此时方程中的对应系数记为负。例如图中的柱状图把 画在零线下方,含义是把该原色加到测试光一侧;这不是负光强,而是等价的移项:

CIE RGB Color Matching Functions 记录每个单色测试波长所需的三原色系数。实验中测试光和原色都可以近似为窄谱单色光;例如取 ,测出匹配它所需的红、绿、蓝强度,便得到匹配函数在该波长的一个取值。历史 CIE RGB 匹配实验使用约 700 nm、546.1 nm 和 435.8 nm 的三束原色光,它们不同于现代显示器 sRGB 原色的实际光谱。把可见光范围逐点测完,就得到 。
这些匹配函数不是三类锥体的生理响应曲线,也不是三束原色的 SPD。对于任意输入光谱 ,用匹配函数加权积分便可得到其 CIE RGB 三刺激值:
颜色匹配的线性还意味着:若两组颜色在标准观察条件下匹配,对它们做同样的线性混合后仍然匹配。因此不同线性颜色坐标可以用矩阵变换互相转换,但 CIE RGB 与后来用于显示的 sRGB 不是同一套原色定义。
XYZ与色域
CIE RGB 的匹配函数有负段,计算和表示都不够方便。CIE XYZ 通过线性变换构造一组物理上不存在的虚拟原色,使三条匹配函数在可见范围内非负,并把 设计成与明视觉光效率相关的亮度权重:
在给定观察者和辐射度量标定下, 与光度学亮度成正比;若颜色值被归一化到白点, 只是相对亮度,不应自动写成 。XYZ 是设备无关的参考坐标,虚拟原色不意味着可以造出三束对应的物理灯光。
为了把三维 XYZ 的色度可视化,令
三个小写坐标之和为 ,所以通常只画 ,并把 作为独立的亮度尺度。已知 且 时,可反解
黑色的 没有可定义的色度坐标; 时也不能直接套用上式。色度图外侧的弯曲边界是光谱轨迹,弯曲边界上的点对应单色光,内部是混合颜色;连接红端与紫端的直线称为紫色线,它上的颜色来自两端的混合,不对应单一波长。显示设备的原色只能以非负权重混合,因此其色域是原色色度点的凸包,三原色设备在图上通常形成一个三角形。

sRGB
sRGB 把一组显示器原色、参考白点和通道传递函数标准化,使不同设备可以通过校准近似复现同一套 RGB 数值。其参考白点为 D65,即模拟平均日光的标准照明体白点;把 D65 归一化为 时,可写成
在线性 sRGB 与 XYZ 使用同一 D65 白点时,常用转换矩阵为
反向矩阵为
矩阵中的负系数是坐标换基的代数权重。若转换后的 RGB 通道出现负值,则该 XYZ 颜色超出非负 sRGB 原色组合能够表示的范围,需要色域映射或裁剪。文件中的 sRGB 通道通常不是线性光强,而是经过分段传递函数编码的数值。对归一化线性通道 ,编码为
解码为
因此着色、光照叠加、纹理滤波和 mipmap 构造应在线性空间进行,最后才编码为 sRGB。直接平均编码值一般不等于平均物理亮度:编码值 与 的平均是 ,而线性亮度 编码后约为 。读取 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 三通道的最大值,描述通道强度尺度,不等同于光度学亮度 。HSV 和 HSL 不是同一个空间,不能把 Value 与 HSL 的 Lightness 当成完全相同的定义。饱和度接近零时色相在数值上虽可保留,视觉上却没有明确意义,插值或动画应处理这条灰轴边界。
CIELAB 试图让欧氏距离在规定观察条件下近似感知差异。给定参考白点 ,先定义
再计算
是相对于参考白的明度, 的正负端分别偏红、偏绿, 的正负端分别偏黄、偏蓝。分段函数在暗部使用线性段,避免立方根在零附近的无限斜率;CIELAB 只是近似感知均匀,不能保证整个颜色空间中相同欧氏距离都对应相同的可见差异。
这两个色度轴与对立色 Opponent Color 组织方式相似。视觉系统中常用白—黑、红—绿、黄—蓝三条对立轴;“偏红的绿色”难以作为一种独立颜色被感知,正是红—绿对立的直观表现。
盯住一幅带有强烈颜色的图案一段时间后切换到白底,会看到相应的负后像:视觉系统对原有颜色的通道适应,使对立方向暂时更突出。若先看彩色图案,再切换到灰度图案,互补色会叠加在灰度结构上。这个现象支持对立色组织,但不意味着 CIELAB 的每个坐标都直接等同于某个神经元。
相对颜色
颜色判断依赖上下文。同一个像素放在不同背景上,可能被感知成不同的明暗和色相;棋盘格阴影错觉中,两个实际 RGB 值相同的格子会因为周围亮暗关系而看起来不同。颜色校正、材质评估和显示设备标定都不能只看孤立的通道数值,还要说明白点、亮度和观察环境。

色适应 Chromatic Adaptation 是视觉系统随照明环境调整响应的生理和神经过程;颜色恒常性 Color Constancy 是观察者结合适应、背景和场景线索,对不同照明下的物体保持近似颜色判断。跨白点的颜色变换可以使用 Bradford 等 色适应矩阵;颜色恒常性还涉及从图像估计照明,缺少中性参照时容易失败。
减色印刷
显示器把光直接叠加,属于加色系统 Additive System;印刷依靠墨水或颜料选择性吸收光谱,属于减色系统 Subtractive System。青色 Cyan、品红 Magenta、黄色 Yellow 分别主要吸收红、绿、蓝。理想条件下三层叠加可以接近黑色,但真实油墨还受到纸张反射、散射、墨层厚度和网点空间混合影响,不能用
精确描述所有打印设备。
实际印刷加入黑色通道 形成 CMYK。黑色文字和暗部通常占很大比例,若每次都用三种彩色油墨叠印成黑,会增加彩色墨水消耗;黑墨成本较低,单独使用还可以减少套印误差造成的彩边。 不只是对不理想油墨的补偿,也是墨量控制、文字边缘和色域映射中的工程选择。

