自动曝光(AE)基础:曝光三要素与收敛目标
各位同学,今天我们来聊聊自动曝光(AE)的基础。说实话,AE 是 ISP 里最“接地气”的模块——你拿起手机拍照,画面忽明忽暗,用户第一反应就是“这相机不行”。我当年调试第一款手机摄像头时,就被 AE 的收敛速度坑过,画面来回震荡,像在呼吸一样。嗯,从那以后我就明白,搞懂 AE 基础,比调参数更重要。
曝光三要素:光圈、快门、增益
曝光,说白了就是控制传感器接受到的光量。三个核心参数,缺一不可。
| 要素 | 物理含义 | 对画面的影响 | 典型范围 |
|---|---|---|---|
| 光圈(Aperture) | 镜头通光孔径大小 | 控制进光量 + 景深 | F/1.4 ~ F/16 |
| 快门(Shutter) | 传感器曝光时间 | 控制进光量 + 运动模糊 | 1/10000s ~ 30s |
| 增益(Gain/ISO) | 模拟/数字信号放大倍数 | 控制亮度 + 噪声 | ISO 100 ~ 6400 |
这里有个关键点:光圈在手机上是固定的。你想想看,手机镜头那么小,F/1.8 基本就是极限了。所以手机 AE 真正能调的,只有快门和增益。我做过一个项目,客户非要手机实现“光圈优先”模式,最后只能靠 ND 滤镜模拟,效果嘛……凑合能用。
核心公式:曝光量 ∝ 光圈面积 × 快门时间 × 增益
用对数表示:EV = log₂(F²/T) + log₂(ISO/100)
其中 EV 是曝光值,F 是光圈数,T 是快门时间(秒)。
曝光模型与亮度统计
AE 不是瞎猜的,它背后有一套数学模型。我个人习惯把曝光模型分成三层:
- 物理层:传感器响应曲线(光子 → 电子 → 数字码值)
- 统计层:图像亮度直方图、分区统计
- 控制层:PID 或查表法调整三要素
亮度统计是 AE 的眼睛。传感器输出的 RAW 数据,经过黑电平校正后,我们会计算每个像素的亮度值。但注意,不是所有像素都参与统计——我一般会去掉最暗的 1% 和最亮的 1%,避免死黑和过曝点干扰判断。
我的经验:分区加权统计比全局平均更靠谱。把画面分成 5×5 或 7×7 的网格,人脸区域给高权重,天空区域给低权重。这样逆光场景下,人脸不会黑成一片。
举个例子,一个典型的亮度统计流程:
// 伪代码:亮度统计
uint32_t hist[256] = {0};
for (each pixel in ROI) {
uint8_t luma = (pixel.r * 0.299 + pixel.g * 0.587 + pixel.b * 0.114);
hist[luma]++;
}
// 计算加权平均亮度
float avg_luma = 0;
for (int i = 0; i < 256; i++) {
avg_luma += i * hist[i] * weight[i];
}
avg_luma /= total_pixels;
这段代码看着简单,但实际工程里坑不少。我曾经遇到过一个问题:统计 ROI 没对齐,导致画面边缘的强光源被计入,AE 一直压曝光,画面越来越暗。后来加了边缘裁剪,问题才解决。
AE 的收敛目标:目标亮度
AE 不是“越亮越好”,而是“亮到合适”。这个“合适”就是目标亮度(Target Luma)。
目标亮度通常是一个 8-bit 值,范围 0~255。我见过的大多数方案,目标亮度设在 100~120 之间。为什么是这个范围?因为人眼对中间调最敏感,太亮会刺眼,太暗看不清细节。
注意:目标亮度不是固定值!
- 低光照场景:目标亮度可以降到 80,避免增益过高引入噪声
- 高动态场景:目标亮度可以升到 130,保留暗部细节
- 人脸检测时:人脸区域的目标亮度单独设定,通常 140~160
我调试过一款安防摄像头,客户要求夜间也能看清车牌。一开始目标亮度设 110,结果增益拉到 ISO 3200,画面全是噪点。后来我把目标亮度降到 85,快门放慢到 1/30s,增益控制在 ISO 800 以内,画面干净多了。说白了,目标亮度是 AE 的“锚点”,锚点选错了,后面调啥都白搭。
知识结构图:AE 核心逻辑
下面这张图,是我自己画的一个 AE 核心逻辑框架。你看一眼,基本就能理解 AE 是怎么工作的。
这张图里,我特意画了一个反馈闭环。你想想看,AE 不是一次就调好的——它先统计亮度,跟目标比,然后调参数,再统计,再比……直到误差小于某个阈值。这个收敛过程,我一般控制在 5~10 帧 内完成。太快会震荡,太慢用户能感知到亮度变化,体验很差。
避坑指南:AE 调试中的常见问题
- 亮度震荡:我曾经把 PID 的 P 值设太大,画面在亮暗之间来回跳。后来加了死区(deadband),误差小于 3 就不调,问题解决。
- 过曝锁定:强光场景下,AE 可能把快门压到极限,画面还是过曝。这时候要检查传感器是否支持更短快门,或者考虑加电子 ND。
- 暗光闪烁:低光照下,增益太高会导致 50/60Hz 工频闪烁。我一般会限制快门为工频周期的整数倍(比如 1/50s 或 1/100s)。
一个小技巧:调试 AE 时,先把增益固定为 ISO 100,只调快门。等快门范围用尽了,再引入增益。这样能清晰看到每个参数的影响,避免耦合问题。