2、自动曝光(AE)基础:曝光三角、统计信息与控制策略
自动曝光,说白了就是让摄像头像人眼一样,能自动适应亮暗环境。你拿着手机从室内走到室外,画面不会突然过曝或全黑,这就是AE在干活。
我刚开始做ISP时,觉得AE不就是调调亮度嘛,有什么难的?直到第一次把模组装到户外球机上,大太阳底下画面一片惨白,树荫下又黑得啥也看不见。嗯,从那以后我才老老实实把AE的每个环节啃透。
2.1 曝光三角:光圈、快门、增益
曝光量由三个参数共同决定,这就是经典的曝光三角。在嵌入式摄像头里,光圈通常是固定的,所以我们主要调快门和增益。
| 参数 | 物理含义 | 嵌入式中的控制方式 | 典型范围 |
|---|---|---|---|
| 光圈 (Aperture) | 进光孔大小 | 固定(手机/安防镜头)或电机驱动 | F1.4 ~ F16 |
| 快门 (Shutter) | 感光时间 | 寄存器写入曝光行数/时间 | 1/10000s ~ 30s |
| 增益 (Gain) | 信号放大倍数 | 模拟增益 + 数字增益 | 1x ~ 64x (通常) |
核心原则:先调快门,再调增益。因为增益会放大噪声,快门只是延长曝光时间。我见过不少新手上来就拉增益,结果画面噪点满天飞。
举个例子。你在室内灯光下,目标亮度是120 lux。先拉长快门到1/30s,如果还不够亮,再加一点点增益。千万别反过来——先加增益到8x,再调快门,那画面就没法看了。
2.2 AE的统计信息
AE要干活,得先知道当前画面长什么样。Sensor把原始数据送过来,ISP的统计模块会算出几个关键指标。
2.2.1 亮度直方图
直方图把像素亮度从0到255分成256个bin,统计每个bin里有多少像素。它能告诉你画面的亮度分布。
- 左偏:暗部像素多,画面偏暗
- 右偏:亮部像素多,画面偏亮
- 中间集中:对比度低,灰蒙蒙的
- 两端溢出:过曝或欠曝区域
我的经验:只看平均亮度容易踩坑。比如夜景里有一盏路灯,平均亮度可能刚好,但暗部全黑、亮部过曝。直方图能帮你发现这种问题。
2.2.2 平均亮度
这个最简单,就是全图亮度的算术平均值。很多入门级AE算法就靠它做反馈。
但要注意——平均亮度对场景不敏感。大面积天空+小面积人物,平均亮度会被天空拉高,人脸就欠曝了。所以我一般建议用分区加权平均,把画面分成3x3或5x5的格子,中心区域权重高一些。
2.3 AE控制策略
有了统计信息,接下来就是怎么调。AE控制策略说白了就是一个闭环反馈系统。
2.3.1 常用控制算法
实际工程里,AE控制算法就那么几种,各有各的脾气。
| 算法 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| PID控制 | 比例-积分-微分调节 | 响应快,稳态误差小 | 参数整定麻烦,场景切换可能震荡 |
| 查表法 | 预置曝光参数表 | 简单可靠,无震荡 | 场景覆盖不全,需要大量标定 |
| 爬山法 | 逐步逼近目标亮度 | 实现简单,适应性强 | 收敛慢,容易陷入局部最优 |
避坑提醒:我曾经在一个项目中用了纯PID控制,结果摄像头对着天空时,云飘过去就触发剧烈震荡,画面一闪一闪的。后来加了死区和滞回,才稳住。记住——AE控制一定要有防抖机制。
2.3.2 实际工程中的策略组合
我个人的习惯是,把场景分成几类,每类用不同的策略:
- 稳定场景(室内、监控):用PID,追求精度
- 快速变化场景(行车记录仪、机器人):用查表法+前馈,追求响应速度
- 极端光照(逆光、夜景):用爬山法+直方图约束,避免过曝或欠曝
你想想看,行车记录仪从隧道出来那一瞬间,如果AE反应慢了,画面白花花一片,啥也录不到。这时候查表法直接跳到户外参数,比PID慢慢调快得多。
2.4 小结
AE的基础就这些:曝光三角决定了你能调什么,统计信息告诉你怎么调,控制策略决定了调得好不好。下一块内容我们会深入AE的工程实现,包括参数标定、收敛速度优化和场景切换处理。