以一下翻译至《 Color constancy by characterization of illumination chromaticity**》**
摘要 计算颜色恒常性算法对数字相机实现理想色彩复现起到关键作用。若无法正确估计照明色度,图像会出现整体偏色,人眼观察者很容易察觉到。本文提出一种全新计算颜色恒常性算法。该算法计算复杂度低、内存占用小,适合消费级数码相机、拍照手机等资源受限的相机设备。算法核心是基于相机传感器响应,对现实场景中可能出现的照明色度范围做特征表征。本算法仅对照明色度做表征,而非对完整色域进行表征,因此面对传感器特性波动、对角照明变换模型失效的情况,具备更强鲁棒性。本文采用多组公开数据库开展实验,结果表明该算法对比当前主流颜色恒常性算法具备优异性能。
主题词:颜色恒常性;自动白平衡
1 引言
计算颜色恒常性算法也叫自动白平衡算法,是数字相机实现理想色彩复现的重要模块。该算法依据相机传感器响应,估计场景照明光的色彩。人类视觉系统(HVS)同样存在类似的色适应机制,以此消除照明色度对物体观测色彩带来的影响。色彩外观模型被用来预测人眼在不同照明条件下感知到的色彩效果。人类颜色恒常性的效果受视场内容、人眼适应状态、照明亮度、适应色度与平均日光光源之间的差异等因素影响。
估计照明色度是开展其余色彩处理的前置必要步骤,包括色彩外观建模以及各类色彩空间转换。色彩空间转换的典型例子就是将相机传感器 RGB 色彩空间转换为与设备无关的标准色彩空间,例如 sRGB 色彩空间,这也是数码相机最常用的输出目标色彩空间。
本文研究面向消费级数码相机(含拍照手机)的颜色恒常性应用。这类相机并不追求严格的色彩精确复现,而是优先实现偏好色彩复现。偏好色彩复现的目标不是对场景颜色做忠实还原,而是输出大多数消费者主观更喜欢的悦目色彩,例如把肤色、植被、天空颜色复现得更贴近人的记忆色彩。还可以调整亮度,提升图像整体对比度,或是改善逆光场景下的阴影区域。
既然追求的是亮度主观偏好复现而非绝对精确,颜色恒常问题就可以简化为求解照明色度,但色度的估计精度依然十分关键。如果照明色度没有得到合理处理,相机传感器色彩空间向目标色彩空间的转换、色彩外观建模都会失效。
已有大量综述介绍现有的计算颜色恒常性算法,可参考文献 3‑6。这些算法可以分为两类:①需要相机标定信息;②无需相机标定信息。例如颜色相关法 (CbC)、色域映射法 (GM,即色域约束光源估计 GCIE) 等算法取得了很好的效果,证明传感器响应标定信息非常有用。但另一方面,如果标定信息本身存在误差,依赖相机标定的算法性能就会恶化。例如大批量廉价相机模组使用通用标定参数,很难做到和每一个模组样本完全匹配;色彩响应约束条件设置过严会降低产品良率,推高生产成本;而针对单一样本单独标定同样会增加成本。相比之下,简单的灰度世界 (GW) 算法、灰度边缘假设类算法就不会受到这类标定问题影响。
出于工程实用考量,绝大多数相机系统都采用照明变换对角模型,也称作冯・克里斯系数法则。但当颜色通道相对光谱分布带宽大、光谱重叠严重时,对角模型的有效性会显著下降。文献 6 的实验表明,在这类图像数据下,颜色相关法、色域映射法性能都会明显下滑;本文同样使用该类图像数据评估所提算法性能。
对于实际数码相机,计算开销与内存占用是必须考量的因素。处理全分辨率图像往往不现实,这直接排除了一部分现有算法。举例来说,如果图像分辨率压缩过度,灰度边缘类算法性能就会明显衰减。
本文提出一种全新计算颜色恒常算法,命名为CCIC(基于照明色度表征的颜色恒常性算法)。该算法利用传感器标定信息获得良好性能,同时对标定误差、对角照明变换模型失效具备较好容忍能力,后文实验结果 4 节会予以证明。本算法计算量、内存需求都很小,仅需要图像极低分辨率表示和简单运算。算法主要依赖两点信息:①现实拍摄场景中常见照明色度的先验知识;②相机传感器对这些照明色度的响应。本算法只对标定白点,而非完整色域做映射,因此对角模型失效带来的负面影响会被削弱。第 2 节将详细介绍上述两点基础信息,第 3 节完整描述算法流程。本文描述的算法是专利文献 13 方法的扩展阐述。
2 照明色度与传感器响应
前面定义计算颜色恒常性问题:根据相机传感器响应,估计拍摄时刻场景照明的色度。首先要回答:实际摄影场景会遇到哪些照明色度?
学界已经开展大量日光测量工作,CIE 日光轨迹可参见文献 14,更新的测量结果见文献 15。但摄影场景不只有日光,各类非日光照明条件同样十分普遍。CIE 定义的标准 A 光源、F 系列荧光光源,也无法覆盖实际拍摄遇到的全部照明。
图 1 CIE1931 xy 色度下的照明色度实测数据
图 1 展示 CIE1931‑xy 色度平面上的照明色度测量数据,数据来源于一篇学位论文的实验以及后续补充测量;测量地点涵盖芬兰、美国、日本、保加利亚,覆盖一天中不同时段与不同季节。从图 1 可观察:相关色温 CCT 大于 4000K 时,色度测量点大多分布在 CIE 日光轨迹与普朗克黑体轨迹之间;CCT 小于 4000K 时,色度点明显处于普朗克轨迹上方。CCT 高于 6500K 区间内,照明色度的离散波动更小。基于这些测量,可以拟合得到平均照明色度随相关色温 CCT 变化的函数,也能估算色度相对平均轨迹的正交方向波动范围。其他公开数据源也可以得到同类信息;对算法来说,关键是能够获取该类先验数据。
图 1 中 CIE1931‑xy 平面上平均色度轨迹,由下式定义:
图 2 展示同一批实测照明条件下,照度与相关色温 CCT 的对应关系。照度大于 20000lux 时,CCT 会被约束在很窄区间,大约 4500‑6500K,实测样本几乎不会偏离该范围;照度继续升高,色温会从 6000‑6500K 向 4500‑6000K 偏移。2.2.3 小节会介绍如何利用该特性。
图 2 与图 1 同源测量数据:照明照度随相关色温 CCT 变化
但低照度条件下不存在这样强的约束关系,见图 3。低照度环境虽然出现低色温样本更多,但并不排除任意 CCT 照明的可能性.
图 3 对数坐标下,照度随相关色温 CCT 变化,数据与图 1 同源
接下来的问题:给定相机模组,面对这些照明,传感器输出响应是怎样?文中 "相机模组" 指传感器、红外截止滤光片、光学镜头的整套组合。传感器输出色度定义为:
式2
式中(R,G,B)为相机传感器经过预处理后的原始像素值;预处理包含消除黑电平、动态范围线性化、校正渐晕与色彩阴影。预处理细节可参考文献 18 第 2 节。
图 4 参考相机模组原始响应空间下的照明色度实测
图 4 和图 1 展示的是同一组照明色度,但转换到示例相机模组的传感器色度平面((R/G,B/G))。该示例相机模组会在 3.2 节进一步说明。需要注意,仅仅匹配 CIE‑xy 色度坐标还不够,不同色温区间对应的典型照明光谱同样要被覆盖。
工程上,不可能为每一款新型相机模组拍摄海量图像完成标定,很难覆盖全部现实照明条件。更可行的推导传感器响应的方式是结合三点:
①相机模组 RGB 通道光谱响应;
②图 1 中的各类照明色度;
③不同色温点对应的典型照明光谱估计。如果图 1 每一个色度点都有完整照明光谱,标定工作会进一步简化。对算法原理来说,重点是获得平均照明色度轨迹、对应的 CCT,以及色度相对平均轨迹的波动范围,记传感器响应下平均照明色度函数为。
其实图4就是各种主控白平衡模块中所表示的在色温坐标系下的类似普朗克曲线。需要在标准光源下标点得到。
2.1 CCIC 算法原理
相机系统采用照明变换对角模型,见公式 (3),也即冯・克里斯法则。是 3×3 对角矩阵;
是某一照明下中性物体的传感器 RGB 响应,
是另一照明下同个中性物体的响应。如果图像全部颜色
都可以按照式 (3) 完成不同照明之间的转换,则对角模型成立。矩阵对角元就是后文所说的白平衡增益。
式3
本文图像处理链路与文献 18 第 2 节保持一致。
算法核心思路:利用第 2 节前述先验信息,①从图像内寻找中性区域;②当图像中性区域很少甚至没有,就使用相机标定得到的平均照明色度函数计算白平衡增益。2.2‑2.4 小节分步描述算法计算流程。
2.2 步骤 1:缩小照明相关色温 CCT 候选范围
由图 1 可知,实际拍摄照明 CCT 范围大致从 1700K(壁炉、烛光)到无穷大(北天阴影场景)。算法第一步就是缩小候选 CCT 区间。图 5、图 6 可以解释为什么必须做区间压缩。

