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以上。

但色温和色彩空间是什么关系?

我画个图你就明白了。

色温与色彩空间关系图 色温与色彩空间关系 2000K 3500K 5500K 7000K 10000K 蜡烛/钨丝灯 白炽灯 日光/闪光灯 阴天 蓝天 不同色温下,同一物体的RGB值不同 AWB的任务:将不同色温下的RGB映射到标准光源下的RGB 传感器色彩空间 依赖光源 RGB值随色温变化 需要AWB校正 输出:Raw域数据 标准色彩空间 独立于光源 sRGB / Adobe RGB 颜色恒定 输出:显示/存储

看到没?色温决定了光源的颜色倾向,而色彩空间是描述颜色的“坐标系”。AWB就是在这两个概念之间搭桥——把传感器捕获的、受色温影响的颜色,映射到标准色彩空间中去。

1.3 人眼视觉与传感器差异

这个问题很有意思。人眼为什么能自动白平衡?因为大脑有“色彩恒常性”机制。你看到一张白纸,不管在什么光下,大脑都知道它是白的。

但传感器没有这个能力。它就是个“老实人”,光是什么颜色,它就记录什么颜色。

特性 人眼视觉 CMOS传感器
色适应 自动完成,毫秒级 需要算法计算
动态范围 约24档 通常10-14档
色彩分辨率 三色锥细胞,连续 Bayer阵列,需插值
对色温敏感度 低(有恒常性) 高(直接响应)
低光表现 依赖视杆细胞,黑白 依赖增益,噪声大

我曾经踩过的坑:

在RK3588上调试夜景模式时,我直接用高增益提亮暗部。结果呢?噪声被放大,AWB统计完全乱掉,画面偏紫。后来才明白,低光下要先做降噪,再做AWB统计。顺序错了,全盘皆输。

1.4 AWB在ISP Pipeline中的位置

ISP Pipeline,就是图像信号处理流程。AWB不是第一个,也不是最后一个。它处在中间偏前的位置。

我习惯把瑞芯微的ISP流程画成下面这样:

ISP Pipeline中的AWB位置 瑞芯微ISP Pipeline(简化版) Sensor Raw 黑电平校正 AWB统计 AWB校正 去马赛克 CCM/Gamma 输出YUV AWB在Pipeline中的关键特性 1. 在Raw域进行统计,避免插值和色彩变换引入的干扰 2. 校正后的数据直接影响后续所有色彩处理模块

注意看,AWB分两步:统计和校正。统计在Raw域做,校正也在Raw域做。为什么?因为一旦做了去马赛克和色彩校正,数据就“脏”了,再调白平衡效果很差。

我的个人习惯:

在瑞芯微平台上,我会把AWB统计的窗口避开画面边缘。边缘通常有镜头暗角,统计进去会拉偏色温估计。一般取画面中心60%-80%的区域做统计,效果最稳。

1.5 小结

这一章咱们把AWB的底子打好了。记住三件事:

  • 白平衡就是让白色在各种光下都还原成白色
  • 色温决定了光源的颜色,色彩空间是描述颜色的坐标系
  • 人眼和传感器对颜色的感知方式完全不同,AWB就是弥补这个差距
  • AWB在ISP Pipeline中处于Raw域处理阶段,位置非常关键