1. 3A算法全景概览:AF、AE、AWB的基本原理与协同工作关系

各位好,我是老张。在高通平台摸爬滚打了快十年,今天咱们聊聊3A算法。说白了,3A就是摄像头成像的三大护法——自动对焦(AF)、自动曝光(AE)、自动白平衡(AWB)。

你想想看,一部手机拍照,按下快门那一瞬间,镜头要快速对上焦、画面亮度要合适、颜色要真实。这三件事,就是3A干的活。它们不是各干各的,而是互相配合、互相制约。我见过不少团队,单个算法调得挺好,一合起来就崩了。为什么?因为没搞懂它们之间的“三角关系”。

核心观点:3A不是三个独立模块,而是一个闭环系统。AF决定清晰度,AE决定亮度,AWB决定色彩。三者协同,才能输出一张“看着舒服”的照片。

3A算法协同工作关系图 图像传感器 自动对焦 AF 自动曝光 AE 自动白平衡 AWB ISP图像处理 对焦驱动 曝光控制 原始数据 RAW数据 清晰度反馈 色彩反馈 AF、AE、AWB通过ISP反馈形成闭环:传感器采集 → ISP处理 → 算法反馈 → 传感器调整 三者必须协同调优,单独优化某一项往往会导致整体效果下降

1.1 自动对焦(AF)——让画面清晰

AF的任务很简单:让镜头移动到合适位置,使拍摄主体清晰。但实现起来,门道不少。

高通Spectra平台主要支持三种对焦方式:

对焦类型 原理 优点 缺点
反差对焦(CDAF) 通过图像对比度峰值判断合焦 精度高,硬件成本低 速度慢,会“拉风箱”
相位对焦(PDAF) 利用像素对相位差计算偏移量 速度快,一次到位 弱光下精度下降
激光/ToF对焦 发射激光/红外测量距离 暗光下表现好 有效距离短,功耗高

我个人习惯,在调高通平台时,优先用PDAF做粗调,再用CDAF做微调。这样既快又准。我曾经在一个项目中,只开了PDAF,结果暗光下对焦老是飘。后来加了CDAF做二次确认,问题就解决了。

调优小技巧:高通Spectra的AF算法里有个“对焦窗口”参数。别傻傻地用全图对焦。我一般把窗口设在画面中央偏上区域——因为拍照主体通常在那里。窗口太大,背景干扰多;窗口太小,容易跟丢目标。

1.2 自动曝光(AE)——让亮度合适

AE控制三个东西:曝光时间、模拟增益、数字增益。说白了,就是决定进多少光、放大多大倍数。

高通平台的AE算法核心是“目标亮度”和“权重矩阵”。目标亮度就是你希望画面多亮,权重矩阵决定画面哪些区域更重要。

举个例子:拍人脸时,人脸区域的权重应该高一些。如果背景很亮,人脸很暗,AE会优先保证人脸曝光正常。背景过曝?没关系,人脸清楚就行。

注意:AE和AF有冲突!对焦过程中,镜头移动会导致进光量变化,AE会误以为场景亮度变了,跟着调整曝光参数。结果就是画面忽明忽暗。高通平台有个“AE-AF锁定”机制,我建议在对焦期间把AE锁住,对焦完成再释放。

我记得有一次调试夜景模式,AE老是过曝。查了半天,发现是数字增益给得太高了。数字增益虽然能提亮,但噪声也会被放大。后来我限制了最大数字增益,改用更长的曝光时间,效果就好多了。

1.3 自动白平衡(AWB)——让颜色真实

AWB解决的是“色温”问题。人眼很聪明,不管在日光灯下还是白炽灯下,看白纸都是白的。但摄像头不行,它需要算法来校正。

高通Spectra的AWB算法,说白了就是做两件事:

  1. 色温估计:从图像中找出“灰色区域”,估算当前光源色温
  2. 颜色校正:根据色温值,调整R/G/B通道增益

这里有个坑——如果画面里没有白色物体,AWB就容易翻车。比如拍一片红枫叶,算法会以为场景偏红,拼命加蓝色,结果叶子变成紫色了。

实战经验:我在调AWB时,会先看“色温曲线”是否平滑。高通平台有个AWB统计模块,可以输出R/G和B/G的比值分布。如果分布太散,说明场景复杂,需要调整AWB的置信度阈值。别让算法在不确定的情况下乱改颜色。

1.4 三角协同——3A的“相爱相杀”

3A不是三个独立模块,它们互相影响。我画个表格,你看看它们之间的耦合关系:

耦合关系 影响方式 典型问题
AF → AE 对焦时镜头移动改变进光量 画面闪烁、曝光抖动
AE → AWB 曝光变化影响颜色统计 亮度突变时颜色跳变
AWB → AE 颜色增益影响亮度计算 色温变化时亮度波动
AF → AWB 对焦位置改变画面色彩分布 对焦前后颜色不一致

你想想看,如果AF在动、AE也在调、AWB还在算,三个环路同时工作,系统很容易振荡。高通Spectra的解决方案是“优先级调度”——通常AE优先级最高,AF次之,AWB最后。但具体怎么配,得看场景。

我的调优顺序:先单独调好每个算法,再联调。联调时,我会先固定AE和AWB,只调AF;然后固定AF和AWB,只调AE;最后固定AF和AE,只调AWB。等三个都稳了,再放开所有环路。这样出问题的概率小很多。

1.5 高通Spectra平台的3A架构特点

高通Spectra的3A算法跑在ISP内部,和硬件紧密耦合。它的优势是延迟低、效率高。但缺点也很明显——调试工具链复杂,参数多到让人头大。

我记得第一次接触高通平台时,光3A参数就有200多个。什么AF_THRESHOLD、AE_TARGET_LUMA、AWB_CT_GAIN...看得眼花缭乱。后来摸清了门道,其实核心参数就那么十几个,其他的保持默认就行。

高通平台3A的典型处理流程:

  • Sensor输出RAW图 → ISP接收
  • ISP做Bayer处理 → 输出统计信息给3A
  • 3A算法计算 → 生成控制参数
  • 参数写回Sensor和ISP → 调整下一帧

这个闭环每帧都在跑,速度很快。高通Spectra 480 ISP可以做到30fps下每帧都做3A计算,延迟控制在1帧以内。

避坑指南:我曾经在调试时发现,3A参数写回Sensor后,要等2-3帧才能稳定。如果算法太激进,每帧都大幅调整,画面就会来回振荡。解决方案是加“阻尼”——每次调整量不超过上一帧的20%。这样收敛慢一点,但稳定很多。