4. AE策略与模式:全局AE、局部AE、人脸优先AE、HDR场景AE策略
曝光控制这事儿,说白了就是决定画面亮暗的「总开关」。很多刚入行的朋友觉得AE很简单——找个平均亮度不就完了?真做起来才发现,坑多着呢。
我在高通平台上调了这么多年AE,最大的体会是:没有万能的AE策略,只有最适合当前场景的策略。今天咱们就把四种核心策略掰开揉碎聊清楚。
4.1 全局AE:最基础的「大锅饭」
全局AE,也叫平均测光。它把整个画面所有像素的亮度加起来取平均,然后调整曝光参数让这个平均值落在目标亮度附近。
核心公式(简化版):
target_luminance = average(pixel_values)
if target_luminance > desired_luminance:
降低曝光(减增益、缩光圈、提快门)
else:
增加曝光(反之亦然)
这种策略的优点很明显:实现简单、计算量小、场景普适性强。但缺点同样致命——遇到大光比场景,比如逆光人像,背景亮成一片,人脸黑成剪影,全局AE照样给你来个「平均主义」,结果就是两头不讨好。
我的经验:全局AE适合做「兜底策略」。我在调试一款入门级手机时,发现所有场景都用人脸优先AE反而出问题——画面里没人时AE乱跳。后来我把全局AE作为默认策略,检测到人脸再切到人脸优先,稳得很。
4.2 局部AE:把画面「切块」算账
局部AE把画面分成M×N个区域,每个区域独立计算亮度权重。高通平台通常支持5×5到15×15的分区。
举个例子,你拍一张天空占60%、地面占40%的照片。全局AE会把天空和地面一视同仁,结果地面偏暗。局部AE可以给地面区域更高的权重,让曝光更照顾暗部。
| 分区大小 | 优点 | 缺点 | 典型场景 |
|---|---|---|---|
| 5×5 | 计算快,适合低端平台 | 分区粗糙,边缘过渡生硬 | 入门级手机、IoT摄像头 |
| 9×9 | 平衡性能和精度 | 权重配置复杂 | 主流中端机型 |
| 15×15 | 精细控制,支持多目标 | 计算量大,易过拟合 | 旗舰机、专业相机 |
注意:分区不是越多越好。我曾经在一个项目里把分区设到15×15,结果画面里有个小光源,AE被那个亮点「牵着鼻子走」,整个画面忽明忽暗。后来加了空间平滑滤波才解决。
4.3 人脸优先AE:让「主角」永远正确
人脸优先AE是目前手机相机最常用的策略。它的逻辑很简单:画面里检测到人脸,就把人脸区域的亮度作为曝光基准。
高通平台的人脸AE通常分三步走:
- 人脸检测:从ISP输出的YUV数据中跑人脸检测算法,返回人脸ROI坐标
- 亮度提取:只计算人脸ROI内的平均亮度
- 曝光调整:让人脸亮度趋近目标值(通常设定在18%灰左右)
关键参数:
face_target_luminance:人脸目标亮度,一般设为80~120(8bit数据)face_weight:人脸区域权重,通常0.7~1.0face_transition_speed:人脸切入/切出时的曝光过渡速度
这里有个坑——人脸检测的置信度阈值。阈值设高了,侧脸、戴墨镜、戴口罩的人脸检测不到,AE退回全局模式,人脸可能过暗。阈值设低了,误检率上升,把背景里的海报人脸当成真人,AE乱跳。
我的建议:置信度阈值设在0.6~0.7之间比较稳妥。同时开启人脸跟踪(face tracking),避免检测结果帧间抖动。我在调试某款机型时,发现人脸AE在暗光下会「犹豫」——人脸亮度在目标值附近来回震荡。后来加了滞回区间(hysteresis band),问题就解决了。
4.4 HDR场景AE策略:高动态范围的「平衡术」
HDR场景是AE策略的终极考验。简单说,就是画面里既有极亮区域(太阳、灯光),又有极暗区域(阴影、暗部),单帧曝光根本hold不住。
高通平台的HDR AE策略通常有两种实现方式:
- 多帧合成HDR:拍多张不同曝光的帧,合成一张高动态范围图像。AE需要决定短帧、中帧、长帧的曝光参数组合。
- 单帧HDR(DOL-HDR):利用传感器支持的数字过采样技术,一帧内读出不同曝光时间的像素。AE需要配置每行/每列的曝光时间。
| HDR类型 | AE策略重点 | 典型参数 | 高通平台支持 |
|---|---|---|---|
| 多帧合成 | 确定短/中/长帧的曝光比 | 曝光比1:4:16或1:8:64 | CamX + CHI |
| DOL-HDR | 配置每行曝光时间梯度 | 最短曝光1/10000s,最长1/120s | 骁龙8系列+ |
HDR AE的核心挑战是「动态范围分配」。举个例子,你拍一个窗边场景:窗外亮度10000 lux,室内亮度50 lux。如果短帧曝光时间设太短,窗外细节有了,室内全黑;长帧曝光时间设太长,室内亮了,窗外过曝。
避坑指南:我曾经在调试DOL-HDR时遇到一个诡异问题——画面里有一盏频闪灯(50Hz),HDR合成后出现明暗条纹。查了两天才发现,DOL-HDR的不同行曝光时间刚好和频闪周期「撞车」了。解决方案是让曝光时间锁定在频闪周期的整数倍(比如20ms的倍数)。
4.5 四种策略的「选型地图」
说了这么多,到底什么时候用哪种?我画了张图帮你理清思路。
4.6 实战中的「组合拳」
实际项目中,很少只用单一策略。我分享一个真实案例:
某款旗舰机的前置摄像头,要求做到「逆光人脸清晰,背景不过曝」。我们最终采用的方案是:
- 人脸优先AE作为主策略,保证人脸亮度在目标值
- 局部AE修正:在人脸区域外,对高亮区域(天空、灯光)施加负权重,防止背景过曝
- HDR触发条件:当人脸区域和背景区域的亮度差超过3档时,自动切换到HDR模式
- 全局AE兜底:人脸检测丢失超过2秒,平滑切回全局AE
关键代码片段(高通CamX AE策略配置):
// AE策略优先级配置
AeStrategyConfig {
strategy_type = AE_STRATEGY_FACE_PRIORITY
face_weight = 0.8
face_target_luminance = 100
// 局部AE权重图
weight_grid = {
grid_size = 9x9
center_weight = 1.0
edge_weight = 0.3
highlight_suppression = true
}
// HDR触发阈值
hdr_trigger = {
luminance_ratio = 8.0 // 3档
hysteresis = 0.5 // 滞回防止抖动
}
// 兜底策略
fallback_strategy = AE_STRATEGY_GLOBAL
fallback_delay_ms = 2000
}
嗯,这套方案调下来,逆光场景的人脸亮度从原来的40 nit提升到了120 nit,背景过曝区域减少了60%。当然,调试过程没这么顺利——中间还遇到过人脸AE和HDR切换时的「亮度跳变」,后来加了帧间平滑滤波才搞定。
最后说一句:AE策略没有银弹。同一个策略,在Sensor A上表现完美,换到Sensor B上可能一塌糊涂。我的习惯是:先跑一遍全场景的AE log,分析每个场景的亮度分布直方图,再针对性地调整策略参数。数据说话,比拍脑袋靠谱得多。