自动曝光(AE)基础:曝光三要素与经典控制策略

各位同学,今天我们来聊聊自动曝光(AE)。这是 ISP 流水线的第一道关卡,也是 3A 协同中最直观的一环。说白了,AE 的任务就是让摄像头拍出来的画面,亮度刚刚好——不黑成一片,也不白得刺眼。

我刚开始做 ISP 时,总觉得 AE 不就是调个亮度嘛,能有多复杂?直到有一次在户外强光下调试,画面过曝得一塌糊涂,我才意识到,这里面的门道比想象中深得多。

曝光三要素:光圈、快门、ISO

曝光三要素,是控制进光量的三个旋钮。它们的关系,可以用一个简单公式概括:

曝光量 ∝ 光圈面积 × 快门时间 × ISO 增益

但每个要素的物理特性完全不同,我习惯用一张表来对比:

要素 物理含义 对画面的影响 调节代价
光圈(Aperture) 镜头通光孔径大小 控制进光量 + 景深 大光圈景深浅,边缘画质下降
快门(Shutter) 传感器感光时间 控制进光量 + 运动模糊 慢快门容易手抖/拖影
ISO(增益) 模拟/数字信号放大倍数 提升亮度 + 噪声 高 ISO 噪点明显,细节丢失

你想想看,这三个参数是互相牵制的。想要画面亮,可以开大光圈、放慢快门、拉高 ISO。但每个选择都有副作用。我在项目中遇到过一种典型场景:室内暗光下拍运动物体。光圈已经开到最大了,ISO 再往上拉噪点就压不住,快门又不能太慢否则会糊。最后只能三方面各让一步,找到一个平衡点。

我的经验: 在移动端 ISP 中,光圈通常是固定的(因为镜头模组成本限制),所以实际能调的只有快门和 ISO。这时候 AE 策略就变成了「先调快门,再补 ISO」的优先级逻辑。

AE 的目标与评价标准

AE 的目标很明确:让画面亮度达到一个「合理」的水平。但什么叫合理?这需要量化指标。

目标亮度(Target Luminance)

最常见的做法是设定一个目标亮度值,比如 18% 灰(中性灰)。算法会计算当前画面的平均亮度,然后跟目标值比较,差值就是误差信号。

但这里有个坑——平均亮度不一定靠谱。举个例子,拍雪景时画面大部分是白的,平均亮度会很高;拍夜景时大部分是黑的,平均亮度很低。如果只盯着平均值调,雪景会偏暗,夜景会偏亮。

避坑指南: 我曾经在雪景场景下吃过亏。算法死盯着平均亮度,结果把雪拍成了灰色。后来我加了一个场景分类器,检测到高亮场景时自动偏移目标值。嗯,这才算把问题解决了。

直方图(Histogram)

直方图是 AE 的另一个重要工具。它统计了画面中每个亮度级别的像素数量。我习惯把直方图看作画面的「亮度体检报告」。

理想的直方图应该是:

  • 不贴左墙(不过暗)
  • 不贴右墙(不过亮)
  • 分布均匀,细节丰富

实际场景中,直方图往往会有各种形态。比如逆光人像,背景亮、人脸暗,直方图会呈现双峰。这时候 AE 就要决定:保背景还是保人脸?

核心思路: 现代 AE 算法通常结合「区域权重」和「人脸检测」。人脸区域权重更高,即使背景过曝一点,也要保证人脸亮度正常。这是用户体验优先的体现。

AE 的经典控制策略

有了目标和评价标准,接下来就是怎么调的问题了。这里介绍两种经典策略:爬山法和 PID 控制。

爬山法(Hill Climbing)

爬山法的思路很直观:往亮度增加的方向调,直到亮度不再上升,或者达到目标值。就像爬山一样,一步步往上走。

具体步骤:

  1. 计算当前帧的平均亮度
  2. 与目标亮度比较,确定调整方向(增亮还是减暗)
  3. 按固定步长调整曝光参数(快门或 ISO)
  4. 检查下一帧的亮度变化
  5. 如果亮度接近目标,停止;否则继续调整

这个方法的优点是简单、计算量小。但缺点也很明显——容易陷入局部最优。比如在闪烁光源下,亮度会周期性变化,爬山法可能来回震荡,永远找不到稳定点。

我的改进: 我在项目中给爬山法加了一个「死区」和「滞回」机制。亮度在目标值附近 ±5% 范围内就不调整,避免频繁抖动。效果还不错。

PID 控制

PID(比例-积分-微分)控制是工业界的经典方法。它把亮度误差分解成三部分:

  • P(比例):当前误差,决定调整力度
  • I(积分):历史误差累积,消除稳态偏差
  • D(微分):误差变化趋势,抑制震荡

PID 的公式长这样:

输出 = Kp × 误差 + Ki × ∫误差 dt + Kd × d(误差)/dt

在 AE 中,输出就是曝光参数的调整量。PID 的优点是响应快、精度高,但参数调起来很麻烦。Kp、Ki、Kd 三个系数需要根据场景反复试。

我记得有一次在实验室调 PID 参数,Kp 设大了,画面像抽风一样来回跳;Kd 设大了,又反应迟钝。折腾了一下午才找到一组合适的值。

注意: PID 在 AE 中有一个天然缺陷——曝光参数的变化不会立即反映在下一帧上(因为帧率限制)。这会导致延迟,积分项容易积累过头。我建议在 PID 基础上加一个「预测补偿」,根据帧间隔时间预估延迟量。

AE 控制策略对比

策略 优点 缺点 适用场景
爬山法 简单、计算量小 易震荡、局部最优 光照稳定的室内场景
PID 控制 响应快、精度高 参数难调、有延迟 光照变化较快的户外场景
混合策略 兼顾稳定性和响应速度 实现复杂 复杂多变场景(推荐)

我个人更倾向于混合策略:先用爬山法快速逼近目标区域,再切换到 PID 做精细调节。这样既避免了 PID 在大误差下的过冲,又解决了爬山法在目标点附近的抖动问题。

AE 核心流程

下面这张图展示了 AE 的完整工作流程:

自动曝光(AE)核心流程 传感器原始数据 亮度统计(直方图) 误差计算(目标 vs 实际) 控制策略(爬山法 / PID / 混合) 曝光参数(快门/ISO) 关键指标 • 目标亮度(18%灰) • 直方图分布 • 区域权重 • 人脸检测

从流程图上可以看到,AE 是一个闭环反馈系统。传感器采集数据,统计亮度,计算误差,选择策略,调整参数,然后进入下一帧。这个循环每帧都在运行,频率通常是 30fps 甚至更高。

嗯,到这里 AE 的基础内容就差不多了。记住三个核心点:曝光三要素的权衡、目标亮度和直方图的评价方法、爬山法和 PID 的控制逻辑。这些是后续理解 3A 协同的基石。