4、自动曝光(AE)原理:曝光三角、直方图与权重策略

自动曝光,说白了就是让摄像头自己决定「吃多少光」。

我刚开始做手机摄像头调试那会儿,总觉得AE很简单——不就是调调亮度嘛。直到有一次在夜景场景下,画面忽明忽暗,用户投诉说「这手机拍照像呼吸灯」……嗯,从那以后我才真正开始认真研究AE的每一个细节。

4.1 曝光三角:光圈、快门、ISO

曝光量由三个参数共同决定,业内叫「曝光三角」。

参数 物理含义 对画面的影响 典型范围
光圈(Aperture) 镜头通光孔径大小 数值越小(如f/1.8),进光越多,景深越浅 f/1.4 ~ f/16
快门(Shutter) 传感器感光时间 时间越长,进光越多,但运动物体容易模糊 1/10000s ~ 30s
ISO(感光度) 传感器对光的放大增益 数值越高,画面越亮,但噪声也越明显 100 ~ 6400+

你想想看,这三个参数是互相牵制的。光圈开大了,快门就得快一点,否则过曝。ISO高了,快门就能慢一点,但噪点会炸。

核心公式(简化版):

曝光量 ∝ 光圈面积 × 快门时间 × ISO增益

实际工程中,我们通常用「EV(Exposure Value)」来量化曝光量。每增加1EV,进光量翻倍。

我个人习惯把曝光三角理解成一个「水桶模型」:光圈是水管粗细,快门是放水时间,ISO是往水里加盐——盐多了虽然咸(亮),但杂质(噪声)也多了。

4.2 亮度直方图分析

直方图是AE的眼睛。没有它,你根本不知道当前画面是黑是白。

亮度直方图的横轴是0~255的灰度级,纵轴是每个灰度级上的像素数量。我一般把它分成三个区:

  • 暗部(0~85):像素扎堆在这里,说明画面偏暗,可能欠曝。
  • 中间调(86~170):主体细节集中区,理想情况下峰值应该落在这里。
  • 亮部(171~255):像素太多且贴边(255),说明过曝,细节全丢了。

我在项目中遇到过最典型的场景是「逆光人像」:背景天空的像素全挤在255那一列,人脸却堆在0附近。这时候直方图会呈现「双峰」形态——两头高中间低。嗯,这种场景AE最头疼。

避坑指南:

我曾经犯过一个低级错误——只看直方图的「形状」不看「分布范围」。有一次直方图看起来是完美的钟形曲线,但实际画面灰蒙蒙的。后来才发现,像素只集中在100~150这50个灰度级里,动态范围根本没拉开。所以,直方图不仅要看形状,还要看它占满了多少灰度级。

4.3 AE目标亮度与权重策略

AE不是简单地把画面平均亮度拉到128就完事了。那样做出来的效果,我试过,惨不忍睹。

真正的AE需要回答三个问题:

  1. 目标亮度定多少?——不同场景目标不同,人脸场景目标亮度通常设在180~200,夜景则设在80~120。
  2. 哪些区域更重要?——中心区域、人脸区域、高亮区域,权重应该不一样。
  3. 怎么收敛?——一次调到位还是渐进调整?

4.3.1 权重策略

我常用的权重策略有三种:

策略名称 原理 适用场景 缺点
中心权重 画面中心区域权重高,边缘低 常规拍照,主体在中间 构图偏移时失效
人脸权重 检测到人脸后,人脸区域权重拉高 人像、自拍、视频通话 侧脸/遮挡时检测不到
高光保护 对接近255的像素降权,防止过曝 逆光、灯箱、天空场景 整体画面可能偏暗

实际工程中,我通常把三种策略混合使用。比如:人脸权重占60%,中心权重占30%,高光保护占10%。比例不是固定的,得根据场景动态调整。

4.3.2 收敛策略

AE的收敛过程,说白了就是「当前亮度」往「目标亮度」靠拢的过程。我一般用PID控制的思想来做:

  • P(比例):偏差大时大步调整,偏差小时小步微调。
  • I(积分):消除稳态误差,防止永远差那么一点点。
  • D(微分):抑制震荡,防止画面来回闪烁。

注意:AE的收敛速度不能太快,否则画面会「抽搐」。我见过一个项目,AE收敛时间只给了100ms,结果画面像抽风一样忽明忽暗。后来我把收敛时间拉长到500ms,配合D项的阻尼,才稳定下来。

4.4 AE整体流程

下面这张图是我自己总结的AE处理流程,你可以把它当成一个「标准参考」:

自动曝光(AE)处理流程图 自动曝光(AE)处理流程 传感器原始数据 统计亮度直方图 计算当前平均亮度 判断与目标亮度偏差 偏差大 偏差小 大步调整曝光参数 微调曝光参数 输出新曝光参数 关键说明 • 目标亮度由场景决定 • 权重策略影响直方图统计 • 收敛速度需PID控制

这个流程看起来简单,但每个环节都有坑。我举个例子:统计直方图的时候,如果直接拿全图所有像素算平均,遇到大面积纯色背景(比如蓝天、白墙),结果会严重偏离实际主体亮度。所以,我一般会先做「区域分割」,把画面分成M×N个块,每个块单独统计,再按权重加权平均。

4.5 实战中的AE调试要点

最后,分享几个我在项目中踩过的坑:

  • 不要死磕一个目标亮度:室内和室外、白天和夜晚,目标亮度应该动态变化。我习惯用一个「场景检测器」来切换目标亮度曲线。
  • 注意曝光参数的优先级:先调光圈(如果可调),再调快门,最后调ISO。因为光圈影响景深,快门影响运动模糊,ISO影响噪声——优先级从高到低。
  • 收敛速度要「软着陆」:不要一次调到位,分3~5步渐进调整。每步之间加一个帧间隔,让用户感觉不到变化过程。

一个小技巧:

调试AE的时候,我习惯在log里同时打印「当前亮度」「目标亮度」「曝光参数变化量」三列数据。一眼就能看出收敛过程是否平滑。如果发现亮度值来回震荡,八成是P项太大或者D项太小。

好了,AE的原理部分就聊到这儿。说白了,曝光三角是基础,直方图是眼睛,权重策略是大脑。把这三样东西吃透了,AE调试就成功了一大半。