自动曝光(AE)基础:曝光三角、直方图与经典控制策略
各位同学,欢迎来到第二章。今天咱们聊聊自动曝光(AE)的基础。说实话,AE 是 3A 里最“物理”的一个环节——它直接跟镜头、传感器打交道。我刚开始调 AE 的时候,总觉得不就是调个亮度嘛,后来才发现,这里面的坑,一个比一个深。
曝光三角:光圈、快门、ISO
曝光三角,说白了就是控制进光量的三个旋钮。你想想看,一张照片要亮起来,无非就是:进光的口子开多大(光圈)、进光的时间有多长(快门)、传感器对光的敏感度有多高(ISO)。
| 参数 | 物理含义 | 对亮度的影响 | 副作用 |
|---|---|---|---|
| 光圈(Aperture) | 镜头通光孔径的大小 | F 值越小,进光越多 | 景深变浅,边缘画质下降 |
| 快门(Shutter) | 传感器感光的时间长度 | 时间越长,进光越多 | 运动模糊,手持抖动 |
| ISO | 传感器信号的放大增益 | 增益越高,信号越亮 | 噪声爆炸,动态范围压缩 |
这里有个关键点:曝光三角不是独立工作的。你调了光圈,就得补偿快门或 ISO。我见过不少新手,为了压低 ISO 降噪,把快门拉得很长,结果拍出来的全是鬼影。嗯,这就是没理解三角的联动关系。
亮度直方图与目标亮度
直方图,是 AE 的眼睛。它统计了画面里每个亮度级别的像素数量。横轴是 0~255(8bit)或 0~1(归一化),纵轴是像素个数。
我个人习惯把直方图分成三个区:
- 暗区(0~85): 阴影细节,过暗就死黑一片。
- 中间区(86~170): 主体亮度,大部分场景的目标落在这里。
- 亮区(171~255): 高光细节,过亮就过曝,拉不回来。
目标亮度,就是 AE 想让直方图的“重心”落在哪个位置。比如室内人像,我一般把目标亮度设在 120~140(8bit),让肤色看起来通透。但如果是夜景,目标亮度就得降到 40~60,否则噪点全出来了。
AE 的经典控制策略
AE 的核心,就是让当前亮度 L_cur 逼近目标亮度 L_target。怎么逼近?业界有两种经典策略:爬山法和 PID。
爬山法(Hill Climbing)
爬山法,说白了就是“试错”。它先朝一个方向调整曝光参数,然后看亮度变化:
- 如果亮度变大了,说明方向对了,继续走。
- 如果亮度变小了,说明方向错了,掉头。
- 如果亮度不变或震荡,说明到顶了,停下来。
听起来简单对吧?但实际调起来,问题很多。我记得有一次在无人机项目里,爬山法在快速光照变化下,一直在来回震荡,根本收敛不了。为什么?因为爬山法没有“记忆”,它不知道之前走过哪条路。
- 优点:实现简单,不需要系统模型。
- 缺点:收敛慢,容易震荡,对噪声敏感。
PID 控制
PID 就聪明多了。它不光看当前误差(P),还看误差的变化趋势(D),以及误差的累积(I)。公式长这样:
output = Kp * error + Ki * ∫error dt + Kd * d(error)/dt
其中:
- P(比例): 当前亮度离目标有多远。误差大,就大步调;误差小,就小步调。
- I(积分): 消除稳态误差。比如一直偏暗,I 项会慢慢累积,直到把亮度拉回来。
- D(微分): 抑制震荡。如果亮度变化太快,D 项会“踩刹车”。
我个人的调参习惯是:先调 P,让系统能响应;再加 D,抑制过冲;最后加 I,消除静差。千万别一上来三个参数一起调,你会疯掉的。
两种策略的对比
| 维度 | 爬山法 | PID |
|---|---|---|
| 收敛速度 | 慢,依赖步长 | 快,可调参数多 |
| 抗噪声能力 | 弱,容易误判 | 强,D 项可滤波 |
| 实现复杂度 | 低,几行代码 | 中,需要调参经验 |
| 适用场景 | 光照稳定、低帧率 | 光照多变、高帧率 |
AE 控制流程图
下面这张图,是我自己总结的 AE 控制流程。你把它看懂了,后面调参就顺了。
这张图里有个关键点:阈值判断。为什么要加这个?因为如果误差很小,你还去调参数,画面就会一直微抖,看起来很不舒服。我一般把阈值设在 3~5 个灰度级(8bit),低于这个值,就认为亮度已经“够好了”。
- 曝光三角是 AE 的物理基础,调参时优先动快门和 ISO。
- 直方图是 AE 的眼睛,目标亮度要根据场景动态调整。
- 爬山法适合简单场景,PID 适合复杂场景。
- 加阈值判断,避免画面微抖。