1. 曝光三要素:光圈、快门、ISO 的物理意义与数学关系
做自动曝光算法,第一件事就是搞懂曝光三要素。说白了,光圈、快门、ISO 这三个东西决定了传感器到底能接受到多少光,以及怎么处理这些光。我刚开始接触 ISP 时,总觉得这些是摄影师的活,后来才发现——不懂这三者的物理本质,自动曝光算法根本调不稳。
1.1 光圈:控制进光量的“瞳孔”
光圈是镜头里一个可调节的孔。物理上,它控制光线进入相机的通光面积。光圈大小用 F 数表示:
F = 焦距 / 光圈直径
注意,F 数越小,光圈直径越大,进光量越多。这个关系是反的,很多人一开始会搞混。
光圈面积与 F 数的平方成反比。F 值每变化 1.4 倍(即 √2),进光量差一倍。这就是为什么光圈档位是 1.0、1.4、2.0、2.8、4.0、5.6……
在数字传感器中,光圈由镜头模组中的步进电机驱动叶片实现。ISP 通过 I²C 或 SPI 接口向镜头驱动芯片发送控制字,调整光圈叶片开合角度。我遇到过一个问题:某款手机镜头的光圈控制精度只有 8 位,导致 F 值跳变时画面亮度出现肉眼可见的闪烁。后来我们做了插值补偿,才把过渡做平滑。
1.2 快门:控制曝光时间的“闸门”
快门决定传感器感光的时间长度。物理上,快门速度就是传感器暴露在光线下的时间,单位通常是秒或毫秒。
快门速度与进光量是线性关系:
进光量 ∝ 曝光时间
快门速度翻倍,进光量就翻倍。这个很好理解,你想想看,水龙头开两秒比开一秒接的水多一倍。
在数字传感器中,快门分为两种:
- 全局快门(Global Shutter):整帧像素同时开始曝光,同时结束。适合高速运动场景,但传感器成本高、噪声大。
- 卷帘快门(Rolling Shutter):逐行曝光,每行有微小的时间差。这是 CMOS 传感器的主流方案,成本低,但高速运动时会出现“果冻效应”。
我记得有一次做行车记录仪的 AE 算法,卷帘快门在高速行驶时拍到的路灯全是斜的。后来我们限制了最低快门速度,才把果冻效应压下去。
1.3 ISO:信号放大的“音量旋钮”
ISO 在胶片时代代表感光度,在数字传感器里,它本质是模拟增益和数字增益的组合。
物理上,ISO 不改变传感器接收到的光子数,它改变的是光电转换后电信号的放大倍数:
数字输出值 = (光子数 × 量子效率 × 模拟增益 + 暗噪声) × 数字增益
ISO 每翻一倍,信号放大一倍,但噪声也同步放大。这就是为什么高 ISO 下画面噪点明显。
在 ISP 流水线中,ISO 的实现分两段:
- 模拟增益(Analog Gain):在 ADC 转换前对电压信号放大。通常由传感器内部的 PGA(可编程增益放大器)实现,增益范围一般是 1x ~ 16x。
- 数字增益(Digital Gain):在 ADC 转换后对数字信号做乘法。这个可以在 ISP 里做,但会放大量化噪声。
1.4 三要素的数学关系:曝光三角形
曝光量由光圈、快门、ISO 共同决定。数学上可以写成:
曝光量 = (1 / F²) × 曝光时间 × (ISO / 基准ISO)
这个公式是自动曝光算法的核心。AE 算法的任务就是找到一组 (F, T, ISO),使得曝光量落在目标亮度附近。
我习惯用对数域来处理这个关系,因为人眼对亮度的感知是对数的:
log(曝光量) = -2 × log(F) + log(T) + log(ISO) + 常数
这样,三要素的调整就变成了线性加减法,算法实现起来更直观。
1.5 数字传感器中的对应实现
下面这张表总结了曝光三要素在数字传感器中的物理实现和控制方式:
| 要素 | 物理意义 | 传感器实现 | 控制接口 | 典型范围 |
|---|---|---|---|---|
| 光圈 | 通光面积 | 步进电机驱动叶片 | I²C / SPI | F1.0 ~ F16 |
| 快门 | 曝光时间 | 传感器行/帧时序控制 | 寄存器配置 | 1μs ~ 30s |
| ISO | 信号放大倍数 | PGA(模拟)+ ISP(数字) | 寄存器 + ISP 增益表 | ISO 50 ~ 12800 |
嗯,这里要注意一点:传感器的曝光时间不是随便设的。它必须与帧同步信号(VSYNC)对齐,否则会出现帧错位。我见过一个案例,工程师把曝光时间设得比帧周期还长,结果传感器直接罢工了。
1.6 知识结构图:曝光三要素与 AE 算法的关系
下面这张 SVG 图展示了曝光三要素、传感器实现、以及它们如何输入到自动曝光算法中:
1.7 工程落地要点
做自动曝光算法时,三要素的调整顺序很重要。我总结了一个优先级原则:
- 先调光圈:如果场景亮度变化大,优先调整光圈。因为光圈不引入噪声,也不影响帧率。
- 再调快门:光圈调到底还不够,就调快门。但要保证快门不触发果冻效应或运动模糊。
- 最后调 ISO:前两个都到极限了,才动 ISO。因为 ISO 会放大噪声,是最后的手段。
另外,不同传感器的增益曲线不一样。有些传感器的模拟增益不是连续的,而是分档的。比如 1x、2x、4x、8x。这时候数字增益就要做插值来填补档位之间的空隙。我曾经踩过这个坑——直接跳档导致画面亮度突变,后来加了平滑过渡才解决。
好了,曝光三要素的物理意义和传感器实现就讲到这里。记住那个对数域的曝光公式,后面做 AE 算法时会反复用到。