第一章:AWB基础概念

1.1 色温与白平衡的关系

色温这个概念,说白了就是描述光源颜色的一个数值。单位是开尔文(K)。

你想想看,为什么蜡烛光看起来偏黄?为什么阴天的光偏蓝?这就是色温在起作用。

低色温(2000K-3000K)的光源偏红黄色,比如日出日落、蜡烛。高色温(6000K-8000K)的光源偏蓝白色,比如阴天、蓝天阴影。

白平衡要解决什么问题?很简单——让白色物体在任何光源下都呈现白色。

我刚开始做ISP调试时,有个场景印象特别深。一个用户在室内暖光灯下拍白墙,结果拍出来是黄墙。用户投诉说「你们摄像头色偏严重」。其实不是摄像头的问题,是白平衡没调好。

核心公式:

白平衡的本质 = 找到光源色温 → 计算增益 → 校正RGB通道

具体来说,假设当前光源色温是3000K,标准D65光源是6500K。我们需要把R通道的增益降低,B通道的增益提高。这样白色物体才能还原成白色。

光源类型 色温范围 典型场景 R/G增益比
烛光 1800-2000K 烛光晚餐 R高,B低
白炽灯 2500-3000K 室内照明 R中高,B中低
荧光灯 4000-5000K 办公室 R中,B中
日光 5500-6500K 户外晴天 R中,B中
阴天 6500-8000K 阴天户外 R低,B高

我的经验:调试时别只看色温数值。同一色温下,不同光源的光谱分布差异很大。比如荧光灯虽然标称4000K,但它的光谱是断续的,白平衡算法容易翻车。

1.2 人眼视觉系统的色彩恒常性

为什么人眼看白纸,不管在什么光下都觉得是白的?这就是色彩恒常性。

人眼和大脑会自动补偿光源颜色。你走进一个暖光灯房间,刚开始觉得光很黄,过几分钟就适应了。白纸看起来还是白纸。

但摄像头没有这个能力。它就是个傻乎乎的传感器,看到什么就记录什么。所以我们需要用算法模拟人眼的这种补偿机制。

我记得有个项目,客户非要我们做到「和人眼看到的一模一样」。我说这不可能。因为人眼的色彩恒常性是有极限的,而且每个人对颜色的感知都不一样。

色彩恒常性有几个关键特性:

  • 全局性:人眼对整个场景的光源进行统一补偿
  • 局部性:对熟悉物体的颜色有记忆补偿
  • 适应性:需要一定时间(几秒到几十秒)完成适应

我曾经踩过一个坑。在混合光源场景下(一半日光一半灯光),人眼能自动适应,但AWB算法直接懵了。最后我不得不加了一个「混合光源检测」模块,才把这个问题解决。

避坑指南:不要试图完全模仿人眼。人眼的色彩恒常性会受心理因素影响。比如你看到一块红色的布,即使光线偏蓝,你仍然觉得它是红的。但摄像头必须基于物理数据做判断。

1.3 AWB在ISP Pipeline中的位置

ISP Pipeline就是图像信号处理流程。AWB在这个流程中处于什么位置?

一般来说,顺序是这样的:

  1. Sensor原始数据(RAW)
  2. 黑电平校正(BLC)
  3. 去噪(Denoise)
  4. AWB(自动白平衡)
  5. 去马赛克(Demosaic)
  6. 颜色校正矩阵(CCM)
  7. Gamma校正
  8. 输出YUV/RGB

为什么AWB要放在这个位置?我解释一下。

AWB必须在去马赛克之前做。因为RAW数据是Bayer格式,每个像素只有一种颜色。在这个阶段做白平衡,计算量小,而且不会引入颜色插值带来的误差。

另外,AWB必须在CCM之前做。CCM是颜色校正矩阵,它会把RGB颜色空间映射到标准色域。如果先做CCM再做AWB,那白平衡的增益会破坏CCM的校正效果。

关键点:AWB的位置决定了它的输入是RAW数据,输出是经过白平衡校正的RAW数据。这个顺序不能乱。

我见过一些芯片厂商把AWB放在Demosaic之后做。说实话,这种做法不太推荐。虽然方便了调试,但精度会下降。因为插值后的数据已经引入了相邻像素的颜色信息,再做白平衡会引入额外的噪声。

嗯,这里要注意一点。AWB的位置也决定了它的处理速度要求。因为RAW数据量很大,AWB必须在几十毫秒内完成。所以算法不能太复杂,要兼顾实时性和精度。

我个人习惯在调试时先确认AWB的位置是否正确。如果Pipeline顺序错了,后面再怎么调都是白费功夫。

我的建议:拿到一个新平台的ISP Pipeline,第一件事就是画流程图。标清楚每个模块的输入输出,确认AWB的位置。这一步花10分钟,能省后面10小时的调试时间。

总结一下这章的内容:

  • 色温是光源颜色的量化指标,白平衡就是补偿不同色温下的颜色偏差
  • 人眼的色彩恒常性很强大,但摄像头需要算法来模拟
  • AWB在ISP Pipeline中的位置很关键,必须在Demosaic和CCM之前

下一章我会讲AWB的经典算法——灰度世界法和完美反射法。这些都是实战中经常用到的,到时候我会结合具体代码来讲解。