1. AWB基础概念:白平衡、色温与色彩空间
各位同学,我是老周。在瑞芯微平台上做图像处理有些年头了。今天咱们聊聊AWB——自动白平衡。说白了,就是让相机在各种光线下都能拍出“白色是白色”的照片。
你可能觉得这很简单。人眼看什么都是白的,对吧?但传感器不是。我刚开始做ISP时,就被这个差异坑过。嗯,咱们一步步来。
1.1 什么是白平衡
白平衡,英文叫White Balance。它的核心任务只有一个:消除光源颜色对物体颜色的影响。
举个例子。一张白纸,在日光灯下看是白的,在白炽灯下看还是白的。但传感器拍出来呢?日光灯下偏蓝,白炽灯下偏黄。为什么?因为传感器没有“大脑”去校正。
核心公式:
白平衡的本质,就是对RGB三个通道分别乘以不同的增益,让中性灰区域满足 R=G=B。
R_out = R_in × gain_R
G_out = G_in × gain_G
B_out = B_in × gain_B
// 目标:R_out = G_out = B_out(在灰色区域)
我在瑞芯微RK3588上调试时,发现一个现象:很多工程师只关注增益值,却忽略了增益的精度。增益差0.1%,整个画面的色偏就肉眼可见。尤其是肤色,稍微偏一点就“生病脸”。
1.2 色温与色彩空间的关系
色温,单位是开尔文(K)。低色温偏红黄,高色温偏蓝。你想想看,蜡烛光大概1800K,正午阳光5500K,阴天可能到7000K以上。
但色温和色彩空间是什么关系?
我画个图你就明白了。
看到没?色温决定了光源的颜色倾向,而色彩空间是描述颜色的“坐标系”。AWB就是在这两个概念之间搭桥——把传感器捕获的、受色温影响的颜色,映射到标准色彩空间中去。
1.3 人眼视觉与传感器差异
这个问题很有意思。人眼为什么能自动白平衡?因为大脑有“色彩恒常性”机制。你看到一张白纸,不管在什么光下,大脑都知道它是白的。
但传感器没有这个能力。它就是个“老实人”,光是什么颜色,它就记录什么颜色。
| 特性 | 人眼视觉 | CMOS传感器 |
|---|---|---|
| 色适应 | 自动完成,毫秒级 | 需要算法计算 |
| 动态范围 | 约24档 | 通常10-14档 |
| 色彩分辨率 | 三色锥细胞,连续 | Bayer阵列,需插值 |
| 对色温敏感度 | 低(有恒常性) | 高(直接响应) |
| 低光表现 | 依赖视杆细胞,黑白 | 依赖增益,噪声大 |
我曾经踩过的坑:
在RK3588上调试夜景模式时,我直接用高增益提亮暗部。结果呢?噪声被放大,AWB统计完全乱掉,画面偏紫。后来才明白,低光下要先做降噪,再做AWB统计。顺序错了,全盘皆输。
1.4 AWB在ISP Pipeline中的位置
ISP Pipeline,就是图像信号处理流程。AWB不是第一个,也不是最后一个。它处在中间偏前的位置。
我习惯把瑞芯微的ISP流程画成下面这样:
注意看,AWB分两步:统计和校正。统计在Raw域做,校正也在Raw域做。为什么?因为一旦做了去马赛克和色彩校正,数据就“脏”了,再调白平衡效果很差。
我的个人习惯:
在瑞芯微平台上,我会把AWB统计的窗口避开画面边缘。边缘通常有镜头暗角,统计进去会拉偏色温估计。一般取画面中心60%-80%的区域做统计,效果最稳。
1.5 小结
这一章咱们把AWB的底子打好了。记住三件事:
- 白平衡就是让白色在各种光下都还原成白色
- 色温决定了光源的颜色,色彩空间是描述颜色的坐标系
- 人眼和传感器对颜色的感知方式完全不同,AWB就是弥补这个差距
- AWB在ISP Pipeline中处于Raw域处理阶段,位置非常关键