第3章 AE权重矩阵:分区测光原理、权重表设计与场景实战

各位好,我是负责高通平台相机调优的工程师。今天咱们聊聊AE里一个特别关键、也特别容易被忽视的模块——权重矩阵。

说白了,权重矩阵就是告诉相机:“画面里哪些区域更重要,曝光要以它们为准。” 没有权重矩阵,相机只会傻傻地算整个画面的平均亮度。那结果呢?背光人脸黑成一片,强光天空过曝到惨白。我当年刚接触高通平台时,就被一个背光场景折腾了两周,后来才发现是权重表没配好。

好,咱们正式开始。

3.1 分区测光的底层逻辑

高通平台的AE引擎,默认会把画面分成15×15 = 225个区块。每个区块独立统计亮度值。然后,引擎根据你配的权重表,给每个区块分配一个“重要性系数”。

最终曝光目标值 = Σ(区块亮度 × 区块权重) / Σ(区块权重)

你想想看,这个公式其实很直白。权重高的区域,对最终曝光的影响就大。权重为0的区域,引擎直接忽略它。

核心概念: 高通平台的分区测光不是简单的“中央重点”或“平均测光”。它是完全可编程的。你可以把权重集中在人脸区域,也可以让画面四角完全不参与曝光计算。

我在项目中遇到过一个问题:某个客户反馈相机在室内灯光下总是偏暗。我查了半天,发现是默认权重表把画面中心权重设得太高,而用户经常把主体放在画面左侧。后来我把权重分布改得更平滑,问题就解决了。

3.2 权重表的数据结构

权重表在高通代码里是一个二维数组。以15×15为例,每个元素的值范围是0~15(4位精度)。0表示完全不参与,15表示最高优先级。

来看一个典型的权重表定义:

// 高通平台权重表示例 (15x15)
// 值范围: 0-15
uint8_t ae_weight_table[15][15] = {
    {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0},
    {0, 0, 0, 1, 2, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0},
    {0, 0, 1, 2, 4, 5, 5, 5, 5, 5, 4, 2, 1, 0, 0},
    {0, 1, 2, 4, 6, 8, 8, 8, 8, 8, 6, 4, 2, 1, 0},
    {1, 2, 4, 6, 9, 12,12,12,12,12,9, 6, 4, 2, 1},
    {1, 3, 5, 8, 12,15,15,15,15,15,12,8, 5, 3, 1},
    {1, 3, 5, 8, 12,15,15,15,15,15,12,8, 5, 3, 1},
    {1, 3, 5, 8, 12,15,15,15,15,15,12,8, 5, 3, 1},
    {1, 3, 5, 8, 12,15,15,15,15,15,12,8, 5, 3, 1},
    {1, 3, 5, 8, 12,15,15,15,15,15,12,8, 5, 3, 1},
    {1, 2, 4, 6, 9, 12,12,12,12,12,9, 6, 4, 2, 1},
    {0, 1, 2, 4, 6, 8, 8, 8, 8, 8, 6, 4, 2, 1, 0},
    {0, 0, 1, 2, 4, 5, 5, 5, 5, 5, 4, 2, 1, 0, 0},
    {0, 0, 0, 1, 2, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0},
    {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}
};

这个表是典型的中央权重最高配置。中心区域权重15,边缘逐渐衰减到0。适合大多数普通拍照场景。

我的习惯: 调试初期,我会先把权重表全部设为1(均匀权重),观察原始测光表现。然后再根据实际场景逐步调整。这样能避免权重表掩盖其他AE参数的问题。

3.3 权重表设计原则

设计权重表不是拍脑袋的事。我总结了几个核心原则:

原则 说明 典型场景
主体优先 画面中最重要的区域权重最高 人脸、产品中心
平滑过渡 权重不要从15直接跳到0,容易导致曝光抖动 所有场景
对称性 除非有特殊需求,否则保持左右/上下对称 普通拍照、风景
动态适配 根据场景切换不同的权重表 背光、强光、夜景
边界留白 画面边缘权重可以很低,但不要全0 防止边缘噪声干扰

嗯,这里要注意第三点。我曾经在一个项目中,为了突出画面左侧的主体,把权重表设计成非对称的。结果用户把手机横过来拍时,曝光就全乱了。后来我改成根据重力感应动态切换权重表,才搞定。

3.4 背光场景的权重策略

背光,是AE调优里最头疼的场景之一。人脸在暗区,背景是亮区。如果按平均测光,人脸就黑了。

高通平台处理背光的典型思路是:检测到背光后,把权重集中到人脸区域。

具体做法分两步:

  1. 背光检测:计算画面中心区域与边缘区域的亮度差。如果中心比边缘暗超过某个阈值(比如2档EV),就判定为背光。
  2. 权重重映射:一旦判定背光,立即切换到背光专用的权重表。这个表的特点是:人脸区域权重极高(15),背景区域权重极低(0~2)。

来看一个背光场景的权重表示例:

// 背光场景权重表 (15x15)
// 假设人脸在画面中央区域
uint8_t ae_weight_backlight[15][15] = {
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0},
    {0, 0, 0, 1, 5, 10,12,12,12,10,5, 1, 0, 0, 0},
    {0, 0, 0, 2, 10,15,15,15,15,15,10,2, 0, 0, 0},
    {0, 0, 0, 2, 12,15,15,15,15,15,12,2, 0, 0, 0},
    {0, 0, 0, 2, 12,15,15,15,15,15,12,2, 0, 0, 0},
    {0, 0, 0, 2, 12,15,15,15,15,15,12,2, 0, 0, 0},
    {0, 0, 0, 2, 10,15,15,15,15,15,10,2, 0, 0, 0},
    {0, 0, 0, 1, 5, 10,12,12,12,10,5, 1, 0, 0, 0},
    {0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};

