3. 自动曝光算法原理:测光模式、目标亮度与曝光补偿

自动曝光(AE)这事儿,说白了就是让摄像头替你做决定——拍出来的画面该多亮。但机器不知道什么是“好看”,它只认数字。所以我们要告诉它:用什么方式去测量场景的亮度,最终要盯住哪个亮度值,以及遇到特殊情况怎么调整。

我刚开始调AE的时候,总觉得这玩意儿很简单,不就是调个亮度嘛。后来在户外强光下拍人脸,背景过曝得一塌糊涂,才意识到测光模式选不对,后面全是白费功夫。

3.1 测光模式:摄像头怎么“看”亮度

测光模式决定了传感器上哪些像素参与亮度统计。不同模式,说白了就是不同的“采样策略”。

测光模式 参与统计的区域 典型权重分布 适用场景
全局测光(平均测光) 整个画面 所有像素等权重 光照均匀的场景,如风景、室内全景
中心测光(中央重点) 画面中央区域(约60%~80%) 中心权重高,边缘权重低 主体在中央的人像、物体特写
点测光 画面中央极小区域(约1%~5%) 仅该区域参与计算 逆光、舞台追光、高反差场景

核心要点:测光模式本质上是一个“空间权重滤波器”。全局测光用矩形窗,中心测光用高斯窗,点测光用冲击响应。选错了窗函数,信号就测不准。

我在项目中遇到过一个问题:用全局测光拍会议室,窗户那边特别亮,结果人脸全黑了。后来切到中心测光,把权重集中在人脸区域,曝光就正常了。你想想看,这就是典型的“采样偏差”。

3.1.1 全局测光的陷阱

全局测光看起来公平,但实际场景很少有均匀光照。比如天空占画面一半,地面占一半,平均亮度可能刚好,但地面太暗、天空过曝。我建议在光照可控的室内场景才放心用全局测光。

3.1.2 点测光的精度与风险

点测光非常精准,但也很危险。我曾经调试一款安防摄像头,点测光对准了暗区的车牌,结果整个画面亮得像白天——因为算法以为场景太暗,疯狂拉增益。后来我加了一个“点测光区域锁定”机制,配合运动检测,才解决这个问题。

避坑指南:点测光区域必须与对焦区域、人脸检测区域联动。我曾经单独调点测光,结果对焦框和测光框不重叠,画面忽明忽暗,折腾了两天才发现是坐标没对齐。

3.2 目标亮度设定:AE要盯住哪个数

测光模式算出一个“场景平均亮度”,但算法并不知道这个亮度是“好”还是“坏”。我们需要设定一个目标亮度(Target Luminance),通常用8位灰度值表示,范围0~255。

我个人习惯把目标亮度设在120~140之间。为什么是这个范围?因为人眼对中间调最敏感,太暗(<80)会丢失暗部细节,太亮(>180)会压缩高光层次。

场景类型 推荐目标亮度(8bit) 说明
室内人像 130~150 肤色自然,背景不过曝
户外风景 110~130 保留天空和地面细节
夜间监控 80~100 抑制噪声,保留轮廓
文档扫描 160~180 文字清晰,背景干净

小技巧:目标亮度不要写死。我习惯根据场景分类器动态切换:检测到人脸时自动降到130,检测到文档时升到170。这样用户体验会好很多。

3.3 曝光补偿策略:当算法“犯傻”时

算法再聪明,也有判断失误的时候。比如雪景、夜景、逆光,这些场景的统计特性跟“正常”场景差异太大。这时候就需要曝光补偿(EV Compensation)来人工干预。

曝光补偿的本质,就是给目标亮度加一个偏移量:

// 曝光补偿实现伪代码
int target_luminance = 128;  // 基础目标
int ev_comp = 0;             // 补偿值,单位:0.1 EV

// 用户手动补偿
ev_comp += user_ev_offset;

// 场景自动补偿
if (scene_type == SNOW) {
    ev_comp += 15;  // 雪景偏亮,补偿+1.5EV
} else if (scene_type == NIGHT) {
    ev_comp -= 10;  // 夜景偏暗,补偿-1.0EV
}

// 最终目标亮度
int final_target = target_luminance + ev_comp;
final_target = clamp(final_target, 40, 220);  // 限幅保护

我曾经调试一款户外球机,冬天拍雪景,画面总是灰蒙蒙的。算法以为场景太亮,拼命降低增益,结果雪变成了灰色。后来加了雪景检测,自动补偿+1.5EV,画面才恢复正常。

3.3.1 补偿的三种触发方式

  1. 手动补偿:用户通过UI滑动条调整,优先级最高。我建议步长设为0.3EV,太细用户感觉不到变化,太粗又容易跳变。
  2. 场景自适应补偿:算法根据直方图分布自动判断。比如直方图整体偏左(暗),就加正补偿;偏右(亮),就加负补偿。
  3. 联动补偿:与自动对焦(AF)、人脸检测联动。比如检测到人脸逆光,自动加+1.0EV补偿,同时调整对焦框位置。

注意:补偿值不能无限累加。我见过一个项目,用户把补偿拉到+3.0EV,结果画面全是噪声。一定要加限幅保护,我一般限制在±2.0EV以内。

3.4 三种测光模式的核心逻辑对比

为了让你更直观地理解,我画了一张流程图,展示三种测光模式在AE算法中的完整路径:

测光模式与AE算法流程图 测光模式与AE算法核心流程 原始RAW数据 测光模式选择(全局/中心/点) 全局测光 所有像素等权重平均 中心测光 中央区域高权重 点测光 极小区域精确采样 统计场景平均亮度 Y_avg Y_avg vs 目标亮度 Y_target 说明:三种测光模式最终汇聚到同一个亮度统计与目标比较环节,差异仅在于“哪些像素参与统计”

3.5 实战中的联动策略

测光模式不是孤立工作的。在实际项目中,我习惯把测光模式与自动对焦(AF)区域绑定:

  • 全局测光 + 全局对焦:适合风景、空旷场景,对焦和测光都不需要特别关注某个区域。
  • 中心测光 + 中心对焦:适合人像、物体特写,主体在画面中央,测光和对焦都围绕它。
  • 点测光 + 点对焦:适合微距、逆光人像,测光和对焦都锁定在同一个极小区域。

我的经验:点测光一定要配合点对焦使用。如果测光点在左脸,对焦点在右眼,画面会非常奇怪——亮度跟着左脸跑,清晰度跟着右眼跑。我踩过这个坑,后来强制要求测光框和对焦框的坐标必须一致。