2. 自动曝光(AE)基础理论:曝光三要素与核心指标

自动曝光,说白了就是让摄像头帮你决定“进多少光”。

我刚开始做ISP时,觉得AE不就是调调亮度嘛,有啥难的?后来在项目中踩了无数坑,才明白这玩意儿的水有多深。今天咱们就把AE的底裤扒干净。

2.1 曝光三要素:光圈、快门、增益

这三兄弟共同决定了最终图像的亮度。你可以把它们想象成一个水龙头:

  • 光圈(Aperture):水管粗细。越大,单位时间进水量越多。
  • 快门(Shutter):开水龙头的时间。越长,总进水量越多。
  • 增益(Gain/ISO):在水里加浓缩剂。信号放大了,但杂质(噪声)也跟着放大。

在嵌入式平台上,光圈通常是固定的(手机摄像头基本都是固定光圈)。所以我们真正能调的,主要是快门和增益。

核心公式(简化版):

图像亮度 ∝ 光圈 × 快门时间 × 增益

实际工程中,我们更常用对数域来表示:
EV = log2(F² / T) + G_offset

这里有个坑——曝光值(EV)。EV每增加1,亮度翻倍。但EV只描述了光圈和快门的组合,没考虑增益。我见过不少新手把EV和最终亮度直接划等号,结果调了半天发现增益没算进去,画面噪点炸裂。

2.2 曝光值与亮度的关系

曝光值(EV)和最终图像亮度之间,不是简单的线性关系。

为什么?因为传感器有响应曲线。你想想看,把快门从1ms调到2ms,亮度确实翻倍了。但从100ms调到101ms,亮度几乎没变化。这就是传感器的非线性区。

我习惯把整个链路拆成三段来看:

阶段 输入 输出 关系
光学阶段 场景亮度 传感器照度 线性(光圈决定)
电学阶段 传感器照度 原始数字值 近似线性(快门+增益)
ISP阶段 原始数字值 最终图像亮度 非线性(Gamma/色调映射)

所以,AE算法真正要控制的,是传感器输出的原始数字值,而不是最终你看到的图像亮度。这个区别很重要。

避坑指南:

我曾经在项目中直接用最终图像的Y分量做AE反馈,结果发现画面忽明忽暗。查了两天才意识到——Gamma曲线把亮度映射关系搞复杂了。从那以后,我所有AE算法都基于RAW域的统计值来做。

2.3 AE的目标与评价指标

AE到底要达成什么?三个字:准、快、稳。

2.3.1 目标亮度(Target Brightness)

这是AE的“准”。我们需要把图像亮度锁定在某个目标值上。

目标亮度怎么定?一般用平均亮度或加权平均亮度。我常用的做法是:

  • 对画面分块(比如15×15网格)
  • 每块计算平均亮度
  • 中心区域权重高,边缘权重低
  • 加权求和得到最终统计值

目标值通常设在128左右(8位数据),但这不是死的。暗光场景下,我习惯把目标调低到100左右,避免增益过高导致噪声爆炸。

2.3.2 收敛速度(Convergence Speed)

这是AE的“快”。从当前亮度调整到目标亮度,需要多少帧?

收敛速度太慢,用户体验极差——你想想看,拿着手机从暗处走到亮处,画面要花两三秒才稳定,这谁受得了?

但收敛速度也不是越快越好。我见过一些方案,一帧就跳到目标值,结果画面像抽风一样来回震荡。

我的经验:

收敛速度控制在5-10帧完成90%的调整比较合理。具体要看场景变化幅度:

  • 小幅度变化(< 2EV):3-5帧收敛
  • 中等变化(2-4EV):5-8帧收敛
  • 大幅度变化(> 4EV):8-15帧收敛

2.3.3 稳定性(Stability)

这是AE的“稳”。画面稳定后,不能出现周期性闪烁或抖动。

稳定性问题通常来自两个地方:

  1. 统计噪声:传感器噪声导致每帧统计值有波动
  2. 控制震荡:反馈环路参数不合适,导致过冲

我处理稳定性的三板斧:

  • 时域滤波:对统计值做IIR滤波,α系数取0.3-0.5
  • 死区设置:误差在±3以内不调整
  • 步长限制:单次调整不超过0.5EV

2.4 三要素的权衡与选择策略

光圈、快门、增益,怎么搭配?这里有个优先级问题。

我个人的策略是:

  1. 先调快门:保证运动物体不模糊的前提下,尽量用慢快门
  2. 再调增益:快门到上限了还不够亮,才加增益
  3. 光圈基本不动:固定光圈方案,动不了

为什么先调快门?因为快门影响的是曝光时间,不引入额外噪声。增益每增加6dB,信噪比就下降6dB。你想想看,这代价多大。

快门上限的确定:

快门最慢不能低于1/帧率。比如30fps,快门最慢1/30s。但实际中要考虑卷帘快门效应,我一般留20%余量,设到1/36s左右。

另外,如果场景中有运动物体,快门还要更快。我常用的经验值:

  • 静止场景:1/30s
  • 室内走动:1/60s
  • 户外运动:1/120s以上

2.5 知识体系总览

下面这张图把AE的核心逻辑串起来了。我建议你多看几遍,理解每个模块之间的依赖关系。

自动曝光(AE)知识体系 场景亮度输入 曝光三要素 光圈 (Aperture) 快门 (Shutter) 增益 (Gain/ISO) 传感器响应 → RAW域统计值 AE三大评价指标 目标亮度 (准) 收敛速度 (快) 稳定性 (稳) 最终曝光参数输出

2.6 实战中的常见问题

最后,分享几个我在项目中踩过的坑:

问题1:50Hz/60Hz闪烁

在室内灯光下,快门时间必须是工频周期的整数倍。50Hz地区用1/50、1/100;60Hz地区用1/60、1/120。否则画面会闪烁。我曾经在印度项目上忘了切换配置,结果客户投诉说画面像迪斯科舞厅。

问题2:AE与AWB的耦合

自动白平衡(AWB)和AE会互相影响。AWB调整增益时,会改变亮度统计值。我的做法是:先固定AWB跑AE,AE稳定后再跑AWB,交替进行。

问题3:低光下的增益上限

增益不是无限加的。我一般设上限为12dB(约4倍)。超过这个值,噪声会严重破坏画质。这时候宁可降低帧率,也不要硬加增益。

嗯,AE的基础理论就这些。记住三个关键词:准、快、稳。后面我们会深入AE的算法实现,到时候这些理论都会用上。