图 5 实验室示例场景的色度样本
图 6 展示图 5 实验室场景,在两种不同照明下,经过预处理原始色度((R/G,B/G))投影到参考相机模组的色度平面。D65 光源使用模拟 D65 的荧光灯管;3000K 照明由 RGB 荧光灯管生成,光谱尖峰明显。彩色圆圈代表场景中各类接近灰色物体色度,包括 Gretag‑Macbeth 色卡中性块、A4 白纸、盘子、报纸等;彩色三角是色度最接近中性物体的非中性物体,主要是浅蓝、浅棕,包括天空、桌布、皮肤、木质轨道部分区域。
可以看到:很多非中性物体的相机响应,和另一照明下中性物体输出几乎重合。例如 D65 光照下浅蓝色物体,色度接近 > 9000K 光源照射中性物体的输出。在 3000K 照明条件下,受尖峰光谱、相机通道光谱高度重叠影响,浅蓝色物体和灰色样本色度更加难以区分。因此必须排除一部分 CCT 候选区间,消除这类歧义。
本算法缩小 CCT 候选范围综合五项信息:①图 4 标定得到的平均色度轨迹;②灰度世界算法;③色域最大化准则;④照度估计(结合图 2 先验);⑤将以上四点融合的启发式规则。下面依次介绍灰度世界、色度色域最大化、照度估计,之后给出最终 CCT 区间确定流程。也可以替换成更复杂的颜色恒常算法获得更精准 CCT 范围,但本文选用简单算法已经可以取得良好结果(第 4 节),同时保证低计算开销。第一阶段尽量少依赖相机标定,提升算法面对前述各类误差源的鲁棒性。
定义为平均色度轨迹
上的一组评估点,对应 28 个色温:1887, 2000, 2167, 2333, 2500, 2667, 2833, 3000, 3167, 3333, 3500, 3750, 4000, 4250, 4500, 5000, 5500, 6000, 6500, 7000, 7500, 8000, 9000, 10000, 11500, 13500, 17500, 25000 K。
式4
这些评估点之间欧氏距离大致均等,覆盖摄影场景绝大多数色温条件。
2.2.1 灰度世界算法
经典灰度世界假设:场景全部颜色的统计平均值为灰色。照明色度估计由 RGB 三通道均值计算:
式5
在集合中寻找与
欧氏距离最近的点,得到灰度世界对应的色温估计
。
当场景色彩丰富,灰度世界算法在真实图像表现尚可;如果场景色彩单一,某一通道明显缺失,会输出错误偏色。但对于,那些垂直于平均色度轨迹
方向上的色度估计误差不会造成严重后果。
所以后续计算白平衡增益的时候,选取了灰度世界法映射到平均色度轨迹的映射点作为一项加权值。
2.2.2 色度色域最大化算法
色度色域最大化算法原理:从候选色度点中,挑选经过白平衡后图像色度色域面积最大的色度,对应色温记作
。
原始图像经过白平衡之后,还要执行传感器 RGB 到 sRGB 的色彩矩阵转换。如果候选白点是真实照明,中性物体转换后依旧保持中性;若相机通道光谱重叠严重,色彩转换会显著扩展色度色域。反过来,如果候选白点错误,色彩转换会放大偏色,参考文献 18 有更详细论述。例如候选白点色温过高,色域会被压缩偏向红调;候选白点色温过低,色域被压缩偏向蓝调。当候选白点接近真实值,色域可以覆盖场景真实颜色,面积更大。该算法适合场景颜色丰富的图像;如果场景颜色种类很少,色域面积不会出现单一明显峰值,甚至出现多个峰值。
为提升没有单峰情况下的鲁棒性,增加一步处理:若多个候选白点得到色域面积≥最大色域面积的 95%,并且这些候选色温落在最大色域对应色温和灰度世界色温之间,则对这些色温取平均,得到
。也有其他文献利用色域大小筛选光源候选值,见文献 19。
2.2.3 照度估计
本方法按照下式估计拍摄场景照度:
式6
式6中:是传感器等效曝光量(微秒),包含曝光时间、模拟 / 数字增益、光圈、中灰滤镜等综合贡献;BaseISO 为传感器基础感光度,计算方法见文献 20;ec用来补偿曝光控制带来的欠曝、过曝。实验中预处理原始图像平均亮度L的阈值
分别取动态范围的 20%、50%。举例:传感器 BaseISO=125,等效曝光 33.6ms,估算照度约 1000lux。
如果是估算的话,其实不需要这么复杂。可以直接获取当前的AE参数,根据曝光时间和总增益计算的到一个指示当前照度的指标。
受场景反射率未知等因素限制,照度估计并不完全精准,但足够用来使用图 2 的先验知识。基于照度设置色温上下限:

