第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调优里最头疼的场景之一。人脸在暗区,背景是亮区。如果按平均测光,人脸就黑了。
高通平台处理背光的典型思路是:检测到背光后,把权重集中到人脸区域。
具体做法分两步:
- 背光检测:计算画面中心区域与边缘区域的亮度差。如果中心比边缘暗超过某个阈值(比如2档EV),就判定为背光。
- 权重重映射:一旦判定背光,立即切换到背光专用的权重表。这个表的特点是:人脸区域权重极高(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 权重矩阵的调优流程
最后,我分享一下我在项目中实际使用的调优流程:
- 准备测试场景:背光、强光、普通、夜景各拍10张
- 初始权重:全部设为1,跑一遍基线
- 分析问题:看哪些场景曝光不准,是主体暗了还是背景亮了
- 调整权重:针对问题场景,修改权重表
- 验证回归:确保修改后其他场景不受影响
- 加入迟滞:设置场景切换的迟滞时间
- 实景测试:拿到真实环境中拍100张,看稳定性
重要提醒: 权重矩阵不是万能的。如果硬件动态范围不够,或者AE的曝光时间/增益范围没配好,光调权重表是救不了的。我建议先确保AE的基础参数(曝光时间范围、增益范围、目标亮度)正确,再动权重表。
3.8 本章知识结构图
下面这张图总结了AE权重矩阵的核心逻辑:
这张图把本章的核心内容串起来了。从分区测光开始,到权重表设计,再到背光/强光场景策略,最后落到场景切换和调优流程。你调试时,可以对照这张图,一步步排查问题。
好了,AE权重矩阵的内容就到这里。记住一句话:权重表是AE的指挥棒,指挥棒挥得好,曝光就稳了。