避坑指南: 我曾经在背光场景里把背景权重全设为0,结果背景完全过曝,一片死白。用户投诉说“照片背景什么都看不见”。后来我改成背景保留最低权重(1~2),让引擎至少能感知到背景亮度,避免背景完全失控。

3.5 强光场景的权重策略

强光场景和背光相反——主体在亮区,背景可能正常或偏暗。典型场景是:阳光下的人脸、舞台聚光灯下的演员。

强光场景的核心问题是:主体容易过曝。权重策略应该是:

  • 把高权重集中在主体区域(通常是画面中心或人脸)
  • 适当降低背景权重,但不要全0
  • 配合AE的高光保护机制,限制最大曝光时间

我建议强光场景的权重表采用高斯分布形状。中心权重15,向外平滑衰减。这样既能保证主体曝光准确,又不会让背景完全丢失。

来看一个强光场景的权重表:

// 强光场景权重表 (15x15)
// 高斯分布,中心权重最高
uint8_t ae_weight_highlight[15][15] = {
    {0, 0, 0, 0, 1, 1, 2, 2, 2, 1, 1, 0, 0, 0, 0},
    {0, 0, 0, 1, 2, 3, 4, 4, 4, 3, 2, 1, 0, 0, 0},
    {0, 0, 1, 2, 4, 6, 7, 8, 7, 6, 4, 2, 1, 0, 0},
    {0, 1, 2, 4, 6, 8, 10,10,10,8, 6, 4, 2, 1, 0},
    {1, 2, 4, 6, 9, 11,12,12,12,11,9, 6, 4, 2, 1},
    {1, 3, 6, 8, 11,13,14,14,14,13,11,8, 6, 3, 1},
    {2, 4, 7, 10,12,14,15,15,15,14,12,10,7, 4, 2},
    {2, 4, 8, 10,12,14,15,15,15,14,12,10,8, 4, 2},
    {2, 4, 7, 10,12,14,15,15,15,14,12,10,7, 4, 2},
    {1, 3, 6, 8, 11,13,14,14,14,13,11,8, 6, 3, 1},
    {1, 2, 4, 6, 9, 11,12,12,12,11,9, 6, 4, 2, 1},
    {0, 1, 2, 4, 6, 8, 10,10,10,8, 6, 4, 2, 1, 0},
    {0, 0, 1, 2, 4, 6, 7, 8, 7, 6, 4, 2, 1, 0, 0},
    {0, 0, 0, 1, 2, 3, 4, 4, 4, 3, 2, 1, 0, 0, 0},
    {0, 0, 0, 0, 1, 1, 2, 2, 2, 1, 1, 0, 0, 0, 0}
};

我的经验: 强光场景下,除了权重表,还要配合目标亮度偏移。比如正常场景目标亮度是120(8位数据),强光场景可以降到100,让主体稍微欠曝一点,保留高光细节。这个偏移量我一般从-0.3EV开始试。

3.6 权重矩阵与场景切换

高通平台支持多组权重表,根据场景自动切换。典型的切换逻辑是:

场景类型 检测条件 权重表策略
普通 亮度均匀,无背光/强光 中央权重,平滑过渡
背光 中心比边缘暗 > 2EV 人脸/中心高权重,边缘低权重
强光 中心比边缘亮 > 2EV 高斯分布,中心高权重
夜景 整体亮度 < 阈值 均匀权重,避免噪声放大
风景 远距离,无主体 均匀权重,或上下对称

切换时要注意迟滞。我见过一个项目,背光和普通场景之间频繁切换,导致曝光忽明忽暗。后来加了2秒的迟滞时间,才稳定下来。

3.7 权重矩阵的调优流程

最后,我分享一下我在项目中实际使用的调优流程:

  1. 准备测试场景:背光、强光、普通、夜景各拍10张
  2. 初始权重:全部设为1,跑一遍基线
  3. 分析问题:看哪些场景曝光不准,是主体暗了还是背景亮了
  4. 调整权重:针对问题场景,修改权重表
  5. 验证回归:确保修改后其他场景不受影响
  6. 加入迟滞:设置场景切换的迟滞时间
  7. 实景测试:拿到真实环境中拍100张,看稳定性

重要提醒: 权重矩阵不是万能的。如果硬件动态范围不够,或者AE的曝光时间/增益范围没配好,光调权重表是救不了的。我建议先确保AE的基础参数(曝光时间范围、增益范围、目标亮度)正确,再动权重表。

3.8 本章知识结构图

下面这张图总结了AE权重矩阵的核心逻辑:

AE权重矩阵知识结构 AE权重矩阵 分区测光 (15×15) 权重表设计原则 场景策略 亮度统计 加权平均 主体优先 平滑过渡 背光场景 强光场景 背光检测 权重重映射 高光保护 场景切换 + 迟滞机制 调优流程:基线 → 分析 → 调整 → 回归 → 实景

这张图把本章的核心内容串起来了。从分区测光开始,到权重表设计,再到背光/强光场景策略,最后落到场景切换和调优流程。你调试时,可以对照这张图,一步步排查问题。

好了,AE权重矩阵的内容就到这里。记住一句话:权重表是AE的指挥棒,指挥棒挥得好,曝光就稳了。