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增益。
我习惯把色温估计分为两步:
- 统计特征提取:计算图像在R/G、B/G色度空间上的分布
- 色温匹配:将统计结果与预置的色温曲线做比对
实际工程中,我们常用的是色温曲线(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调试知识框架,从理论到工程实现都涵盖了。你可以把它当作调试时的检查清单。
4.6 调试工具与实战技巧
最后分享几个我常用的调试工具和方法:
- 色温板:X-Rite ColorChecker Passport,标定必备
- 示波器模式:在ISP调试工具里打开R/G、B/G的实时波形,观察色度分布
- 冻结帧:遇到偏色问题时,冻结当前帧,逐像素分析R/G、B/G比值
- 日志输出:把每帧的色温估计值和增益值打印出来,看变化趋势
我的习惯:调试AWB时,我会在实验室里摆一排不同色温的光源(D65、A光源、TL84、H光源),然后让摄像机自动切换场景,观察AWB的收敛速度和稳定性。如果能在2秒内稳定到目标色温,且没有过冲,就算合格。
嗯,AWB这块内容不少,但核心就三点:理解灰度世界假设的局限、掌握色温估计的方法、学会用工程手段解决实际问题。下次遇到偏色问题,别急着调参数,先想想——场景里到底什么颜色才是真正的白色?