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通常分三步走:

  1. 人脸检测:从ISP输出的YUV数据中跑人脸检测算法,返回人脸ROI坐标
  2. 亮度提取:只计算人脸ROI内的平均亮度
  3. 曝光调整:让人脸亮度趋近目标值(通常设定在18%灰左右)

关键参数:

  • face_target_luminance:人脸目标亮度,一般设为80~120(8bit数据)
  • face_weight:人脸区域权重,通常0.7~1.0
  • face_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 四种策略的「选型地图」

说了这么多,到底什么时候用哪种?我画了张图帮你理清思路。

AE策略选型决策流程 输入场景 检测到人脸? 是 人脸优先AE 否 高动态范围? 是 HDR场景AE 否 需要局部权重控制? 是 局部AE 否 全局AE 说明: 实际项目中,四种策略往往组合使用。例如:人脸优先AE + 局部AE权重修正,或全局AE作为HDR AE的兜底策略。 高通CamX框架支持策略动态切换,可在preview过程中实时调整。

4.6 实战中的「组合拳」

实际项目中,很少只用单一策略。我分享一个真实案例:

某款旗舰机的前置摄像头,要求做到「逆光人脸清晰,背景不过曝」。我们最终采用的方案是:

  1. 人脸优先AE作为主策略,保证人脸亮度在目标值
  2. 局部AE修正:在人脸区域外,对高亮区域(天空、灯光)施加负权重,防止背景过曝
  3. HDR触发条件:当人脸区域和背景区域的亮度差超过3档时,自动切换到HDR模式
  4. 全局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,分析每个场景的亮度分布直方图,再针对性地调整策略参数。数据说话,比拍脑袋靠谱得多。