4. 白平衡(AWB)校正:灰度世界假设、色温估计与调试策略

白平衡这东西,说白了就是让摄像机知道“什么是白色”。你想想看,同一张白纸,在日光灯下发青,在白炽灯下发黄,但人眼会自动校正——摄像机可没这个本事。所以AWB模块的任务,就是把不同光源下的色偏拉回来,让画面里的白色物体真正呈现为白色。

我在安防项目里遇到过最头疼的事:晚上路灯下,整个画面偏橙红,人脸跟关公似的。调了半天AWB参数才搞定。嗯,今天咱们就把AWB的底牌翻一翻。

4.1 灰度世界假设——最经典的起点

灰度世界假设(Grey World Assumption)是AWB的基石。它的核心逻辑很简单:一幅色彩丰富的图像,所有像素的R、G、B平均值应该趋于相等。如果R平均值明显高于G和B,说明画面偏红,需要降低R增益或提升G、B增益。

核心公式:

R_gain = G_avg / R_avg
B_gain = G_avg / B_avg
G_gain = 1.0(通常固定)

校正后像素:R' = R × R_gain,B' = B × B_gain

但灰度世界假设有个致命缺陷——它假设场景里“什么颜色都有”。如果画面里全是蓝天(比如高空球机对着天空),R平均值极低,B平均值极高,算法会误判为“偏蓝”,然后疯狂拉高R增益,结果天空变成了紫色。

注意:灰度世界假设在以下场景会翻车:

  • 大面积单色物体(草地、蓝天、红墙)
  • 低光照且色彩单一的场景
  • 画面被某个强色光源主导(如霓虹灯)

4.2 色温估计——从物理到算法

色温是光源的物理属性,单位是开尔文(K)。低色温(2000K-4000K)偏红黄,高色温(6000K-10000K)偏蓝青。AWB的核心任务之一,就是估算当前场景的色温,然后查表找到对应的R/G、B/G增益。

我习惯把色温估计分为两步:

  1. 统计特征提取:计算图像在R/G、B/G色度空间上的分布
  2. 色温匹配:将统计结果与预置的色温曲线做比对

实际工程中,我们常用的是色温曲线(Planckian Locus)。不同色温下,理想白点的R/G和B/G比值是一条平滑曲线。算法把当前画面的色度点投影到这条曲线上,找到最近的色温值。

我的经验:色温曲线不要只存一条。不同sensor的光谱响应不一样,同一块色温板在不同sensor上拍出来位置会偏移。我一般会针对每款sensor单独标定一条曲线,至少存8-10个色温点(2500K、3200K、4000K、5000K、6500K、8000K、10000K、12000K)。

4.3 AWB调试策略——从理论到实战

调试AWB,说白了就是调三个东西:统计窗口、色温判断逻辑、增益平滑策略。下面是我总结的调试流程:

步骤 操作 注意事项
1 选择标准光源(D65、D50、A光源、TL84等) 至少覆盖低、中、高色温
2 拍摄标准色卡(X-Rite 24色卡或Macbeth色卡) 确保色卡占画面60%以上
3 统计R/G、B/G比值,标定色温曲线 每个光源拍3-5帧取平均
4 设置统计窗口(避开边缘和过曝区域) 我习惯用中心权重窗口
5 调整色温判断阈值和增益限幅 R/G和B/G增益不要超过2.0
6 验证混合光源场景(如室内窗边) 这是最容易出bug的地方

调试口诀:

  • 低色温场景(白炽灯):R增益降低,B增益升高
  • 高色温场景(阴天):R增益升高,B增益降低
  • 混合光源:优先保证人脸肤色正确

4.4 常见问题与避坑指南

做AWB调试这些年,踩过的坑能写一本书。挑几个典型的说说:

问题1:AWB在场景切换时剧烈抖动

我曾经遇到一个项目,摄像机从室内走到室外,画面先偏蓝再偏红,来回震荡好几秒才稳定。原因是增益平滑系数设得太小,算法反应太快。

解决方案:增加增益变化的低通滤波,时间常数设为0.5-1秒。同时加入色温跳变检测,如果色温变化超过2000K,强制用目标色温的增益值。

问题2:大面积单色场景偏色

比如监控画面里全是绿色草坪,AWB会误判为“偏绿”,然后拉高R和B增益,结果草坪变成了灰色。

解决方案:引入置信度机制。如果统计窗口内的颜色分布过于集中(方差小),降低AWB的更新权重,甚至冻结增益。我一般设一个阈值:当色度分布的标准差小于某个值时,AWB更新速度降为原来的1/10。

问题3:低照度下AWB失效

晚上只有路灯时,画面信噪比低,颜色统计不稳定。AWB会随机跳动。

解决方案:低照度下切换到固定色温模式(比如路灯场景固定为3200K),或者用上一帧的增益值做平滑。我习惯在亮度低于10 lux时,直接锁定AWB增益。

4.5 AWB知识体系总览

下面这张图是我自己整理的AWB调试知识框架,从理论到工程实现都涵盖了。你可以把它当作调试时的检查清单。

AWB白平衡校正知识体系 核心理论基础 灰度世界假设 色温估计 R/G/B均值统计 增益计算 色温曲线标定 色度投影匹配 工程实现模块 统计窗口配置 色温判断逻辑 增益平滑策略 置信度机制 常见问题与调试 场景切换抖动 大面积单色偏色 低照度AWB失效

4.6 调试工具与实战技巧

最后分享几个我常用的调试工具和方法:

  • 色温板:X-Rite ColorChecker Passport,标定必备
  • 示波器模式:在ISP调试工具里打开R/G、B/G的实时波形,观察色度分布
  • 冻结帧:遇到偏色问题时,冻结当前帧,逐像素分析R/G、B/G比值
  • 日志输出:把每帧的色温估计值和增益值打印出来,看变化趋势

我的习惯:调试AWB时,我会在实验室里摆一排不同色温的光源(D65、A光源、TL84、H光源),然后让摄像机自动切换场景,观察AWB的收敛速度和稳定性。如果能在2秒内稳定到目标色温,且没有过冲,就算合格。

嗯,AWB这块内容不少,但核心就三点:理解灰度世界假设的局限、掌握色温估计的方法、学会用工程手段解决实际问题。下次遇到偏色问题,别急着调参数,先想想——场景里到底什么颜色才是真正的白色?