AWB算法详解:色温估计、颜色校正矩阵、AWB收敛策略、混合光源场景处理

自动白平衡(AWB)是相机成像中非常关键的一环。说白了,它就是让相机在不同光源下都能把白色拍成白色。你想想看,如果白平衡不准,一张白纸在日光灯下拍出来发绿,在白炽灯下拍出来发黄,这照片就没法看了。

我做了这么多年相机系统,AWB调优可以说是最磨人的部分之一。它不像AE(自动曝光)那样直观,也不像AF(自动对焦)那样有明确的物理反馈。AWB更像是在猜——猜当前场景的光源是什么,然后做补偿。猜对了,画面自然;猜错了,整张照片的色调就崩了。

色温估计:AWB的第一步

色温估计,就是判断当前光源的色温值。色温的单位是开尔文(K),低色温偏暖(比如烛光约2000K),高色温偏冷(比如阴天约7000K)。

常见的色温估计方法有几种:

  • 灰度世界法:假设场景中所有颜色的平均值是灰色。如果R/G/B通道的平均值不相等,就说明有色偏,需要补偿。
  • 完美反射法:假设场景中最亮的像素是白色。找到这些像素,用它们的RGB值来估计光源。
  • 色温查找表法:预先标定不同色温下的R/G和B/G比值,运行时查表匹配。

我在项目中遇到过一个问题:灰度世界法在单一颜色场景下会失效。比如拍一片蓝天,整个画面都是蓝色,灰度世界法会认为光源偏蓝,然后拼命加暖色,结果蓝天变成了灰天。这就是为什么实际产品中很少只用一种方法,基本都是多种方法融合。

核心要点:色温估计没有银弹。不同场景需要不同策略,甚至需要结合场景检测来做决策。

颜色校正矩阵:从估计到校正

估计出色温之后,下一步就是做颜色校正。这里要用到颜色校正矩阵(CCM)。

CCM是一个3x3的矩阵,作用是把传感器原始RGB值映射到标准色彩空间。公式很简单:

[R']   [a11 a12 a13]   [R]
[G'] = [a21 a22 a23] * [G]
[B']   [a31 a32 a33]   [B]

但实际调起来很复杂。矩阵系数不是随便写的,需要在不同色温下标定。我建议的做法是:

  1. 在D65(6500K)光源下标定一组基础CCM
  2. 在A光源(2856K)下标定一组暖色CCM
  3. 在TL84(4000K)下标定一组冷色CCM
  4. 其他色温通过插值得到

嗯,这里要注意:CCM的系数对噪声非常敏感。增益越大,噪声越明显。所以低光场景下,我通常会适当降低CCM的饱和度增益,避免噪声被放大。

个人经验:我曾经在调试一款夜景模式时,发现暗部颜色噪点特别多。排查了半天,最后发现是CCM在低光下增益太高。把低光场景的CCM饱和度系数降低20%,问题就解决了。

AWB收敛策略:快还是稳?

AWB收敛,指的是从当前色温切换到目标色温的过程。这里有个矛盾:收敛快了,画面会闪烁;收敛慢了,用户会感觉反应迟钝。

我一般把收敛策略分为三个阶段:

阶段 策略 适用场景
快速收敛 大步长调整,1-2帧内完成 场景切换、打开相机时
平滑收敛 小步长调整,5-10帧完成 缓慢变光、日常拍摄
锁定收敛 停止调整,保持当前值 预览稳定、视频录制中

为什么会这样设计?因为人眼对色温变化的敏感度其实不高,但对闪烁非常敏感。你想想看,如果拍视频时白平衡一直在跳,那画面看起来就很廉价。所以视频模式下,我通常会启用锁定收敛,只在场景发生明显变化时才重新触发AWB。

避坑指南:我曾经在某个项目中,把AWB收敛速度调得很快,结果用户在室内走动时,画面色温一直在跳,反馈说"相机疯了"。后来改成慢速收敛加场景检测触发,才解决问题。

混合光源场景处理:最头疼的部分

混合光源,就是场景中存在两种或多种不同色温的光源。比如室内既有日光灯(4000K)又有窗外的阳光(5500K),或者舞台上有不同颜色的灯光。

这种情况下,AWB很难做。因为整个画面没有一个统一的色温,你无论选哪个色温,总有一部分区域是偏色的。

我常用的处理思路是:

  • 全局优先:以主光源为准,牺牲次要光源的颜色准确性
  • 分区处理:把画面分成多个区域,每个区域独立做AWB
  • 场景识别:检测到混合光源时,切换到专门的混合光源模式

分区处理听起来很美好,但实现起来坑很多。区域之间的过渡怎么处理?如果相邻区域色温差异很大,边界处会出现明显的色阶。我试过用高斯模糊来平滑过渡,但效果一般,而且计算量很大。

目前业界比较成熟的做法是:先做全局AWB,然后对局部区域做二次校正。比如人脸区域优先保证肤色准确,背景区域可以适当牺牲。

我的建议:混合光源场景下,不要追求完美。能做到"看起来自然"就已经很好了。用户通常不会拿色温计去测画面,他们只关心照片好不好看。

知识体系总览

下面这张图总结了AWB算法的核心流程和关键环节:

AWB算法核心流程 色温估计 灰度世界法 完美反射法 色温查找表 颜色校正矩阵 D65标定 A光源标定 色温插值 收敛策略 快速收敛 平滑收敛 锁定收敛 混合光源场景处理 全局优先 分区处理 场景识别

从图中可以看到,AWB不是一条直线走到底的流程。色温估计、颜色校正、收敛策略、混合光源处理,这四个环节相互影响。比如混合光源场景下,色温估计的结果可能不准确,这时候就需要收敛策略来做平滑处理,避免画面抖动。

最后说一句:AWB调优没有标准答案。不同厂商、不同平台、不同传感器,调法都不一样。关键是要理解原理,然后根据实际效果反复迭代。我见过很多工程师拿着论文里的公式直接套用,结果效果一塌糊涂。记住,理论是基础,但最终还是要看画面效果。


公众号:蓝海资料掘金营,微信deep3321