2. 自动曝光(AE)基础:曝光三角与工程落地

自动曝光,说白了就是让摄像头在任何光线下都能拍出「看得清」的画面。我做了这么多年 ISP,见过太多 AE 翻车的案例——要么画面忽亮忽暗像呼吸灯,要么暗部噪点炸裂。今天咱们就把 AE 的底牌翻出来看看。

2.1 曝光三角:光圈 / 快门 / 增益

曝光量由三个参数共同决定,这就是经典的曝光三角。在手机摄像头这种固定光圈模组里,其实只剩快门和增益两个自由度。但理解三角关系,是做 AE 算法的基础。

参数 物理含义 对图像的影响 工程限制
光圈 (Aperture) 进光孔大小,F 值越小进光越多 景深、进光量 手机多为固定 F1.6~F2.4
快门 (Shutter) 传感器曝光时间,单位 ms 亮度、运动模糊 最大受帧率限制,最小受闪烁抑制
增益 (Gain) 模拟/数字放大倍数 亮度、噪声 过高会炸噪点

核心公式: 曝光量 ∝ (1/F²) × 曝光时间 × 增益

增益每翻一倍,信噪比下降约 6dB。这就是为什么我总跟算法团队说:优先调快门,最后动增益。

2.2 AE 目标:亮度与信噪比的博弈

AE 不是单纯把画面变亮。它的目标有两个,而且经常打架:

  • 亮度目标: 通常用 Y 通道均值或直方图百分比来衡量。比如目标亮度设为 120(8bit 范围),或者让直方图主峰落在 100~150 区间。
  • 信噪比目标: 增益越低,噪声越少。但低增益意味着需要更长的曝光时间,容易拍糊。

我在项目中遇到过一个问题:某款手机在室内灯光下,AE 把增益拉到 8x 来保证 30fps 的亮度。结果画面噪点像雪花一样。后来我们加了 SNR 约束——增益超过 4x 时,强制降低帧率来换取更长的曝光时间。

我的经验: 亮度目标不是死的。暗光场景下,我习惯把目标亮度从 120 降到 80。虽然画面暗一点,但噪点少很多,人眼反而觉得更「干净」。

2.3 AE 收敛速度与稳定性

AE 算法本质上是一个闭环控制系统。传感器输出图像,ISP 统计亮度,算法调整曝光参数,然后下一帧继续。这里有两个关键指标:

  • 收敛速度: 从场景切换到达标需要多少帧。太快会 overshoot,太慢用户觉得卡顿。
  • 稳定性: 稳定后画面是否闪烁。我见过最离谱的案例——AE 在 2 帧内来回跳,画面像在「呼吸」。

为什么会这样?因为增益和快门对亮度的响应是非线性的。增益调 1 档,亮度变化可能很大;快门调 1 档,变化可能很小。如果 PID 参数没调好,系统就会震荡。

避坑指南: 我曾经在某个项目里直接用固定步长调曝光,结果在室内灯光下 AE 来回震荡。后来改成自适应步长——误差大时大步调,误差小时微调。收敛速度提升了 40%,稳定性也好了。

2.4 AE 工程落地的核心流程

下面这张图是我在多个项目中沉淀下来的 AE 处理流程。它把曝光三角、目标约束和收敛控制串在了一起。

AE 工程落地核心流程 传感器 RAW 数据 ISP 统计 (Y 均值/直方图) 亮度误差计算 SNR / 帧率 / 闪烁约束 自适应步长调参 更新曝光参数 反馈闭环 关键约束优先级 1. 闪烁抑制 (50Hz/60Hz) 2. 帧率下限 (≥15fps) 3. 增益上限 (≤4x)

2.5 自适应步长调参策略

收敛速度和稳定性是一对矛盾。我常用的策略是分段自适应:

  1. 大误差区(亮度误差 > 30%): 大步调,每次调整 2~3 档曝光。目标是快速接近目标。
  2. 中误差区(10% ~ 30%): 中步调,每次 1 档。避免 overshoot。
  3. 小误差区(< 10%): 微步调,每次 0.3~0.5 档。保证稳定性。

代码片段:自适应步长计算

// 输入:当前亮度 cur_luma,目标亮度 target_luma
// 输出:曝光调整步长 step
float calc_step(float cur_luma, float target_luma) {
    float error = fabs(cur_luma - target_luma) / target_luma;
    if (error > 0.3f) {
        return 2.5f;  // 大步
    } else if (error > 0.1f) {
        return 1.0f;  // 中步
    } else {
        return 0.4f;  // 微步
    }
}

2.6 实际项目中的避坑清单

最后,我把自己踩过的坑整理成清单。你想想看,这些场景是不是也遇到过?

问题现象 根因分析 解决方案
画面忽亮忽暗 PID 参数过大,系统震荡 降低积分系数,增加死区
暗光下噪点多 增益过高,SNR 劣化 加入 SNR 约束,优先降帧率
场景切换反应慢 步长太小,收敛慢 采用自适应步长策略
室内灯光下闪烁 快门时间与电网频率不匹配 锁定快门为 1/100s 或 1/120s

我的习惯: 每次调完 AE 参数,我都会在暗室和强光下各跑一遍测试序列。暗室看噪点,强光看是否过曝。这两个极端场景能暴露 90% 的问题。