AE策略与收敛:目标亮度设定、步长控制、防闪烁策略
自动曝光(AE)这东西,说白了就是让摄像头在不同光照下都能拍出亮度合适的画面。我刚开始做ISP的时候,觉得AE不就是调个曝光时间嘛,后来发现远没那么简单——目标亮度怎么定?步长多大才不抖?遇到50Hz的灯光怎么不闪?这里头门道不少。
今天咱们就把AE策略的核心拆开聊。我个人习惯把AE分成三个层次:先定目标,再控收敛,最后处理闪烁。一层层来,你就能理解为什么有些摄像头画面稳如老狗,有些却忽明忽暗。
目标亮度设定:不是越亮越好
目标亮度,就是AE想达到的画面平均亮度。很多人觉得目标亮度设高一点画面更亮更好看,其实这是个误区。
我在项目中遇到过这样一个案例:某款安防摄像头,白天效果很好,一到晚上画面就发白。查了半天,发现是目标亮度设得太高,AE在低照度下拼命拉增益,结果噪声全出来了。后来把目标亮度从180降到120(8bit),画面反而干净多了。
目标亮度的设定通常参考以下几个因素:
- 传感器动态范围:宽动态传感器可以设高一点,普通传感器要保守些
- 场景类型:室内场景一般120-160,室外可以160-200(8bit范围)
- 噪声水平:传感器噪声大,目标亮度要适当降低
- 用户偏好:有些客户喜欢亮一点,有些喜欢自然一点
实际工程中,我一般用这个公式做初始设定:
target_luminance = (max_luminance - min_luminance) * 0.6 + min_luminance
嗯,这里要注意,这个0.6不是固定的。对于低照度场景,我会降到0.4左右,避免增益过高。
步长控制:收敛速度与稳定性的博弈
步长控制是AE的核心。步长太大,画面会来回震荡;步长太小,收敛又太慢。你想想看,用户拿着手机从室内走到室外,如果AE半天反应不过来,那体验得多糟糕。
我习惯把步长控制分成三个阶段:
| 阶段 | 误差范围 | 步长策略 | 特点 |
|---|---|---|---|
| 粗调 | 误差 > 30% | 大步长(50-100ms) | 快速接近目标 |
| 细调 | 10% < 误差 ≤ 30% | 中步长(10-50ms) | 平滑过渡 |
| 微调 | 误差 ≤ 10% | 小步长(1-10ms) | 稳定锁定 |
步长控制的核心公式是这样的:
exposure_delta = (target_luminance - current_luminance) * gain_factor
new_exposure = current_exposure + exposure_delta
这里的gain_factor就是步长系数。粗调阶段我设0.8,细调阶段0.3,微调阶段0.1。为什么要这样?因为误差大的时候,我们需要快速响应;误差小的时候,要防止过冲。
还有一个细节:曝光时间、模拟增益、数字增益的调整顺序。我的做法是:
- 先调曝光时间,直到达到上限(比如33ms对应30fps)
- 再调模拟增益,直到达到上限(通常6-12dB)
- 最后调数字增益,但尽量少用,因为数字增益会放大噪声
这个顺序能保证在低照度下优先利用曝光时间,而不是盲目拉增益。
防闪烁策略:跟电网频率较劲
防闪烁,说白了就是避免画面出现明暗条纹。为什么会这样?因为灯光(尤其是荧光灯和LED灯)会以电网频率的两倍闪烁——50Hz电网就是100Hz闪烁,60Hz电网就是120Hz闪烁。
如果曝光时间不是闪烁周期的整数倍,画面就会出现亮度条纹。我见过最夸张的一次,整个画面像斑马线一样,用户直接投诉说摄像头坏了。
防闪烁的核心策略有两个:
- 固定曝光时间法:将曝光时间锁定为闪烁周期的整数倍。比如50Hz下,闪烁周期是10ms,曝光时间就设为10ms、20ms、30ms...
- 自动检测法:通过分析画面亮度波动,自动判断闪烁频率,然后调整曝光时间
实际项目中,我一般用这种策略:
if (flicker_detected) {
if (power_freq == 50Hz) {
exposure_time = round_to_nearest(exposure_time, 10ms);
} else if (power_freq == 60Hz) {
exposure_time = round_to_nearest(exposure_time, 8.33ms);
}
}
这里有个坑——曝光时间被锁定后,AE的调节范围就受限了。比如50Hz下,曝光时间只能以10ms为步长调整,那在低照度场景下,可能从10ms直接跳到20ms,画面亮度变化会很明显。
AE收敛的整体流程
把上面这些串起来,AE收敛的完整流程是这样的:
这个流程看起来简单,但实际工程中要考虑的细节很多。比如:
- 亮度统计区域的选择——中心权重还是全局平均?
- 场景切换检测——突然从暗到亮,要不要重置AE状态?
- 与AWB的交互——色温变化会影响亮度统计吗?
嗯,最后说一句。AE调优是个细致活,没有万能参数。我每次拿到新传感器,都会花至少一周时间专门调AE。先固定场景调收敛,再换各种光照条件测稳定性,最后才做防闪烁验证。这个过程急不来,但一旦调好了,后面就省心了。