2. AE(自动曝光)基本原理:曝光三角、亮度统计直方图与目标亮度设定

自动曝光(AE,Auto Exposure)是相机成像链路中最基础的闭环控制模块之一。其核心目标是在不同光照场景下,通过调节曝光参数组合,使传感器捕获的图像亮度稳定在预设的“目标亮度”附近,避免过曝(高光溢出)或欠曝(暗部细节丢失)。本章从曝光三角的物理原理出发,逐步深入到高通平台上的亮度统计直方图机制与目标亮度设定策略。

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

曝光三角是决定传感器接收光量的三个核心参数。三者的物理意义与调节效果如下表所示:

参数 物理含义 对进光量的影响 副作用/限制
光圈(Aperture) 镜头通光孔径的大小,用 F 数表示(F1.4、F2.0 等) F 数越小,进光量越大;F 数每增大 √2 倍,进光量减半 影响景深(浅景深/背景虚化)和镜头衍射
快门(Shutter Speed) 传感器感光的时间长度,单位秒(1/30s、1/60s 等) 时间越长,进光量越大;时间减半,进光量减半 影响运动模糊(手抖/物体移动)和帧率
ISO(感光度) 传感器信号放大的增益倍数 ISO 每翻倍,亮度信号放大一倍 放大噪声,降低信噪比(SNR),影响画质
高通平台提示: 在移动端 Camera 中,光圈通常是固定的(如 F1.8),因此 AE 策略主要调节快门和 ISO。部分高端模组支持可变光圈(如 F1.4-F4.0),此时光圈会作为 AE 的优先调节维度之一。

曝光三角的调节优先级在不同场景下有所不同。典型的 AE 策略优先级如下:

  1. 低光照场景: 优先降低快门速度(不超过安全快门),再提升 ISO,最后考虑开大光圈(若支持)。
  2. 高光照场景: 优先降低 ISO 至最小值(如 ISO 100),再提高快门速度,最后缩小光圈。
  3. 运动场景: 优先保证快门速度足够快(如 1/120s 以上),再调节 ISO 和光圈。
曝光三角关系图 曝光三角关系图 光圈 (Aperture) 快门 (Shutter) ISO (感光度) 曝光量 (EV) 曝光量 EV = log₂(F² / T) + log₂(ISO/100) 其中 F 为光圈 F 数,T 为快门时间(秒)

2.2 亮度统计直方图

亮度统计直方图(Luma Histogram)是 AE 算法判断当前场景亮度分布的核心工具。它将图像亮度从 0(纯黑)到 255(纯白)划分为 256 个 bin,统计每个亮度级别下的像素数量。高通平台通常提供多种统计模式,包括全局直方图、分区直方图(如 5x5 网格)和 Y 通道直方图。

直方图在 AE 调试中的典型应用场景:

  • 过曝检测: 如果直方图右侧(高亮区域)出现大量像素堆积且接近 255,说明存在高光溢出风险。
  • 欠曝检测: 如果直方图左侧(暗部区域)大量像素堆积在 0 附近,说明暗部细节丢失。
  • 场景分类: 直方图分布形态可辅助判断场景类型(如夜景、逆光、室内均匀光等)。
高通平台特性: 高通 ISP 的统计引擎(Stats Engine)支持输出 256-bin 的 Y 直方图,同时提供分区统计(如 15x15 网格的均值/方差)。在 AE 算法中,通常先计算全局直方图的加权平均亮度,再结合分区信息做局部曝光补偿。
亮度统计直方图示例 亮度统计直方图(Luma Histogram) 0 255 亮度值 像素数 典型室内场景 中间亮度区域 像素集中 无过曝/欠曝

2.3 目标亮度设定

目标亮度(Target Luma)是 AE 算法期望图像达到的平均亮度水平,通常用 Y 通道的均值或加权均值表示。在高通平台中,目标亮度一般设定在 100-120(8-bit 范围)之间,对应 18% 中性灰卡的反射率。

目标亮度的设定需要考虑以下因素:

  • 场景类型: 夜景场景目标亮度可适当降低(如 80-100),避免噪声放大;户外强光场景可适当提高(如 120-140)。
  • 人脸检测: 当检测到人脸时,AE 会以人脸区域亮度为主要参考,目标亮度通常设定在 130-150 之间,确保肤色自然。
  • HDR 模式: 在 HDR 模式下,目标亮度会适当降低(如 90-110),为高光区域预留更多动态范围。
调试注意: 目标亮度不是固定值,而是需要根据模组特性(如 sensor 的线性度、ISP 的 tone mapping 曲线)进行微调。过高的目标亮度会导致高光区域饱和,过低则导致暗部噪声明显。建议在标准 D65 光源下,使用灰卡标定初始目标亮度值。
目标亮度设定流程 目标亮度设定流程 输入场景信息 场景分类 目标亮度计算 AE 参数调节 反馈迭代 目标亮度 = 基础目标值 × 场景权重 × 人脸权重 × HDR 权重

2.4 高通平台 AE 统计与目标亮度映射

在高通 Camera 子系统中,AE 统计数据的获取与目标亮度的映射关系如下:

统计模块 输出数据 用途
Y 直方图(Histogram) 256-bin 亮度分布 计算全局平均亮度、过曝/欠曝比例
分区统计(Grid Stats) MxN 网格的 Y 均值/方差 局部曝光补偿、背光检测
人脸统计(Face Stats) 人脸 ROI 内的亮度均值 人脸优先曝光
AE 收敛状态 当前亮度与目标亮度的差值 PID 控制器调节步长

目标亮度映射到实际曝光参数的典型计算过程(伪代码):

// 高通平台 AE 目标亮度映射示例
// 输入:当前统计亮度 current_luma, 目标亮度 target_luma
// 输出:快门增益 shutter_gain, ISO 增益 iso_gain

float luma_error = target_luma - current_luma;
float exposure_gain = 1.0 + (luma_error / target_luma) * Kp; // Kp 为比例系数

// 根据曝光增益调节快门和 ISO
if (exposure_gain > 1.0) {
    // 需要增加曝光:优先降低快门速度
    shutter_gain = min(shutter_gain * exposure_gain, max_shutter_gain);
    // 如果快门已达上限,再提升 ISO
    if (shutter_gain >= max_shutter_gain) {
        iso_gain = min(iso_gain * exposure_gain, max_iso_gain);
    }
} else {
    // 需要减少曝光:优先降低 ISO
    iso_gain = max(iso_gain * exposure_gain, min_iso_gain);
    // 如果 ISO 已达下限,再提高快门速度
    if (iso_gain <= min_iso_gain) {
        shutter_gain = max(shutter_gain * exposure_gain, min_shutter_gain);
    }
}
实战建议: 在调试初期,建议先固定目标亮度为 110(8-bit),然后通过抓取不同场景下的直方图分布,观察实际亮度是否收敛到目标值附近。如果发现系统存在稳态误差(如始终偏暗 5-10 个亮度值),可以通过调整 PID 控制器的积分项(Ki)来消除。