2. 自动曝光(AE)原理

各位好,我是负责ISP 3A算法模块的工程师。今天咱们聊聊自动曝光(AE)——这个看似简单、实则坑最多的模块。

你想想看,一张照片好不好看,第一眼看的肯定是亮度。太暗了看不清细节,太亮了又刺眼。AE要做的,就是让画面亮度刚刚好。但问题来了:什么叫“刚刚好”?

2.1 曝光三角:光圈、快门、ISO

曝光控制,说白了就是控制进光量。三个参数互相制约,就像三角形的三条边——动一个,另外两个就得跟着调。

参数 物理含义 对画面的影响 高通平台常见范围
光圈 (Aperture) 镜头通光孔径大小 控制进光量 + 景深 f/1.4 ~ f/16(手机多为固定光圈)
快门 (Shutter) 传感器感光时间 控制进光量 + 运动模糊 1/10000s ~ 30s
ISO (增益) 模拟/数字信号放大倍数 控制亮度 + 噪声水平 ISO 50 ~ 12800

核心公式: 曝光量 ∝ 光圈面积 × 快门时间 × ISO增益

用对数表示就是:EV = log₂(F²/T) + log₂(ISO/100)

我在项目中遇到过一个问题:某款手机在夜景模式下,AE算法拼命拉ISO,结果画面噪点满天飞。后来我强制限制了ISO上限,同时延长快门时间——但快门太长又导致手抖模糊。嗯,这就是曝光三角的典型博弈。

2.2 测光模式:相机怎么看世界?

相机要决定“哪里亮才算亮”。不同的测光模式,决定了AE统计的权重分布。

  • 全局测光(平均测光): 整幅画面取平均。适合光照均匀的场景。
  • 中央重点测光: 画面中心区域权重高。适合人像、主体居中的场景。
  • 点测光: 只取画面中心一个小区域(约1%~5%)。适合逆光、舞台等极端场景。
  • 矩阵测光(评价测光): 将画面分成多个区域,分别计算后加权。高通平台默认模式。

我的经验: 高通平台上的矩阵测光,默认是16×16的网格。但如果你做AI场景识别,建议改成32×32甚至64×64——虽然计算量大了点,但能更精细地捕捉局部亮度变化。

2.3 亮度统计:AE的“眼睛”

AE算法需要知道当前画面有多亮。高通平台通过硬件统计模块(HAL3的AE统计)提供以下数据:

// 高通平台AE统计数据结构(简化版)
struct ae_stats {
    uint32_t grid_width;      // 统计网格宽度,通常16或32
    uint32_t grid_height;     // 统计网格高度
    uint32_t *histogram;      // 256级亮度直方图
    uint32_t *grid_luma;      // 每个网格的平均亮度值
    uint32_t roi_weight;      // 感兴趣区域权重
    uint32_t saturated_pixels; // 过曝像素计数
    uint32_t dark_pixels;     // 欠曝像素计数
};

我个人习惯把亮度统计分成三个维度来看:

  1. 全局平均亮度: 整幅画面的平均Y值。简单,但容易被大块亮区/暗区带偏。
  2. 直方图分布: 看像素集中在哪个亮度区间。如果直方图右侧“撞墙”,说明过曝了。
  3. 区域权重: 人脸区域、对焦区域、天空区域……不同区域权重不同。

我曾经踩过的坑: 某次调试时,AE统计显示平均亮度只有80(0~255范围),但画面看起来已经过曝了。查了半天才发现——传感器输出的RAW数据是10bit的,而统计模块默认按8bit处理。高位截断导致亮度值偏低。所以,一定要确认统计模块的位宽和传感器输出位宽一致。

2.4 目标亮度设定:到底多亮才算“正常”?

目标亮度(Target Luminance)是AE的“指挥棒”。它告诉算法:把画面调到这个亮度水平。

但问题来了——不同场景的目标亮度不一样:

场景类型 目标亮度(Y值) 说明
户外晴天 180~220 高亮度,保留高光细节
室内正常光 120~160 舒适亮度,兼顾暗部
夜景/暗光 60~100 低亮度,优先降噪
逆光人像 人脸区域140~180 人脸优先,背景可过曝

你想想看,如果夜景也按200的目标亮度去调,ISO会飙到多高?画面还能看吗?所以,目标亮度必须根据场景动态调整。

2.5 AE控制流程:从统计到决策

下面这张图展示了高通平台AE的完整闭环流程:

高通平台AE控制流程图 高通平台AE控制闭环流程 传感器 RAW 数据 ISP 亮度统计 (HAL3) AE 算法决策 曝光参数 (快门/ISO/光圈) 反馈控制 说明: AE算法根据统计模块提供的亮度数据,计算当前亮度与目标亮度的差值,然后调整曝光参数。

这个闭环每帧都在运行。高通平台通常每帧都会更新AE参数,但为了防抖,我建议加上一个低通滤波器——说白了就是让参数变化平滑一点,别一帧亮一帧暗。

2.6 避坑指南:高通平台AE调试常见问题

  • 闪烁问题: 室内灯光下,快门时间如果和电网频率(50Hz/60Hz)不匹配,画面会闪烁。高通平台有anti-banding模块,记得开启。
  • 收敛速度: 场景切换时,AE从暗到亮或从亮到暗的过渡时间。太快会闪烁,太慢用户觉得卡。我一般控制在5~10帧内完成。
  • 过曝保护: 高亮区域(如太阳、灯光)容易过曝。高通平台支持高光权重调整——给高亮区域更高的权重,让AE优先保护高光细节。
  • 人脸优先: 如果检测到人脸,AE应该以人脸区域的亮度为准。高通平台的人脸ROI权重可以单独配置。

我的调试小技巧: 在调试AE时,先把目标亮度设死(比如固定150),然后手动调整曝光参数,观察直方图变化。等摸清了传感器的响应曲线,再放开让AE自动跑。这样能快速定位问题是出在统计模块还是决策算法。