1. AWB基础概念:色温与白平衡的关系、人眼视觉系统的色彩恒常性、AWB在ISP Pipeline中的位置
各位同学好,我是老张。今天咱们正式开始聊AWB——自动白平衡。说实话,我在ISP这行摸爬滚打了十几年,AWB这块踩过的坑比走过的路还多。但别怕,咱们一步步来,先把地基打牢。
1.1 色温与白平衡:一对天生的冤家
先问大家一个问题:为什么白炽灯下拍的照片发黄,阴天拍的发蓝?
答案就是色温。色温这个概念,说白了就是描述光源颜色的一个物理量。单位是开尔文(K)。数值越低,光越偏红黄;数值越高,光越偏蓝。
| 光源类型 | 典型色温(K) | 视觉感受 |
|---|---|---|
| 烛光 | 1500-2000 | 暖黄 |
| 白炽灯 | 2700-3300 | 暖白 |
| 日光灯 | 4000-5000 | 中性白 |
| 正午阳光 | 5500-6500 | 标准白 |
| 阴天 | 6500-8000 | 冷蓝 |
| 蓝天阴影 | 10000+ | 深蓝 |
白平衡要解决什么问题?很简单——让白色物体在任何光源下都呈现白色。你想想看,如果一张白纸在黄光下拍出来是黄的,那这张照片的白色就不准了。白平衡就是通过调整RGB通道的增益,把这种色偏拉回来。
核心公式:白平衡的本质是找到场景中的“参考白点”,然后计算R/G和B/G的比值,再反推增益系数。
我在项目中遇到过一件事:有一次做手机摄像头调试,客户反馈室内拍人像肤色偏绿。查了半天,发现是AWB把暖色灯光误判成了冷色,导致绿色通道增益过高。嗯,这就是色温估计不准的典型后果。
1.2 人眼视觉系统的色彩恒常性
为什么人眼不会觉得白纸在不同光线下颜色变了?这就是色彩恒常性。
人眼有一套非常聪明的机制:它会自动“扣除”光源的颜色,还原物体本身的颜色。你走进一个黄色灯光房间,刚开始觉得所有东西都黄黄的,但过几秒钟就适应了——白纸看起来还是白的。这就是大脑在帮你做“自动白平衡”。
但相机没这么聪明。传感器只是忠实地记录光线的能量分布。它不会自动区分“这是光源的颜色”还是“这是物体本身的颜色”。所以我们需要AWB算法来模拟人眼的这种能力。
我的经验:人眼的色彩恒常性并不是完美的。在极端混合光源下,人眼也会“翻车”。比如舞台灯光下,人脸一半红一半蓝,人眼也会觉得奇怪。这时候AWB算法反而比人眼更“诚实”。
说白了,AWB算法的目标就是:让相机拍出来的照片,看起来和人眼记忆中的颜色一致。而不是和物理真实完全一致。这一点很重要,我后面还会反复强调。
1.3 AWB在ISP Pipeline中的位置
ISP Pipeline,就是图像信号处理流水线。AWB不是孤立的,它和前后模块都有千丝万缕的关系。
先看一张我画的流程图,帮你理清AWB在整个ISP中的位置:
从这张图你能看到,AWB通常放在去噪之后、去马赛克之前。为什么是这个位置?
- 放在去噪之后:噪声会影响色温估计的准确性。我建议先做去噪,再做AWB,这样统计出来的色温更稳定。
- 放在去马赛克之前:因为AWB需要在RAW域操作,每个像素只有一种颜色分量。去马赛克之后变成了RGB三通道,再做白平衡反而会引入插值误差。
避坑指南:我曾经在一个项目中,把AWB放在了去马赛克之后。结果发现高光区域出现了彩色条纹。后来才意识到,去马赛克后的RGB数据已经经过了插值,再做白平衡增益会放大插值误差。从此以后,我再也不敢把AWB放在去马赛克后面了。
另外,AWB还有一个反馈回路。它会根据最终输出的颜色效果,反过来调整自己的参数。比如,如果发现肤色偏绿,就微调色温估计的权重。这种闭环设计在实际产品中非常常见。
1.4 小结:AWB的三大核心问题
讲到这里,我把AWB的基础概念总结成三个核心问题:
- 色温估计:当前场景的光源色温是多少?
- 增益计算:需要给R、G、B通道分别乘多少系数?
- 场景适应:如何应对混合光源、大面积单色物体等复杂情况?
这三个问题,就是AWB算法的全部。后面的章节,我会一个一个拆开来讲。
个人习惯:我每次拿到一个新的传感器,第一件事就是拍一组不同色温下的灰卡照片。然后手动算一遍R/G和B/G的比值。这样心里就有底了,知道这个传感器的“底色”是什么样的。你也不妨试试。
好了,这一章就到这里。记住一句话:AWB不是让颜色“准确”,而是让颜色“好看”。这个理念贯穿整个调优过程。
公众号:蓝海资料掘金营,微信deep3321