3. AWB算法实现:基于色温估计的增益计算
3.1 自动白平衡(AWB)概述
自动白平衡(Auto White Balance, AWB)是ISP(图像信号处理器)中3A算法(AE、AWB、AF)的核心组成部分。其根本任务是:在不同光源(色温)下,将图像中原本为白色的物体还原为白色,从而消除光源颜色对物体真实色彩的干扰。
AWB算法的实现通常分为三个关键步骤:
- 色温估计:从输入图像中统计R/G/B通道信息,推断当前场景的光源色温。
- 增益计算:根据估计的色温,计算R、G、B三个通道的独立增益系数。
- 通道增益调整:将增益系数应用到原始图像数据上,完成白平衡校正。
3.2 基于色温估计的增益计算
色温估计是AWB算法的核心。常用的方法包括灰度世界法(Gray World)、完美反射法(Perfect Reflector)以及基于色温曲线的统计法。在工业级ISP中,通常采用基于色温曲线的统计法,因为它对复杂场景的鲁棒性更高。
3.2.1 色温估计原理
色温估计的核心思想是:在特定色温下,白色物体在R/G和B/G色度空间中的分布具有统计规律。通过统计图像中所有像素的R/G和B/G比值,可以找到最接近的色温点。
具体步骤如下:
- 统计R/G和B/G直方图:将图像划分为多个区域(如MxN网格),计算每个区域的R/G和B/G均值。
- 剔除异常点:去除过暗、过亮或饱和度过高的区域,避免噪声干扰。
- 匹配色温曲线:将统计得到的(R/G, B/G)点与预置的色温曲线(Plankian Locus)进行匹配,找到最接近的色温值。
3.2.2 增益计算模型
一旦估计出色温 \( T_{est} \),即可计算R、G、B通道的增益。增益计算的目标是:使校正后的图像中,灰色物体的R、G、B分量相等。
设原始图像中某像素的R、G、B值为 \( R_{raw}, G_{raw}, B_{raw} \),校正后的值为 \( R_{wb}, G_{wb}, B_{wb} \),则:
R_wb = R_raw * gain_R
G_wb = G_raw * gain_G
B_wb = B_raw * gain_B
其中,增益系数通常以G通道为基准(gain_G = 1.0),R和B通道的增益根据色温查表或插值得到:
gain_R = 1.0 / (R/G ratio at T_est)
gain_B = 1.0 / (B/G ratio at T_est)
3.3 R/G/B通道增益调整
通道增益调整是将计算出的增益系数应用到图像数据上的过程。在ISP流水线中,该步骤通常位于黑电平校正(BLC)和去马赛克(Demosaic)之间,或在RAW域直接进行。
3.3.1 增益调整的硬件实现
在嵌入式ISP中,增益调整通常通过硬件乘法器实现,以流水线方式处理每个像素。典型的处理流程如下:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 读取RAW像素 | 从Bayer阵列中读取当前像素的原始值 |
| 2 | 判断通道类型 | 根据像素位置判断是R、G还是B通道 |
| 3 | 应用增益 | 将像素值乘以对应的通道增益系数 |
| 4 | 钳位处理 | 将结果限制在有效位宽内(如10bit: 0~1023) |
| 5 | 输出校正像素 | 写入下一级ISP模块 |
3.3.2 增益调整的精度与位宽
增益调整的精度直接影响白平衡效果。通常使用定点数表示增益系数,例如Q8.8格式(整数8位,小数8位)。以下是一个典型的增益调整代码示例:
// 假设RAW数据为10bit,增益系数为Q8.8格式
uint16_t apply_gain(uint16_t raw_pixel, uint16_t gain_q8) {
uint32_t result = (uint32_t)raw_pixel * (uint32_t)gain_q8;
result >>= 8; // 右移8位,恢复定点数
if (result > 1023) result = 1023; // 10bit钳位
return (uint16_t)result;
}
3.4 AWB调试参数与色温曲线
AWB调试是ISP调优中最耗时、最依赖经验的环节之一。调试的核心是色温曲线和增益映射表的标定与优化。
3.4.1 色温曲线(Plankian Locus)
色温曲线描述了不同色温下,标准白色物体在(R/G, B/G)色度空间中的理论位置。在调试中,工程师需要根据实际传感器和镜头的光学特性,对理论曲线进行修正。
| 色温(K) | 光源类型 | 典型R/G比值 | 典型B/G比值 |
|---|---|---|---|
| 2700 | 白炽灯(A光源) | 1.85 | 0.55 |
| 4000 | 荧光灯(TL84) | 1.40 | 0.75 |
| 5000 | 日光(D50) | 1.20 | 0.90 |
| 6500 | 阴天(D65) | 1.00 | 1.10 |
| 10000 | 蓝色天空 | 0.80 | 1.50 |
3.4.2 主要调试参数
AWB调试涉及多个可调参数,以下是最关键的几个:
- 色温区间(CCT Range):定义算法支持的色温范围,如2000K~10000K。超出范围时,算法应进行钳位或使用边界值。
- 增益上限(Gain Max):限制R和B通道的最大增益,防止噪声放大和通道饱和。典型值为4.0。
- 统计窗口(Stat Window):定义用于色温估计的图像区域。通常避开边缘和过曝区域,使用中心权重窗口。
- 收敛速度(Convergence Speed):在视频模式下,AWB需要平滑过渡。通过低通滤波器控制增益变化速率,避免闪烁。
- 色温曲线插值点数:曲线上的标定点数量。点数越多,色温估计越精细,但计算量也越大。通常使用8~16个标定点。
3.4.3 色温曲线与增益映射关系
色温曲线与增益映射的关系可以通过以下SVG图直观展示:
3.5 工程案例:AWB调优实战
以下是一个典型的AWB调优案例,展示从问题发现到参数优化的完整过程。
3.5.1 问题现象
某款手机摄像头在室内白炽灯(2700K)下拍摄时,画面偏黄严重;在室外阴天(6500K)下拍摄时,画面偏蓝。经分析,原因为色温曲线标定不准确,导致增益计算偏差。
3.5.2 调优步骤
- 重新标定色温曲线:在标准光源箱中,使用灰卡拍摄2700K、4000K、5000K、6500K、8000K五组图像,记录R/G和B/G比值。
- 更新增益映射表:根据新标定的曲线,重新计算各色温下的gain_R和gain_B,并写入ISP寄存器。
- 调整统计窗口:将统计窗口从全图改为中心区域(占图像面积的60%),避免边缘偏色干扰。
- 设置增益上限:将gain_R和gain_B的上限从5.0降低到3.5,减少噪声放大。
- 验证与微调:在实际场景中拍摄,使用调试工具(如Imatest)测量色温误差,微调曲线插值点。
3.5.3 调优前后对比
| 场景 | 调优前色温误差 | 调优后色温误差 | 主观效果 |
|---|---|---|---|
| 白炽灯(2700K) | ±800K | ±150K | 偏黄明显改善 |
| 荧光灯(4000K) | ±500K | ±100K | 肤色自然 |
| 阴天(6500K) | ±700K | ±120K | 偏蓝消除 |
3.6 本章小结
本章详细介绍了AWB算法的实现原理,包括基于色温估计的增益计算、R/G/B通道增益调整的硬件实现,以及AWB调试参数与色温曲线的标定方法。核心要点如下:
- 色温估计是AWB的基石,依赖于统计R/G和B/G比值与预置色温曲线的匹配。
- 增益计算以G通道为基准,R和B通道的增益由色温查表得到,需注意增益上限和钳位处理。
- 色温曲线需要针对具体传感器和镜头进行标定,调试参数包括色温区间、增益上限、统计窗口和收敛速度等。
- 实际调优中,应结合客观测试(Imatest)和主观评估,反复迭代直至达到目标精度。