1. 3A算法概述:自动对焦、自动曝光、自动白平衡

各位好,我是负责高通平台影像算法开发的工程师。今天咱们聊聊3A算法——这是手机拍照的基石。说白了,没有3A,你拍出来的照片要么糊、要么黑、要么偏色。

3A指的是三个自动控制模块:自动对焦(AF)、自动曝光(AE)、自动白平衡(AWB)。它们各管一摊,但又互相牵扯。我刚开始接触高通平台时,总觉得这三个东西是独立的,后来踩了不少坑才明白——它们是一个闭环系统。

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

自动对焦的目标很简单:让镜头移动到合适位置,使拍摄主体清晰成像。高通平台支持多种对焦方案,我列个表给你看:

对焦类型 原理 高通平台典型应用
反差对焦(CDAF) 通过图像对比度峰值寻找焦点 静态场景、低端传感器
相位对焦(PDAF) 利用专用像素检测相位差 主流机型、快速对焦
激光对焦(TOF) 发射激光测量距离 暗光辅助、近距离场景
混合对焦 PDAF + CDAF 协同 高通骁龙8系平台标配

我在项目中遇到过一个问题:某款手机在暗光下对焦特别慢。查了半天,发现是PDAF像素的灵敏度不够,系统一直在CDAF模式下反复搜索。后来我调整了高通平台的AF策略——在低照度下提前切换到激光辅助模式,问题就解决了。

我的经验:高通平台的AF算法有一个关键参数叫af_scan_step,它控制镜头搜索的步长。步长太大容易错过焦点,步长太小又慢。我一般建议在预览阶段用粗步长快速定位,拍照前再用细步长精调。

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

自动曝光负责控制进光量。它有三个调节手段:曝光时间、模拟增益、数字增益。高通平台的AE引擎会按优先级依次调整这三个参数。

你想想看,为什么有时候拍夜景会模糊?因为曝光时间太长,手抖了。为什么有时候画面噪点很多?因为增益拉得太高了。

高通平台的AE策略通常遵循这样一个流程:

  1. 测光:将画面分成多个区域,计算每个区域的亮度值
  2. 权重分配:根据测光模式(中央重点、平均、点测光)给区域加权
  3. 目标亮度匹配:将加权后的亮度与目标值对比
  4. 参数调整:按曝光时间→模拟增益→数字增益的顺序调整
  5. 收敛判断:检查亮度是否在允许误差范围内

我曾经调试过一个HDR场景:逆光下人脸黑成一片。高通平台的AE默认用全局平均测光,背景太亮导致人脸欠曝。我改成了人脸检测区域优先的测光策略,效果立竿见影。

注意:高通平台的AE有一个“防闪烁”机制。如果你在荧光灯环境下拍照,曝光时间必须是50Hz或60Hz的整数倍,否则画面会出现明暗条纹。这个坑我踩过——有一次客户投诉画面闪烁,我查了半天才发现是AE没锁定曝光时间。

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

自动白平衡的任务是消除光源颜色对画面的影响。人眼会自动适应不同色温,但摄像头不会。你想想看,在钨丝灯下拍的照片为什么发黄?因为传感器记录的色温偏低了。

高通平台的AWB算法主要做两件事:

  • 色温估计:从图像中提取色温信息
  • 颜色校正:调整R/G/B通道的增益,使白色物体呈现白色

常见的色温范围是这样的:

光源类型 色温(K) 画面偏色
烛光 1500-2000 橙红
钨丝灯 2500-3500 黄
日光 5000-6500 白
阴天 6500-8000 蓝
蓝天阴影 8000-12000 深蓝

高通平台的AWB算法有一个“灰世界”假设——它认为场景中所有颜色的平均值是灰色。但这个假设在纯色场景下会失效。我记得有一次,用户拍了一片红色的花海,结果AWB把红色硬生生拉成了粉色。为什么?因为算法认为画面太红了,自动降低了R通道增益。

核心要点:AWB的难点在于“场景识别”。高通平台通过统计色温分布和颜色饱和度来判断当前场景,然后选择对应的校正矩阵。如果场景识别错了,颜色就全歪了。

1.4 3A的相互关系——一个闭环系统

AF、AE、AWB不是各自为战的。它们之间互相影响,我画个图给你看:

3A算法闭环关系图 自动对焦 (AF) 镜头位置 → 清晰度 自动曝光 (AE) 曝光时间/增益 → 亮度 自动白平衡 (AWB) 色温估计 → 颜色 对焦区域 亮度信息 颜色信息辅助场景识别 相互影响示例 AE调整亮度 → 影响AWB色温估计 → 影响AF对比度计算 场景识别 3A共享场景标签 统计信息 共用ISP统计引擎 参数耦合 增益/帧率互相约束

从图中你能看到:

  • AF影响AE:对焦区域决定了AE的测光权重。如果焦点在人脸上,AE会优先保证人脸亮度。
  • AE影响AWB:曝光量改变后,图像的亮度分布变了,AWB的色温估计也会受影响。
  • AWB影响AF:颜色信息可以帮助AF判断场景类型。比如绿色多可能是户外,AWB会调整色温,AF也会调整对焦策略。

说白了,3A是一个三角关系。高通平台通过一个统一的统计引擎来协调它们——ISP每帧都会输出亮度直方图、色温分布、对比度等统计信息,三个算法模块共享这些数据。

调试建议:我在优化3A性能时,习惯先调AE,再调AWB,最后调AF。为什么?因为AE决定了画面的基础亮度,亮度不对,AWB和AF的统计都会偏。你想想看,一张过曝的照片,颜色信息都丢失了,AWB怎么估计色温?

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

高通平台的3A算法跑在ISP(图像信号处理器)上,和CPU、GPU是分开的。这意味着3A的实时性很好——每帧都能做一次调整。我列一下高通平台3A的几个关键特点:

特点 说明 我的评价
硬件加速 统计信息由ISP硬件直接计算 省CPU,功耗低
多帧同步 AE/AWB/AF可以跨帧协同 减少震荡,收敛快
参数可配置 通过XML/JSON文件调整策略 调试方便,不用改代码
场景自适应 内置多种场景模式(夜景、人像、运动) 自动切换,省心

嗯,这里要注意一点:高通平台的3A参数文件通常放在/vendor/etc/camera/目录下,不同项目改起来很方便。我一般会先跑一遍高通自带的3A调试工具,看看默认参数的表现,再针对性地调整。