1. AWB 基础概念:色温与光源、人眼视觉恒常性、AWB 在 ISP Pipeline 中的位置
各位好,欢迎来到《AWB 白平衡与色彩还原调优指南》的第一章。
做图像处理这些年,我见过太多工程师一上来就调 AWB 的增益矩阵,结果越调越偏。说白了,AWB 不是靠蛮力调参数就能搞定的。你得先理解三个最基础的东西:色温是什么、人眼为什么能“自动白平衡”、以及 AWB 在整个 ISP 流程里到底站在哪个位置。
这一章,我们就先把这三块地基打牢。
1.1 色温与光源:为什么光有“颜色”?
先问一个问题:一张白纸,在正午阳光下看是白的,在烛光下看呢?
你可能会说“偏黄”。没错。但为什么相机拍出来有时偏蓝、有时偏红?这就要从色温说起。
色温(Color Temperature),单位是开尔文(K)。它描述的是光源发出的光谱成分。一个理想黑体被加热到不同温度时,会发出不同颜色的光——温度越低,光越偏红;温度越高,光越偏蓝。
| 光源场景 | 典型色温(K) | 视觉感受 |
|---|---|---|
| 烛光 / 日出日落 | 1800 – 2800 | 暖黄 / 橙红 |
| 白炽灯 | 2700 – 3300 | 暖白 |
| 荧光灯(暖白) | 3500 – 4500 | 中性偏暖 |
| 正午日光 / 闪光灯 | 5000 – 6500 | 标准白光 |
| 阴天 / 阴影 | 6500 – 8000 | 冷白 / 偏蓝 |
| 蓝天(无直射光) | 10000 – 15000 | 深蓝 |
我在项目中遇到过一件事:一个户外监控摄像头,白天画面正常,一到黄昏就偏红。查了半天,发现是 AWB 的色温范围只设到了 4000K–7000K,根本没覆盖 2500K 的烛光场景。嗯,这就是典型的不理解光源范围导致的坑。
1.2 人眼视觉恒常性:为什么我们觉得白纸一直是白的?
你想想看,人眼其实没有“色温传感器”。但我们无论在烛光下还是日光下,看一张白纸都觉得它是白的。这就是色彩恒常性(Color Constancy)。
人脑会做一件很厉害的事:它根据场景中的“参考白”来调整感知。比如在烛光下,人脑知道光源偏黄,于是自动把黄色分量“减掉”,让你觉得物体颜色没变。
但相机没有这个本能。CMOS 传感器看到什么就是什么——烛光下拍白纸,它就是黄的。所以我们需要 AWB 来模拟人眼的这个能力。
核心理解: AWB 的本质,就是让相机学会“人眼的欺骗术”。它通过算法估计当前光源的色温,然后对 R、G、B 三个通道施加不同的增益,把“偏色”拉回来。
我曾经调试一个手机摄像头,在商场混合光源(暖色射灯 + 冷色日光灯)下,AWB 来回跳。为什么?因为算法只假设了单一光源,而人眼在混合光下其实会取一个“平均感知”。后来我加了多光源估计模块,才稳住。这个后面章节会细讲。
1.3 AWB 在 ISP Pipeline 中的位置
ISP(Image Signal Processor)是一条流水线。AWB 不是第一个模块,也不是最后一个。它卡在一个非常关键的位置。
下面这张图是我自己整理的典型 ISP 流程,你可以看到 AWB 的上下游关系:
从图上你能看到,AWB 增益模块位于去噪之后、去马赛克之前。为什么是这个位置?
- 在去噪之后:因为噪声会影响色温估计的准确性。先降噪,AWB 才能拿到干净的统计信息。
- 在去马赛克之前:因为 AWB 是对 RAW 域的 R/G/B 通道分别施加增益。如果先插值成 RGB 全彩图,每个像素的 R/G/B 值已经混合了邻域信息,再调增益就会产生颜色失真。
1.4 AWB 的输入与输出
搞清楚了位置,我们再看看 AWB 模块具体吃什么、吐什么。
| 项目 | 说明 |
|---|---|
| 输入 | RAW 图像数据(Bayer 格式),以及统计信息(如 R/G/B 通道的均值、直方图) |
| 处理 | 1. 统计场景中的颜色分布 2. 估计当前光源色温 3. 计算 R、G、B 三通道的增益系数 |
| 输出 | 增益后的 RAW 数据(R_gain * R, G_gain * G, B_gain * B) |
一个简单的 AWB 增益计算示例(伪代码):
// 假设统计得到场景中 R/G/B 的均值
float R_avg = 120.0;
float G_avg = 150.0;
float B_avg = 180.0;
// 目标:让 R、G、B 的均值相等(灰色世界假设)
float R_gain = G_avg / R_avg; // = 1.25
float G_gain = 1.0; // 通常以 G 为参考
float B_gain = G_avg / B_avg; // = 0.833
// 对每个像素施加增益
for each pixel in RAW:
pixel.R = pixel.R * R_gain;
pixel.G = pixel.G * G_gain;
pixel.B = pixel.B * B_gain;
1.5 本章小结
这一章我们聊了三件事:
- 色温:低色温暖、高色温冷,不同光源对应不同色温范围。
- 人眼视觉恒常性:人脑会自动补偿光源颜色,相机需要 AWB 来模拟这个能力。
- AWB 在 ISP 中的位置:在去噪之后、去马赛克之前,且必须在 RAW 域操作。
我个人习惯是,每接触一个新的 ISP 平台,第一件事就是画出它的 Pipeline 图,标出 AWB 的上下游。这能帮你快速定位问题——偏色了,是 AWB 本身的问题,还是上游噪声没处理好,或是下游色彩校正矩阵配错了。
嗯,地基打好了,后面我们才能盖高楼。