1. 3A算法概述:自动对焦、自动曝光、自动白平衡
各位好,我是负责高通平台影像算法开发的工程师。今天咱们聊聊3A算法——这是手机拍照的基石。说白了,没有3A,你拍出来的照片要么糊、要么黑、要么偏色。
3A指的是三个自动控制模块:自动对焦(AF)、自动曝光(AE)、自动白平衡(AWB)。它们各管一摊,但又互相牵扯。我刚开始接触高通平台时,总觉得这三个东西是独立的,后来踩了不少坑才明白——它们是一个闭环系统。
1.1 自动对焦(AF)——让画面清晰
自动对焦的目标很简单:让镜头移动到合适位置,使拍摄主体清晰成像。高通平台支持多种对焦方案,我列个表给你看:
| 对焦类型 | 原理 | 高通平台典型应用 |
|---|---|---|
| 反差对焦(CDAF) | 通过图像对比度峰值寻找焦点 | 静态场景、低端传感器 |
| 相位对焦(PDAF) | 利用专用像素检测相位差 | 主流机型、快速对焦 |
| 激光对焦(TOF) | 发射激光测量距离 | 暗光辅助、近距离场景 |
| 混合对焦 | PDAF + CDAF 协同 | 高通骁龙8系平台标配 |
我在项目中遇到过一个问题:某款手机在暗光下对焦特别慢。查了半天,发现是PDAF像素的灵敏度不够,系统一直在CDAF模式下反复搜索。后来我调整了高通平台的AF策略——在低照度下提前切换到激光辅助模式,问题就解决了。
af_scan_step,它控制镜头搜索的步长。步长太大容易错过焦点,步长太小又慢。我一般建议在预览阶段用粗步长快速定位,拍照前再用细步长精调。
1.2 自动曝光(AE)——让亮度合适
自动曝光负责控制进光量。它有三个调节手段:曝光时间、模拟增益、数字增益。高通平台的AE引擎会按优先级依次调整这三个参数。
你想想看,为什么有时候拍夜景会模糊?因为曝光时间太长,手抖了。为什么有时候画面噪点很多?因为增益拉得太高了。
高通平台的AE策略通常遵循这样一个流程:
- 测光:将画面分成多个区域,计算每个区域的亮度值
- 权重分配:根据测光模式(中央重点、平均、点测光)给区域加权
- 目标亮度匹配:将加权后的亮度与目标值对比
- 参数调整:按曝光时间→模拟增益→数字增益的顺序调整
- 收敛判断:检查亮度是否在允许误差范围内
我曾经调试过一个HDR场景:逆光下人脸黑成一片。高通平台的AE默认用全局平均测光,背景太亮导致人脸欠曝。我改成了人脸检测区域优先的测光策略,效果立竿见影。
1.3 自动白平衡(AWB)——让颜色真实
自动白平衡的任务是消除光源颜色对画面的影响。人眼会自动适应不同色温,但摄像头不会。你想想看,在钨丝灯下拍的照片为什么发黄?因为传感器记录的色温偏低了。
高通平台的AWB算法主要做两件事:
- 色温估计:从图像中提取色温信息
- 颜色校正:调整R/G/B通道的增益,使白色物体呈现白色
常见的色温范围是这样的:
| 光源类型 | 色温(K) | 画面偏色 |
|---|---|---|
| 烛光 | 1500-2000 | 橙红 |
| 钨丝灯 | 2500-3500 | 黄 |
| 日光 | 5000-6500 | 白 |
| 阴天 | 6500-8000 | 蓝 |
| 蓝天阴影 | 8000-12000 | 深蓝 |
高通平台的AWB算法有一个“灰世界”假设——它认为场景中所有颜色的平均值是灰色。但这个假设在纯色场景下会失效。我记得有一次,用户拍了一片红色的花海,结果AWB把红色硬生生拉成了粉色。为什么?因为算法认为画面太红了,自动降低了R通道增益。
1.4 3A的相互关系——一个闭环系统
AF、AE、AWB不是各自为战的。它们之间互相影响,我画个图给你看:
从图中你能看到:
- AF影响AE:对焦区域决定了AE的测光权重。如果焦点在人脸上,AE会优先保证人脸亮度。
- AE影响AWB:曝光量改变后,图像的亮度分布变了,AWB的色温估计也会受影响。
- AWB影响AF:颜色信息可以帮助AF判断场景类型。比如绿色多可能是户外,AWB会调整色温,AF也会调整对焦策略。
说白了,3A是一个三角关系。高通平台通过一个统一的统计引擎来协调它们——ISP每帧都会输出亮度直方图、色温分布、对比度等统计信息,三个算法模块共享这些数据。
1.5 高通平台的3A架构特点
高通平台的3A算法跑在ISP(图像信号处理器)上,和CPU、GPU是分开的。这意味着3A的实时性很好——每帧都能做一次调整。我列一下高通平台3A的几个关键特点:
| 特点 | 说明 | 我的评价 |
|---|---|---|
| 硬件加速 | 统计信息由ISP硬件直接计算 | 省CPU,功耗低 |
| 多帧同步 | AE/AWB/AF可以跨帧协同 | 减少震荡,收敛快 |
| 参数可配置 | 通过XML/JSON文件调整策略 | 调试方便,不用改代码 |
| 场景自适应 | 内置多种场景模式(夜景、人像、运动) | 自动切换,省心 |
嗯,这里要注意一点:高通平台的3A参数文件通常放在/vendor/etc/camera/目录下,不同项目改起来很方便。我一般会先跑一遍高通自带的3A调试工具,看看默认参数的表现,再针对性地调整。