AE实战调参(一):目标亮度设定、权重矩阵配置、曝光补偿与AE Bias
AE(自动曝光)调参,说白了就是让摄像头在不同光照下都能拍出亮度合适的画面。很多工程师一上来就调PID,结果发现怎么调都稳不住。为什么?因为最基础的目标亮度和权重矩阵没设对。
我个人习惯,拿到一个新sensor,第一件事不是跑算法,而是先搞清楚:这个场景到底想要多亮?
目标亮度设定:AE的“靶心”在哪?
目标亮度就是AE算法追求的最终亮度值。它通常用图像的平均亮度(Y均值)来表示,范围一般是0~255(8bit)或0~1023(10bit)。
这个值怎么定?我见过不少项目直接拍脑袋设个128(8bit),结果暗光下噪点爆炸,强光下高光过曝。嗯,这里要注意:目标亮度不是固定的,它取决于场景和ISP pipeline。
| 场景类型 | 推荐目标亮度(8bit) | 说明 |
|---|---|---|
| 室内人像 | 140~160 | 人脸需要足够亮,背景可以稍暗 |
| 户外风景 | 110~130 | 保留高光细节,避免天空过曝 |
| 暗光/夜景 | 80~100 | 优先降噪,牺牲一点亮度 |
| 文档扫描 | 180~200 | 文字需要高对比度 |
权重矩阵配置:让AE“看”该看的地方
权重矩阵决定了AE算法在计算平均亮度时,图像不同区域的“话语权”。默认情况下,整个画面是等权重的。但实际场景中,我们往往更关心画面中央区域——比如人脸、车牌、二维码。
权重矩阵通常是一个M×N的网格,每个格子对应一个权重值。常见的分法有5×5、7×7、15×15。格子越细,控制越精准,但计算量也越大。
我建议从5×5开始调,够用且不浪费算力。下面是一个典型的中央加权矩阵:
// 5×5 中央加权矩阵示例
// 权重范围 0~15,中央区域权重最高
uint8_t weight_matrix[5][5] = {
{1, 2, 3, 2, 1},
{2, 4, 6, 4, 2},
{3, 6, 15, 6, 3},
{2, 4, 6, 4, 2},
{1, 2, 3, 2, 1}
};
这个矩阵的中央权重是15,边缘只有1。AE在计算平均亮度时,中央区域的像素会被加权更多。你想想看,如果画面中央是个人脸,AE就会优先保证人脸亮度合适,背景暗一点没关系。
曝光补偿:给AE一个“偏移量”
曝光补偿(Exposure Compensation)是一个简单但好用的工具。它允许你在AE算出的目标亮度基础上,人为地加一个偏移量。单位通常是EV(曝光值),1 EV对应亮度翻倍或减半。
什么时候用曝光补偿?
- 逆光场景:人脸太暗?+1.0 EV ~ +1.5 EV
- 雪地/沙滩:画面太亮?-0.5 EV ~ -1.0 EV
- 舞台灯光:主体亮背景暗?+0.3 EV ~ +0.7 EV
- 夜景灯箱:高光过曝?-0.5 EV ~ -1.0 EV
曝光补偿的实现很简单:
// 曝光补偿实现伪代码
float target_luminance = calculate_target_luminance(weight_matrix);
float compensation = get_exposure_compensation(); // 单位:EV
float adjusted_target = target_luminance * pow(2.0, compensation);
// 用 adjusted_target 去驱动AE算法
AE Bias:细粒度的亮度微调
AE Bias是曝光补偿的“精细化版本”。曝光补偿是整个画面一起调,而AE Bias可以针对不同亮度区域做微调。比如,你希望暗区更暗一点、亮区更亮一点,或者反过来。
AE Bias通常用一个查找表(LUT)来实现:
// AE Bias LUT 示例
// 输入:当前像素亮度(0~255)
// 输出:bias后的亮度(0~255)
uint8_t ae_bias_lut[256] = {
// 暗区压低,亮区抬高(增加对比度)
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
// ... 中间部分略 ...
// 从128开始逐渐抬高
128, 129, 130, 132, 134, 136, 138, 140,
// ... 直到255
255
};
这个LUT的作用是:暗区(0~127)基本保持原样,亮区(128~255)被轻微抬升。最终效果是画面暗部更干净,亮部更通透。
知识体系总览
下面这张图把本章的核心逻辑串起来了。你可以把它当作调参时的“导航图”:
调参顺序建议
这四个参数怎么调?我建议按这个顺序来:
- 先定目标亮度——根据场景和ISP特性,确定一个基础亮度值
- 再配权重矩阵——让AE关注画面中最重要的区域
- 加曝光补偿——处理特殊场景(逆光、雪地等)
- 最后调AE Bias——做细粒度的亮度微调