第一章: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在这个流程中处于什么位置?
一般来说,顺序是这样的:
- Sensor原始数据(RAW)
- 黑电平校正(BLC)
- 去噪(Denoise)
- AWB(自动白平衡)
- 去马赛克(Demosaic)
- 颜色校正矩阵(CCM)
- Gamma校正
- 输出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的经典算法——灰度世界法和完美反射法。这些都是实战中经常用到的,到时候我会结合具体代码来讲解。