4. AE实战调优
AE调优,说白了就是让摄像头在不同光照下都能输出“看着舒服”的画面。很多工程师把AE当成一个黑盒,扔几个参数就跑。我个人习惯是先把AE的四个核心维度拆开理解:Target、Speed、Compensation、Lock。这四个东西搞明白了,调优才有方向。
核心观点:AE调优不是调一个参数,而是调一套“响应策略”。Target决定亮度基准,Speed决定响应快慢,Compensation决定偏移量,Lock决定何时冻结。四者缺一不可。
4.1 AE Target调整——亮度基准怎么定?
AE Target,就是AE算法追求的“目标亮度”。高通平台里,这个值通常用Target Luma或Target Y来表示。单位是8-bit的亮度值,范围0~255。
你可能会问:设成128不就行了吗?嗯,没那么简单。我在项目中遇到过,同一个Target值,室内和室外拍出来的主观亮度感完全不同。为什么?因为场景的动态范围不一样。
| 场景类型 | 推荐Target范围 | 说明 |
|---|---|---|
| 室内低照度 | 100~120 | 避免提亮过度导致噪声爆炸 |
| 室外阴天 | 120~140 | 保持自然感,不过曝 |
| 室外强光 | 140~160 | 保留高光细节,防止clip |
| 夜景/极暗 | 80~100 | 优先降噪,牺牲一点亮度 |
调Target时,我建议你配合直方图一起看。只看平均亮度容易踩坑——比如一张图背景全黑、人脸正常,平均亮度可能很低,但人脸其实已经够了。
实战技巧:高通平台里,AE Target可以通过stats_ae_target_luma节点调整。记得同时调整stats_ae_target_weight,把权重往人脸区域倾斜。我曾经只调Target不调权重,结果人脸总是偏暗,折腾了两天才发现是权重没改。
4.2 AE Speed调优——快还是慢,这是个问题
AE Speed,控制的是AE收敛速度。太快了画面会闪烁,太慢了用户会骂“这摄像头反应好迟钝”。
高通平台里,Speed相关的参数主要分布在两个地方:AE收敛步长和AE收敛阻尼。步长决定每次调整的幅度,阻尼决定调整的平滑度。
// 高通AE Speed典型配置示例
ae_control:
{
convergence_step: 0.2, // 步长,0.1~0.5
convergence_damping: 0.8, // 阻尼,0.5~1.0
skip_frame_count: 2, // 跳帧数,避免频繁调整
speed_profile: "normal" // 可选:fast, normal, slow
}
我个人习惯把Speed分成三个场景来调:
- 场景切换时:用fast profile,步长0.3~0.5,快速收敛到目标亮度。但注意,太快了会有overshoot,画面会闪一下。
- 稳定场景下:用normal profile,步长0.1~0.2,阻尼0.8以上。画面平滑,不会忽明忽暗。
- 微光/夜景:用slow profile,步长0.05~0.1,阻尼0.9以上。噪声敏感场景下,宁可慢一点,也不要让增益来回跳。
避坑指南:我曾经在一个项目中,把AE Speed调得太快,结果在荧光灯下画面以100Hz的频率闪烁。后来发现是AE收敛速度和AWB的闪烁检测没配合好。记住:AE Speed要和AWB、AF的响应速度对齐,否则三个算法互相打架,画面会非常诡异。
4.3 AE Compensation——曝光补偿的“偏置”艺术
AE Compensation,就是曝光补偿。高通平台里通常用ae_compensation节点控制,单位是EV(曝光值)。
你想想看,AE Target定死了亮度基准,但有些场景就是需要“故意”偏亮或偏暗。比如拍雪景,如果不加补偿,雪会变成灰色。拍黑色物体,不加补偿会变成灰色。
| 场景 | 推荐补偿值 | 原因 |
|---|---|---|
| 雪景/白色背景 | +0.7 ~ +1.0 EV | 防止AE把白色拉回中灰 |
| 黑色物体/暗背景 | -0.3 ~ -0.7 EV | 防止AE把黑色提亮 |
| 逆光人像 | +0.3 ~ +0.7 EV | 补偿人脸亮度 |
| 舞台灯光 | -0.3 ~ -0.5 EV | 保留高光细节 |
调Compensation时,我建议你配合AE Region Weight一起用。比如逆光场景,把人脸区域的权重提高,同时加一点正补偿,效果比单纯调补偿好得多。
高通平台注意:ae_compensation的值是线性叠加到Target上的。比如Target=120,补偿+0.5EV,实际目标亮度≈120 * 2^(0.5) ≈ 170。别搞错了,不是直接加50。
4.4 AE Lock机制——什么时候“冻结”AE?
AE Lock,就是锁定当前的曝光参数。高通平台里,Lock机制分为硬件Lock和软件Lock两种。
- 硬件Lock:直接冻结sensor的曝光时间和增益。适合需要稳定的场景,比如HDR多帧合成。
- 软件Lock:AE算法停止更新参数,但sensor还在正常输出。适合用户手动锁定曝光的场景。
我遇到过最典型的坑是:HDR多帧合成时,AE没有Lock,结果三帧的曝光参数不一样,合成出来的图像有亮度跳变。后来强制在HDR触发前做AE Lock,问题就解决了。
// 高通AE Lock触发示例
// 在HDR多帧采集前锁定AE
void trigger_hdr_capture() {
// 1. 锁定AE
camera->set_ae_lock(true);
// 2. 等待AE稳定(通常1~2帧)
camera->wait_for_frames(2);
// 3. 采集HDR多帧
camera->capture_hdr_frames(3);
// 4. 解锁AE
camera->set_ae_lock(false);
}
实战建议:AE Lock不要锁太久。锁超过3秒,场景变化了,解锁后AE会有一个大的跳变。我一般控制在1~2帧内完成操作。另外,Lock期间如果检测到场景剧烈变化(比如从室内走到室外),建议强制解锁并重新收敛。
4.5 四者联动——一张图看懂AE调优全貌
下面这张图是我自己总结的AE调优流程。四个维度不是孤立的,它们共同决定了最终的曝光效果。
4.6 实战调优步骤——从参数到效果
最后,我分享一下我自己常用的AE调优步骤。这套流程在三个高通平台项目上验证过,效果还不错。
- 第一步:确定Target基线。在标准D65光源下,对着18%灰卡,调Target直到灰卡亮度在120~130之间。记下这个值作为基线。
- 第二步:调Speed曲线。在室内外切换场景下,观察AE收敛时间。目标:切换后2~3帧内稳定,没有overshoot。如果闪,加大阻尼;如果慢,加大步长。
- 第三步:加Compensation场景表。针对雪景、逆光、夜景等典型场景,建立补偿值映射表。注意:补偿值不要超过±1.0EV,否则噪声和动态范围会出问题。
- 第四步:配置Lock策略。确定哪些场景需要Lock(HDR、多帧、用户手动锁定),Lock时长控制在2帧以内。Lock解锁后加一个平滑过渡,防止亮度跳变。
- 第五步:回测联动。把四个维度组合起来,在10个以上典型场景下跑一遍。重点关注:场景切换时的Speed表现、Lock解锁后的亮度连续性、补偿场景下的Target是否偏移。
最后提醒:AE调优没有“万能参数”。同一个Target值,在sensor A上可能偏亮,在sensor B上可能偏暗。因为sensor的QE(量子效率)和动态范围不同。我建议每换一个sensor型号,都重新走一遍上面的调优步骤。别偷懒,偷懒的代价就是返工。