1、3A算法全景概览:什么是AF、AE、AWB?它们在相机系统中的角色与关系
各位同学,欢迎来到这门实战课。
我是你们这门课的主讲。做了十几年图像算法,从功能机时代的小像素 sensor 一路折腾到现在的旗舰多摄系统。说实话,3A 算法是我觉得最「磨人」但又最有意思的一块。
为什么磨人?因为这三个家伙——AF、AE、AWB——它们不是各自为战,而是互相牵扯。你调好了曝光,对焦可能就偏了;你拉正了白平衡,亮度又可能闪一下。嗯,这就是我们今天要聊的核心:它们到底是什么,以及它们之间那点「剪不断理还乱」的关系。
1.1 先拆开看:AF、AE、AWB 各自在干什么
我们一个一个来。先别急着看公式,先理解它们要解决什么问题。
一句话总结:
- AF(自动对焦):让画面里你想拍的东西变清晰。
- AE(自动曝光):让画面不黑不白,亮度刚刚好。
- AWB(自动白平衡):让白色物体在任何光线下都看起来是白的。
1.1.1 AF(Auto Focus)—— 自动对焦
AF 的任务很简单:调整镜头位置,让被摄主体在 sensor 上成最清晰的像。
我个人习惯把对焦过程理解为「爬山」。你想想看,清晰度评价函数(比如 Tenengrad、Laplacian)就像一座山,焦点越准,函数值越高。AF 算法就是在山上找那个最高点。
常见的 AF 模式有几种:
- CDAF(反差对焦):通过图像本身的对比度来判断。精度高,但慢。我在做早期手机项目时,CDAF 在暗光下经常「拉风箱」,来回找半天。
- PDAF(相位对焦):通过 sensor 上专门的相位检测像素,一次算出偏移方向和距离。快,但受光线和纹理影响大。
- Hybrid AF(混合对焦):先用 PDAF 快速粗调,再用 CDAF 精调。现在的主流方案。
避坑指南:
我曾经在一个项目中,PDAF 的校准数据没做准,导致对焦总是偏一点点。后来花了整整一周排查,才发现是 sensor 出厂标定文件里的微透镜偏移量写错了。所以,做 AF 调优,第一步永远是确认硬件标定数据是干净的。
1.1.2 AE(Auto Exposure)—— 自动曝光
AE 控制的是进光量。它有三个杠杆:
- 曝光时间(Shutter):sensor 感光的时间长短。
- 模拟增益(Analog Gain):对 sensor 读出的电压信号进行放大。
- 数字增益(Digital Gain):对数字信号进行放大。
AE 的目标,是把场景的亮度映射到一个目标亮度值(Target Luma)。这个目标值通常用 8-bit 的 Y 值表示,比如 110~120(在 0~255 范围内)。
AE 算法里有个核心概念叫「测光模式」:
| 测光模式 | 特点 | 适用场景 |
|---|---|---|
| 全局测光 | 整幅画面平均 | 风景、均匀光照 |
| 中央重点 | 中心区域权重高 | 人像、主体居中 |
| 点测光 | 极小区域(1%~5%) | 逆光、舞台、高反差 |
| 矩阵/评价测光 | 分区加权,AI 参与 | 复杂场景,现代手机默认 |
说白了,AE 调优就是调这三个杠杆的配合节奏。调快了画面会闪烁,调慢了用户觉得卡顿。
1.1.3 AWB(Auto White Balance)—— 自动白平衡
AWB 解决的是「色温」问题。人眼有色彩恒常性,但 sensor 没有。在钨丝灯下(~2800K),白色物体拍出来是黄的;在阴天(~6500K),拍出来是蓝的。
AWB 算法要做的事:估计当前光源的色温,然后通过 R、G、B 通道的增益调整,把中性色(灰、白)拉回中性。
经典的 AWB 方法有:
- 灰度世界法(Gray World):假设场景中所有颜色的平均值是灰色。
- 完美反射法(Perfect Reflector):假设场景中最亮的点就是白色。
- 色温曲线法(Color Temperature Curve):在色温坐标系里画一条曲线,把统计到的 R/G、B/G 比值映射到色温上。
注意:
AWB 最怕的是「大色块场景」。比如你拍一片纯蓝色的天空,灰度世界法会认为场景偏蓝,然后拼命加红,结果天空变成了紫色。我遇到过最离谱的一次,是用户拍了一面红墙,AWB 直接崩了,画面变成了诡异的青灰色。后来我们在算法里加了「置信度判断」——当场景颜色过于单一且偏离中性色太远时,降低 AWB 的介入强度。
1.2 它们仨的关系:一个互相拉扯的三角
单独看每个算法都不难。难的是让它们三个在同一个系统里和谐工作。
我画了一张图,帮你理解它们之间的耦合关系:
你看,这个三角关系里,每一条边都是双向的:
- AF ↔ AE:对焦位置变了,画面的亮度分布就变了,AE 的统计窗口需要跟着动。反过来,AE 如果曝光不足,画面太暗,对比度下降,AF 的爬山曲线就变得很平,容易找不到焦点。
- AE ↔ AWB:曝光时间变了,sensor 输出的信噪比就变了,AWB 统计到的颜色信息质量也会变。更直接的是,AWB 的 R、G、B 增益会改变最终图像的亮度,这又反馈给了 AE。
- AF ↔ AWB:这个耦合相对弱一些,但依然存在。比如画面失焦时,边缘模糊,颜色会混在一起,AWB 统计到的色度信息就不准了。
1.3 系统层面的视角:3A 是一个状态机
在实际的相机系统中,3A 不是三个独立的线程各跑各的。它们共享同一个图像统计信息(Statistics),通常由 ISP(图像信号处理器)在每一帧的垂直消隐期(VBlank)计算好,然后分发给三个算法模块。
我习惯把 3A 系统看作一个有限状态机:
| 状态 | AF 行为 | AE 行为 | AWB 行为 |
|---|---|---|---|
| 启动/唤醒 | 快速扫描到大致位置 | 快速收敛到目标亮度 | 快速估计色温 |
| 稳定预览 | 微调或锁定 | 平滑跟踪亮度变化 | 平滑跟踪色温变化 |
| 场景切换 | 重新触发对焦 | 快速响应亮度突变 | 快速响应色温突变 |
| 拍照/录像 | 锁定焦点 | 锁定曝光 | 锁定白平衡 |
每个状态之间的切换,都需要精心设计「防抖」和「防闪」策略。说白了,就是不能让用户感觉到画面在「跳」。
我的经验:
调 3A 的时候,不要一上来就调参数。先花时间把 log 系统搭好。每一帧的 AF 评分、AE 目标亮度、AWB 色温估计值,全部打出来。然后对着实际场景的录像,一帧一帧看 log。你会发现很多问题在 log 里一目了然——比如 AE 在来回震荡,或者 AWB 在某个色温区间跳变。没有 log,你就是在盲调。
1.4 本章小结
今天我们搭了一个全景框架:
- AF 管清晰度,AE 管亮度,AWB 管颜色。
- 它们之间通过图像统计信息互相耦合,形成一个三角关系。
- 整个 3A 系统是一个状态机,不同状态下各模块的行为不同。
这个框架会贯穿我们后面的所有章节。后面每一章,我们都会深入一个具体的算法模块,讲它的原理、实现、调优方法,以及和另外两个模块的交互细节。
嗯,今天就到这里。记住这张图,后面的路就好走了。