3. AE算法核心:测光模式、曝光补偿与收敛策略
自动曝光(AE)是3A算法里最基础、也最容易被忽视的一环。说白了,它要解决的就是一个问题:当前场景到底该用多少曝光量。我见过不少团队,AE调得马马虎虎,结果AWB和AF再怎么调也救不回来——底子没打好。
这一章,我们聚焦三个核心模块:测光模式、曝光补偿、收敛策略。它们共同决定了AE的“感知-决策-执行”链路。
3.1 测光模式:相机如何“看”场景
测光模式决定了传感器采集到的亮度数据如何被加权统计。不同的模式,本质上是不同的空间权重分布。
3.1.1 平均测光
最简单粗暴的方式。全画面每个像素的权重相同,直接取平均亮度作为场景亮度。
- 适用场景:光照均匀的场景,比如阴天、室内均匀照明。
- 缺点:一旦画面中有大面积亮区或暗区(比如逆光人像),平均测光就会翻车——背景过亮,人脸欠曝。
3.1.2 中央重点测光
给画面中心区域更高的权重,边缘区域权重递减。这是早期相机最常用的模式,也是从胶片时代继承下来的思路——默认主体在画面中央。
- 权重分布:通常中心60%-80%区域占主导,边缘贡献很小。
- 适用场景:主体居中的肖像、静物拍摄。
- 局限:主体一旦偏离中心,测光就偏了。
我记得有一次调试行车记录仪,默认用了中央重点测光。结果车辆转弯时,画面中心从路面切换到天空,曝光瞬间跳变,画面闪得厉害。后来改成了带空间平滑的加权模式才解决。
3.1.3 点测光
只取画面中一个极小区域(通常1%-5%)的亮度作为曝光依据。这是最“极端”的测光方式。
- 适用场景:舞台追光、逆光人像(对人脸点测)、高反差艺术摄影。
- 风险:测光点选错,整个画面就废了。
3.1.4 三种模式对比
| 测光模式 | 权重分布 | 典型场景 | 抗干扰能力 | 实现复杂度 |
|---|---|---|---|---|
| 平均测光 | 全画面均匀 | 均匀光照 | 低 | 低 |
| 中央重点 | 中心高、边缘低 | 居中主体 | 中 | 中 |
| 点测光 | 极小区域 | 高反差、追光 | 高(但依赖选点) | 中 |
3.2 曝光补偿:给AE一个“偏移量”
测光模式算出来的亮度,不一定是你想要的。比如拍雪景,自动曝光会把雪拍成灰色——因为AE认为平均亮度应该是18%灰。这时候就需要曝光补偿。
曝光补偿的本质是:在AE计算出的目标亮度上,叠加一个用户或算法指定的偏移量。
- 单位:EV(Exposure Value),1 EV 对应亮度翻倍或减半。
- 范围:通常 -3 EV 到 +3 EV,步长 1/3 EV。
- 实现方式:直接修改AE的目标亮度值,或者调整曝光时间/增益/光圈三者的组合。
我习惯把曝光补偿分为两类:
- 用户手动补偿:用户通过UI滑动条调整,直接写入AE参数。
- 算法自动补偿:比如人脸检测到背光时,算法自动加 +0.7 EV 到 +1.0 EV。这个在手机端很常见。
3.3 AE收敛策略:从“当前值”到“目标值”的路径
测光模式给出了“目标亮度”,曝光补偿修正了它。接下来AE要做的,就是让实际亮度收敛到这个目标值。怎么收敛?这就是策略问题。
3.3.1 收敛的本质
AE收敛是一个闭环控制过程:
- 采集当前帧的亮度统计值。
- 与目标亮度比较,计算误差。
- 根据误差调整曝光参数(曝光时间、模拟增益、数字增益、光圈)。
- 下一帧重复。
说白了,就是一个PID控制器——只不过被控对象是曝光参数,反馈量是画面亮度。
3.3.2 常见的收敛策略
| 策略 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 一步到位 | 根据误差直接计算目标参数 | 收敛快 | 容易过冲、振荡 |
| 渐进式 | 每次只调整一小步 | 稳定、平滑 | 收敛慢 |
| 混合式 | 大误差时一步到位,小误差时渐进 | 兼顾速度和稳定 | 实现复杂 |
我个人最推荐混合式。原因很简单:用户从暗室走到阳光下,你如果渐进式慢慢调,画面要花好几秒才亮起来,用户早就不耐烦了。但如果在稳定光照下频繁微调,一步到位又会导致画面闪烁。
3.3.3 收敛速度与平滑度的权衡
这里有个绕不开的矛盾:收敛快 = 容易闪,收敛慢 = 反应迟钝。
- 帧间跳变限制:限制每帧曝光参数的最大变化量。比如曝光时间每次最多变化 30%。
- 时域滤波:对亮度统计值或目标参数做低通滤波。我常用一阶IIR,系数 0.3~0.5。
- 死区控制:误差小于某个阈值时,不调整参数。避免在目标值附近来回振荡。
3.4 核心流程图:AE算法链路
下面这张图把测光、补偿、收敛串起来了。你可以看到数据是怎么从传感器一路流到曝光参数更新的。
3.5 工程落地中的几个关键细节
理论说完了,聊点实际的。AE在嵌入式平台上落地,有几个坑是绕不开的。
3.5.1 曝光参数的优先级与切换
曝光时间、模拟增益、数字增益,这三者的调节优先级直接影响画质。
- 优先调曝光时间:保证信噪比,但要注意运动模糊。快门太慢,运动物体就糊了。
- 再调模拟增益:模拟增益放大的是传感器原始信号,噪声相对可控。
- 最后调数字增益:数字增益放大的是量化后的信号,噪声会被一起放大。能不用就不用。
我习惯设定一个曝光时间上限(比如 30ms,对应 33fps 的帧率上限)。超过这个上限还没达到目标亮度,才开始拉模拟增益。模拟增益到上限(通常 8x~16x),再拉数字增益。
3.5.2 场景切换检测
AE最怕的不是慢,而是不该动的时候乱动。比如用户拿着手机从室内走到窗边,AE应该快速响应。但如果只是画面中有人走动,AE不应该跟着跳。
解决方案:
- 亮度变化幅度检测:连续多帧的亮度变化超过阈值,才认为是场景切换。
- 直方图变化检测:比平均亮度更鲁棒。直方图分布变了,才是真正的场景变化。
- 运动检测辅助:如果画面中有大量运动,AE暂时冻结,避免追着运动物体调曝光。
3.5.3 收敛速度的自适应
前面说了混合式策略。具体实现时,我习惯这样分档:
| 误差范围 | 收敛步长 | 行为描述 |
|---|---|---|
| |误差| > 2 EV | 一步到位 | 直接计算目标参数,快速响应大变化 |
| 1 EV < |误差| ≤ 2 EV | 大步长(50%/帧) | 快速逼近,但不过冲 |
| 0.3 EV < |误差| ≤ 1 EV | 小步长(20%/帧) | 精细调节,避免振荡 |
| |误差| ≤ 0.3 EV | 不调整(死区) | 稳定状态,不做无谓调节 |
这个分档不是固定的。你想想看,不同场景对收敛速度的要求不一样——视频会议可以慢一点,但运动相机必须快。所以这些阈值最好做成可配置的,甚至根据场景自动切换。
3.6 小结
AE的核心就三件事:怎么测光、怎么补偿、怎么收敛。测光模式决定了AE“看”什么,曝光补偿告诉AE“要什么”,收敛策略决定了AE“怎么去”。三者缺一不可。
在实际工程中,AE的调优往往是一个反复试错的过程。没有一套参数能通吃所有场景。我的建议是:先把基础链路跑通,然后用大量真实场景数据去调参,最后加上场景自适应逻辑。别指望一次搞定——AE的调优,说白了就是跟光照较劲。