1. 3A算法全景概览
各位好,我是老张。做ISP算法这行十几年了,今天咱们聊聊3A算法。很多人一听到AE、AF、AWB就觉得头大,其实说白了,这三个东西就是摄像头自己学会「看世界」的基础。
你想想看,手机拍照为什么能自动调亮度?为什么能对上焦?为什么在不同灯光下颜色还准?背后就是这三个算法在干活。我刚开始做这行的时候,也以为3A是三个独立模块,后来踩了不少坑才明白——它们仨是绑在一起的。
1.1 什么是3A算法
3A是三个英文缩写:
- AE(Auto Exposure)——自动曝光。控制进光量,让画面不暗不亮。
- AF(Auto Focus)——自动对焦。让主体清晰,背景该虚化就虚化。
- AWB(Auto White Balance)——自动白平衡。纠正色偏,让白色在不同光源下还是白色。
这三个东西,任何一个出问题,图像质量就崩了。我记得有一次项目,AE收敛速度慢了半拍,结果预览画面忽明忽暗,客户直接说「这摄像头是不是坏了」。
核心观点:3A不是三个独立模块,而是一个闭环系统。AE管亮度,AF管清晰度,AWB管颜色。三者互相影响,牵一发而动全身。
1.2 3A在ISP Pipeline中的位置
ISP(Image Signal Processor)的pipeline很长,从sensor raw数据进来,到最后输出YUV或RGB,中间有几十个模块。3A算法不在pipeline的固定位置上,而是「旁路」——它读取图像统计信息,然后反馈控制其他模块。
我画了一张图,你看一眼就明白了:
从图上你能看到,3A算法是「站在旁边看,然后指挥别人干活」的角色。它不处理像素,但决定了像素怎么被处理。
个人经验:我在调试AE的时候,经常发现AWB也跟着变。为什么?因为曝光变了,统计窗口内的颜色分布也变了,AWB就得重新算。所以调3A一定要三个一起看,别一个一个调。
1.3 3A算法的协同工作逻辑
这三个算法不是各干各的。它们共享同一份统计信息,互相有约束关系。我列个表,你一看就清楚:
| 算法 | 控制对象 | 依赖的统计信息 | 受谁影响 |
|---|---|---|---|
| AE | 曝光时间、模拟增益、数字增益、光圈 | 亮度直方图、平均亮度、区域亮度 | AF(对焦清晰度影响亮度统计) |
| AF | 镜头位置、焦距 | 对比度统计、相位差信息 | AE(曝光不足时对比度统计不准) |
| AWB | R/G/B通道增益 | 色温估计、R/G/B统计 | AE(曝光饱和时颜色统计失效) |
你看这个表,每个算法都不是独立的。举个例子:
- AE影响AWB:曝光过度导致高光饱和,R/G/B通道都到顶了,AWB算不出真实色温。我遇到过这种情况,拍出来的白色偏紫,怎么调都调不回来——后来发现是曝光太亮了。
- AF影响AE:对焦不准的时候,画面模糊,亮度统计会偏低。AE以为场景暗了,就增加曝光,结果对焦准了之后画面又过曝。
- AWB影响AE:这个影响小一些,但AWB调整增益后,整体亮度会微变,AE需要做二次补偿。
避坑指南:我曾经在一个项目中,AE和AWB的收敛速度不匹配。AE每秒调30次,AWB每秒只调5次。结果AWB还没算完,AE又变了,画面一直在「亮→偏色→调色→暗→再亮」的循环里震荡。后来我把AE的收敛速度降下来,让AWB先稳定,问题才解决。
1.4 3A算法的典型工作流程
一个典型的3A工作流程是这样的:
- 采集统计信息:ISP从当前帧中提取亮度直方图、对比度值、R/G/B分量均值等。
- AE计算:根据目标亮度,计算下一帧需要的曝光时间和增益。
- AWB计算:根据色温估计,计算R/G/B通道的校正增益。
- AF计算:根据对比度或相位差,计算镜头移动方向和步长。
- 参数下发:将计算结果写入sensor寄存器或ISP寄存器。
- 等待下一帧:重复步骤1-5,直到所有指标收敛。
这里有个关键点:收敛速度。调得太快,画面会抖动;调得太慢,用户觉得卡顿。我一般建议AE在5-10帧内收敛,AWB在10-15帧内收敛,AF在15-30帧内收敛(取决于镜头行程)。
核心原则:3A调优的本质是「在收敛速度和稳定性之间找平衡」。快不一定好,稳才是王道。