4. 自动曝光算法原理

自动曝光(AE)的本质,是让相机在给定场景亮度下,把成像传感器的平均亮度或目标区域亮度调整到接近中性灰(通常对应 18% 反射率,数字域约 118~128/255)。但“测什么、怎么加权、以谁为准”不同,就形成了平均测光、中心加权、点测光、区域测光和基于直方图的曝光控制等不同策略。理解这些算法的差异,是 3A 调试中让 AE 既稳定又符合拍摄意图的关键。

一、核心原理:测光区域与目标亮度的映射

AE 算法通常由三部分组成:测光统计、目标亮度决策、曝光参数收敛。测光统计把画面划分为若干区域或像素集合,计算亮度均值、加权均值、直方图分布;目标亮度决策根据测光模式决定“把哪个亮度值拉到目标”;曝光参数收敛则通过调整曝光时间、模拟增益、数字增益或光圈,使实际亮度逼近目标。

不同测光模式的差别,主要体现在统计权重矩阵上。平均测光对全画面等权;中心加权对中心区域赋予更高权重;点测光只取画面中很小一块区域;区域测光则把画面分成多个块,分别统计后再按规则融合。基于直方图的方法不只看均值,而是看亮度分布形态,从而判断是否过曝、欠曝或高光占比过大。

自动曝光测光模式与直方图控制关系图 画面测光区域划分 平均测光 全画面等权 中心加权 中心权重高 点测光 小区域采样 区域测光 多块融合 亮度直方图 暗部 ← 亮度 → 高光 高光溢出风险区 AE 决策与曝光输出 目标亮度设定(18% 灰) 曝光时间 / 增益 / 光圈 收敛判断与防抖策略 曝光参数与亮度关系 曝光时间 ↑ 亮度 ↑,运动模糊 ↑ 模拟增益 ↑ 亮度 ↑,噪声 ↑ 数字增益 ↑ 亮度 ↑,量化损失 ↑ 光圈 ↑ 亮度 ↑,景深 ↓ AE 算法根据测光结果,在曝光时间、增益、光圈之间做折中,使目标区域亮度逼近设定值

二、五种测光模式的工作方式

平均测光把画面所有像素或所有测光块等权平均。它适合光照均匀的风景、文档翻拍等场景,但在逆光、大面积高光或大面积暗部时容易误判:例如雪景会被拉暗成灰,夜景会被拉亮成噪点图。

中心加权在平均测光基础上,对画面中心区域赋予更高权重,边缘权重递减。它符合多数人“主体在中间”的拍摄习惯,适合人像、静物、日常抓拍。但主体偏离中心时,权重矩阵与主体位置不匹配,仍可能曝光偏差。

点测光只取画面中约 1%~5% 的区域作为测光点,通常与对焦点联动。它适合舞台、逆光人像、月亮等需要精确控制某一小区域亮度的场景。缺点是测光点一旦偏离目标,曝光会剧烈变化,因此对操作和算法稳定性要求高。

区域测光又称评价测光或多区测光,把画面分成几十甚至上千个块,分别统计亮度、对比度、颜色和距离信息,再通过规则或模型判断场景类型,决定最终曝光。它是现代相机和手机中最常用的模式,能在逆光、顺光、高对比场景中取得较好平衡。

基于直方图的曝光控制不只看均值,而是统计亮度分布。算法会计算暗部占比、中间调占比、高光占比、过曝像素比例等指标,再决定是优先保护高光还是提升暗部。例如高光溢出比例超过阈值时,算法会主动降低曝光,避免不可逆的细节丢失。

三、方法流程:从统计到收敛

一个典型的 AE 控制流程如下:

  1. 按测光模式划分区域,计算各区域亮度均值或直方图。
  2. 根据权重矩阵融合得到当前测光值 Y_cur。
  3. 与目标亮度 Y_target 比较,计算曝光误差 EV_err = log2(Y_target / Y_cur)。
  4. 根据误差查表或使用 PID 控制,计算曝光时间、增益的调整量。
  5. 应用调整量,等待下一帧统计,重复直到误差进入容差带。
  6. 若场景突变,触发快速收敛;若场景稳定,进入慢速微调,避免画面闪烁。
// 简化的 AE 误差与调整示例
Y_cur    = weighted_mean(luma_blocks, weight_matrix);
Y_target = 120;                     // 约 18% 灰
EV_err   = log2(Y_target / Y_cur);  // 正数表示需要提亮

if (abs(EV_err) < 0.05) {
    // 进入稳定区,保持当前曝光
} else if (EV_err > 0) {
    exposure_time *= pow(2, EV_err * 0.7);
    analog_gain   *= pow(2, EV_err * 0.3);
} else {
    exposure_time *= pow(2, EV_err * 0.7);
    analog_gain   *= pow(2, EV_err * 0.3);
}

四、案例与场景:逆光人像的测光选择

假设拍摄逆光人像,背景天空很亮,人脸偏暗。若使用平均测光,算法会被大面积天空拉高,导致人脸更暗;若使用中心加权,人脸位于中心时权重较高,曝光会明显改善;若使用点测光并对准人脸,则能精确保证人脸亮度,但天空可能过曝;若使用区域测光,算法识别到“人脸+高亮背景”后,通常会优先保证人脸可辨识,同时适当保留天空层次。

在手机 3A 调试中,常见做法是:默认使用区域测光,结合人脸检测结果动态调整权重;当用户点击屏幕对焦时,切换为点测光或局部测光;在夜景、雪景、舞台等特殊场景,再通过场景识别调用专门的曝光曲线。

调试提示:AE 目标亮度不是固定值。不同厂商、不同传感器、不同色彩风格下,目标亮度可能设定在 110~135 之间。调试时应先确认目标亮度基准,再比较测光模式的差异,否则容易把“风格差异”误判为“算法错误”。

五、常见误区与复盘

误区 现象 原因 改进方向
认为平均测光最“准确” 雪景偏灰、夜景偏亮 平均测光假设场景反射率均匀 引入场景识别或直方图保护
点测光点与对焦点不联动 曝光随构图剧烈跳变 测光区域与用户意图不一致 测光点跟随对焦点或人脸
只看均值不看直方图 高光死白、暗部死黑 均值相同但分布差异大 增加过曝/欠曝像素比例约束
收敛速度过快 画面亮度闪烁 增益调整步长过大 加入阻尼、迟滞和稳定区
忽略曝光时间与增益的折中 暗光下噪声大或运动模糊 只追求亮度达标 根据运动检测和噪声模型分配参数
排障提醒:当 AE 出现“忽明忽暗”时,优先检查测光区域是否包含运动物体、权重矩阵是否在帧间跳变、目标亮度是否被场景识别频繁切换。很多 AE 问题不是收敛算法本身,而是测光统计不稳定导致的。

总结来看,平均测光、中心加权、点测光、区域测光和直方图控制并不是互相替代的关系,而是从简单到复杂、从全局到局部、从均值到分布的递进工具链。实际 3A 算法中,往往以区域测光为骨架,以直方图约束为保护,以点测光或中心加权作为用户意图的快速入口,再通过稳定的收敛策略输出曝光参数。理解每种模式的权重逻辑和适用边界,才能在调试中快速定位问题并做出合理取舍。