2. AWB基础概念:色温与白平衡的关系

做ISP调试这么多年,我经常跟新人说一句话:不懂色温,就别谈白平衡。这话听起来,但事实就是这样。

色温是什么?说白了,就是光源的颜色度量。你想想看,为什么阴天拍出来的照片偏蓝?为什么钨丝灯下拍出来偏黄?这就是色温在作怪。

2.1 色温的本质

色温的单位是开尔文(K)。它描述的是:一个理想黑体被加热到某个温度时发出的光的颜色。温度越低,光越偏红;温度越高,光越偏蓝。

光源类型 典型色温(K) 视觉感受
烛光 1500 - 2000 暖红
钨丝灯 2700 - 3200 暖黄
日光灯 4000 - 5000 中性白
正午阳光 5000 - 5500 标准白
阴天 6000 - 7500 冷白
蓝天阴影 8000 - 10000 偏蓝

这里有个容易搞混的地方:色温越高,颜色越冷。我刚开始做调试时也经常搞反,后来干脆记成「火焰温度低是红色,温度极高变成蓝色」,这样就顺了。

2.2 白平衡的核心逻辑

白平衡要解决什么问题?很简单:让白色在任何光源下都看起来是白色。

人眼有色彩恒常性,不管在钨丝灯下还是日光下,我们看白纸都觉得是白的。但CMOS传感器没这个本事,它老老实实地记录真实光谱。所以就需要ISP算法来「校正」颜色。

校正的原理是这样的:

  • 如果光源偏黄(低色温),图像中白色区域会偏黄
  • 算法检测到偏色后,在R/G/B通道上施加增益补偿
  • 偏黄就增加蓝色通道增益,减少红色通道增益
  • 最终让白色区域的R=G=B

核心公式:

白平衡校正的本质就是找到一组增益系数 (R_gain, G_gain, B_gain),使得场景中白色区域的 R/G = 1, B/G = 1。

2.3 瑞芯微AWB算法中的灰度世界法

灰度世界法是最经典的AWB算法之一。它的假设很简单:一幅色彩丰富的图像,所有像素的R、G、B平均值应该趋于相等。

换句话说,整个场景的平均色应该是灰色。

算法流程:

  1. 统计整帧图像的R、G、B分量平均值:R_avg, G_avg, B_avg
  2. 计算增益:R_gain = G_avg / R_avg, B_gain = G_avg / B_avg
  3. 用增益校正每个像素

我在项目中遇到过一个问题:当场景中大面积是单一颜色时(比如一片绿草地),灰度世界法会失效。因为整个画面偏绿,算法会强行把绿色往灰色拉,结果草地变成了灰绿色,非常难看。

灰度世界法的局限性:

  • 场景必须色彩丰富,否则失效
  • 大面积单色场景(草地、天空、墙壁)会误判
  • 无法处理混合光源场景

2.4 色温估计方法

瑞芯微平台在实际产品中,很少只用灰度世界法。更常用的做法是结合色温估计。

色温估计的思路是这样的:

  • 从图像中提取白色或灰色区域
  • 计算这些区域的R/G和B/G比值
  • 在预先标定的色温曲线上查找对应的色温值

瑞芯微的ISP里有一张色温查找表,记录了不同色温下标准白点的R/G和B/G比值。算法实时计算当前图像的白点位置,然后查表得到估计色温。

我个人习惯的做法:

在调试时,我会先用DNP(Daylight Neutral Point)标定板采集一组标准数据,建立色温曲线。然后在实际场景中,用灰度世界法做粗估计,再用色温曲线做细校准。两者结合,效果比单一算法好很多。

2.5 瑞芯微AWB的混合策略

瑞芯微的AWB模块实际上是一个多算法融合框架。它同时运行多个色温估计器,然后根据置信度加权融合。

我记得有一次调试一个室内监控项目,场景里有窗户(日光)和钨丝灯(暖光)混合。单一算法怎么调都不对,后来用了瑞芯微的混合策略,把图像分成多个区域分别估计色温,再根据区域权重融合,效果一下子就对了。

混合策略的典型流程:

  1. 图像分块,每块独立统计R/G、B/G
  2. 剔除过暗、过亮、饱和区域
  3. 灰度世界法计算全局色温估计值T1
  4. 白点检测法计算局部色温估计值T2
  5. 根据场景置信度加权融合:T_final = w1*T1 + w2*T2
  6. 查表得到最终增益系数

下面这张图展示了瑞芯微AWB算法的核心流程,我画出来方便你理解:

瑞芯微AWB算法核心流程 瑞芯微AWB算法核心流程 RAW图像输入 图像分块 + 统计R/G B/G 灰度世界法 → 全局色温T1 白点检测法 → 局部色温T2 置信度加权融合 T_final 查表输出增益系数 说明:灰度世界法提供全局基准,白点检测法提供局部修正,两者融合提高鲁棒性

2.6 调试中的避坑指南

做了这么多年调试,踩过的坑不少。我挑几个典型的说说:

我曾经踩过的坑:

  • 过度依赖灰度世界法:在纯色场景下,灰度世界法会强行把场景拉成灰色。后来我加了白点检测做约束,才解决这个问题。
  • 色温曲线标定不准:有一次用错了标定板,色温曲线偏移了200K,结果所有场景都偏色。后来我坚持每次标定都用DNP标准板,并且做交叉验证。
  • 忽略暗区噪声:低照度下,暗区的R/G、B/G统计值噪声很大,会严重干扰色温估计。我的做法是设置亮度阈值,低于阈值的像素不参与统计。

我的调试小技巧:

在瑞芯微平台上调试AWB时,我会先关掉AE,固定曝光参数,单独调AWB。这样能排除曝光变化对色温估计的干扰。等AWB调稳了,再联合AE一起调。

2.7 小结

色温与白平衡的关系,说白了就是:色温是原因,白平衡是解决方案。理解了这个因果关系,你就能明白为什么AWB算法要同时做色温估计和增益校正。

瑞芯微的AWB算法不是单一方法,而是灰度世界法、白点检测法、色温曲线法的组合拳。调试时不要死磕一种方法,要根据场景灵活调整融合权重。

嗯,这一章的内容就到这里。记住:白平衡调得好不好,关键看你对色温的理解深不深。