这套照度‑色温约束由实验得到,并未做极致优化;第 4 节会验证该约束的实际作用。
2.2.4 最终相关色温候选区间
- 初始 CCT 区间来自 2.2.3 照度估计。如果曝光信息不可用,或者估计照度小于 1000lux,则不施加照度带来的区间限制。
- 使用
和
进一步压缩 CCT 区间;但如果二者本身落在步骤 1 初始区间之外,则不执行该步约束。
- 如果候选区间在集合
内跨度超过 3 个评估点,则把距离 5500K 更远那一侧边界向 5500K 收缩,直到区间跨度只剩 3 个评估点。
- 如果候选区间不足 2 个评估点,则向 5500K 方向向外扩展区间。
- 选择 5500K 作为参考中心点的原因:该色温接近现实照明色度统计平均值;算法失效时,该中心点带来的偏色更符合人眼视觉容忍特性。例如真实色温低于 5500K,若算法估计色温偏高,会出现黄 / 红偏色,人眼对这种偏色接受度高于蓝色偏色;同理,真实色温高于 5500K,估计偏高带来蓝偏色相对更容易被人眼接受。
2.3 步骤 2:尽可能寻找图像中的中性区域
CCT 搜索区间缩小后,就可以在图像中搜索潜在中性区域,中性物体色度直接反映照明色度。中性区域搜索在图像低分辨率表达上完成,称为图像网格 ,由grid_width × grid_height均匀分块组成,记作网格I。网格每一块保存该块内未饱和像素 RGB 平均值,同时保存块内饱和像素占总像素的比例。块参数记作\
;RGB 向量
。
降分辨率一方面降低计算开销,分块平均还可以抑制噪声;但网格分辨率同时决定能够检测到的最小中性物体尺寸。
对每一个网格块,计算该块属于中性物体的可能性。总似然权重函数:
:
式8
为色度维度似然,
为亮度维度似然。
色度似然依据图 7 的相机标定信息计算。围绕平均照明色度轨迹设置高、中、低似然边界,再结合 2.2 节得到的 CCT 区间,把色度平面划分高、中、低、零似然区域,分别对应权重
,权重数值通过实验调参得到。块的色度落在哪个区域,就使用对应权重。包含饱和像素的块直接舍弃,饱和像素已经丢失真实色度;同时饱和附近像素还可能受传感器像素溢出现象影响。
图 7 平均照明色度轨迹周围的高、中、低似然边界
颜色恒常算法无法获取真实照明光谱、物体光谱反射率;如果可以获取,估计照明色度将变得十分简单。中性物体对所有可见光波段反射均等,传感器输出响应通常会高于窄带反射物体。亮度似然就利用该特性,由块亮度决定。块亮度由块 RGB 均值计算:
式9
亮度似然:
LLimMax默认取亮度最大值;若传感器高光区域存在明显非线性,则要调低该阈值(饱和附近经常出现)。实验设置LLimHi、LLimMed、LLimLo分别取网格图像最大亮度的 75%、50%、20%。相当于在图 7 二维色度平面增加亮度第三维,三者共同判定分块属于中性的可能性。


图 8‑11 展示两张测试图像中性区域检测效果。图 8 图像含有大量中性区域,经过本算法白平衡后效果良好;图 9 标记检测到的中性块:绿色高似然、黄色中似然、红色低似然,其余判定为彩色区域。受噪声、相机模组色彩阴影校正残差、CCT 区间选择误差、部分中性块亮度太低,部分中性物体没有被检出,但已经足够完成精准白平衡。图 10 几乎看不到明显中性物体,但少量检测结果依旧可以实现良好白平衡;图 11 标记其检测出的中性块。
2.4 步骤 3:计算最终白平衡增益
基于 2.3 节检出的中性区域,计算照明色度估计。
是网格内有效块的加权平均色度,仅使用饱和占比为 0 的块:
式11
将投影到高似然边界内,取欧氏距离最近点得到
;对灰度世界色度
做同样投影得到
。若原始色度本身就在高似然边界内部,则投影点等于原始色度。图 12 示例展示
。该例子中
还受到 2.2 节 CCT 候选区间约束。
图 12 照明色度估计、投影、CCT 区间示意图
最终照明色度估计分别占网格总块数的 0.1%、0.5%、5%。
式12
式13
式14
式15
式16
由最终色度计算白平衡增益矩阵:
式17