自动曝光(AE)基础:曝光三要素与评价指标

自动曝光,说白了就是让相机自己决定「进多少光」。我刚开始做手机相机算法时,觉得这玩意儿不就是调个亮度嘛,后来被各种场景打脸——逆光、夜景、灯牌闪烁……嗯,这里面的门道比想象中深得多。

今天咱们就把 AE 的底裤扒干净。从物理原理到算法目标,一条线捋清楚。

曝光三要素:光圈、快门、ISO

这三兄弟共同决定了一张照片的亮度。我习惯用一个比喻:曝光 = 水管灌水。

  • 光圈(Aperture):水管的口径。口径越大(F 值越小),单位时间进水量越大。
  • 快门(Shutter Speed):开水龙头的时间。时间越长,总进水量越多。
  • ISO(感光度):水桶的放大倍数。ISO 越高,同样的水量看起来越「满」,但噪声也越明显。

你想想看,这三个参数互相制约。大光圈能进光,但景深浅;慢快门能累积光,但手抖就糊;高 ISO 能提亮,但画质崩。AE 算法的核心,就是在这些矛盾里找一个平衡点。

参数 物理含义 常见范围 副作用
光圈(F 值) 镜头通光口径 F1.4 ~ F16 F 值越小,景深越浅
快门(秒) 传感器曝光时间 1/8000s ~ 30s 慢快门易模糊
ISO 信号放大增益 100 ~ 12800 高 ISO 噪声大
我的经验:在手机平台上,光圈通常是固定的(因为镜头模组尺寸限制)。所以 AE 算法主要调快门和 ISO。我做过一个项目,客户要求夜景模式必须用 F1.8 光圈 + 最长 1/4s 快门,剩下的亮度缺口全用 ISO 补——结果噪声压不住,最后还是加了多帧降噪才搞定。

曝光值与亮度的数学关系

曝光值(EV, Exposure Value)是一个标准化的亮度度量。公式很简单:

EV = log₂(F² / T)

其中 F 是光圈 F 值,T 是快门时间(秒)。ISO 的影响单独算:

EV_iso = EV + log₂(ISO / 100)

举个例子:F2.0 光圈、1/100s 快门、ISO 100,EV 是多少?

EV = log₂(2² / 0.01) = log₂(4 / 0.01) = log₂(400) ≈ 8.64

这个值越高,场景越亮。晴天户外大概 12~15 EV,室内灯光大概 4~7 EV,月光下可能只有 -2~0 EV。

关键点:AE 算法不是直接控制 EV,而是通过调整三要素来「逼近」目标 EV。目标 EV 通常由场景分析决定——比如人脸区域要 18% 灰,天空区域不能过曝。

AE 的目标:到底要调成什么样?

AE 的目标说起来就一句话:让图像亮度落在人眼觉得「舒服」的范围内。但落到算法里,需要拆成几个具体指标。

目标亮度(Target Luminance)

通常用图像的平均亮度或中值亮度来衡量。我习惯把 Y 通道(亮度)的均值作为参考。目标值一般设在 100~120(8bit 图像,0~255 范围)。

  • 18% 灰卡标准:专业相机常用,对应 Y ≈ 118。
  • 人脸优先:检测到人脸时,人脸区域亮度优先达标,背景可以适当牺牲。
  • 场景自适应:夜景可以偏暗一点(保留氛围),文档扫描要亮一点(文字清晰)。
避坑指南:我曾经在一个行车记录仪项目里,直接把目标亮度设成固定 120。结果晚上路灯场景,算法拼命拉 ISO,画面全是彩色噪点。后来改成根据环境照度动态调整目标值——暗场景目标亮度降到 80,反而观感更好。

过曝/欠曝容忍度

不是所有像素都要完美曝光。算法需要定义「哪些区域可以暗,哪些区域不能亮到爆」。我常用的策略:

  1. 高光保护:亮度 > 240 的像素占比不能超过 1%。否则天空、灯牌会变成一片死白。
  2. 阴影容忍:亮度 < 20 的像素占比可以到 5%~10%。暗部细节丢失比高光过曝更容易接受。
  3. 人脸区域:人脸像素必须在 80~200 之间,不能过曝也不能欠曝。
区域类型 容忍范围 惩罚权重
高光(>240) < 1% 像素 高(过曝不可逆)
人脸 80 ~ 200 极高(用户敏感)
阴影(<20) < 10% 像素 低(可后期提亮)
主体区域 60 ~ 220 中

AE 的评价指标:怎么才算「好」?

算法调完了,总得有个量化标准。我一般用三个指标来评价 AE 效果:

  • 亮度误差:实际平均亮度与目标亮度的差值。误差 < 5 算优秀,< 10 算合格。
  • 过曝率:过曝像素占比。超过 2% 就要报警。
  • 收敛速度:从场景切换到达标需要的帧数。手机相机一般要求 3~5 帧内收敛。
一个实用技巧:调试 AE 时,别只看平均亮度。我习惯同时看直方图——如果直方图左右两端都撞墙(过曝+欠曝同时存在),说明场景动态范围太大,单帧 AE 救不了,得上 HDR 或多帧融合。

AE 核心流程:从场景到参数

下面这张图是我自己总结的 AE 算法核心流程。每次做新平台移植,我都会先把这个框架搭好。

AE 算法核心流程 传感器 RAW 数据 1. 亮度统计(直方图/分区) 2. 场景分析(人脸/逆光/夜景) 3. 目标亮度计算 4. 参数搜索(快门/ISO/光圈) 输出曝光参数 反馈闭环:每帧迭代 直到亮度误差达标 反馈迭代

这个流程里,最关键的其实是第 2 步——场景分析。你想想看,同一个亮度值,在白天和夜景里的「舒服」标准完全不一样。我见过不少团队直接把第 2 步省掉,结果就是夜景过曝、白天欠曝,怎么调都别扭。

总结一下:AE 不是简单的「亮了就降、暗了就升」。它需要理解场景、保护高光、照顾人脸、平衡噪声。三要素是工具,评价指标是尺子,场景分析才是灵魂。