ISP 之 AE
自动曝光(Auto Exposure)
自动曝光流程
- 根据 ISP 硬件生成的图像曝光统计数据评估当前图像的曝光质量。 前主流的 ISP 硬件都会提供关于图像的直方图统计数据,AE 算法可以利用直方图的均值来判断图像是否曝光适当。
- 如果曝光质量需要调整,则根据当前的工作参数和理想曝光目标生成下一帧图像的工作参数。 主要调控对象是光圈、sensor 积分时间、sensor 增益(包含模拟增益和数字增益)、ISP 数字增益这四个参数。
- 将新的工作参数写入各硬件设备,驱动光圈、sensor 快门及增益到达新的位置。
曝光值 EV
现在较为流行的是 1960 年代提出的 APEX 曝光系统。APEX 全称是 The Additive System of Photographic Exposure,该系统定义了一个经验公式,基本形式如下:
\[ \frac{t}{N^2} = \frac{K}{L_sS} \]
其中:t 是曝光时间,单位为秒;N 是光圈的 f-stop 值;Ls 是场景照度,可以是任一适当的单位,如 lux;S 是相机敏感度,可以使用 ISO;K 是相机厂家提供的与具体相机配置相关的一个常数,使用该常数能够获得厂家认为最佳的曝光效果。
APEX 曝光方程总结了曝光时间、光圈、相机感度、场景亮度之间的关系。在此基础上可以定义一个曝光值 (exposure value)参数,代表能够给出同样曝光的所有相机光圈快门组合。它的定义是:
\[ EV = log_2 \frac{N^2}{t} \]
EV0 对应于 ISO100,曝光时间为 1 秒,光圈为 f/1.0,以及与之等效的所有曝光组合,这些组合可以使 18%的中性灰卡在所处光照条件下获得合适的曝光。因此曝光值主要体现了拍摄场景的亮度,同时在一定程度上也能反映相机的灵敏度。
曝光值每增加 1 称为增加一挡曝光,也就是将曝光量减半,比如将曝光时间或光圈面积减半,因此可以从 EV0 出发,按照光圈、快门加倍或减半的方式推导出其余的曝光档位,一般常用的档位在-6~20 之间。
曝光三角形 Exposure Triangle
AE 算法的策略
AE 算法的策略主要分光圈优先、快门优先、增益优先。
- 光圈优先算法会优先调整光圈到合适的位置。当光圈调整到极限后再开始分配曝光时间和增益。
- 当 camera 光圈不可调时,AE 算法通常会优先分配曝光时间,再分配 sensor 增益和 ISP 增益。
- 增益优先则是优先分配 sensor 增益和 ISP 增益,再分配曝光时间,适合拍摄运动物体的场景。
增加光圈可以增大 sensor 收集光信号的面积,增加曝光时间可以延长 sensor 积累光信号的时间,这两种途径都有助于积累信号,提高信噪比,所以会提高图像质量。
sensor 增益实际上存在两种形式,即模拟增益和数字增益。模拟增益在放大信号的同时会等比例地放大噪声,所以对提高信噪比没有好处,但也没有坏处,可以放心地使用。而数字增益由于精度的限制会引入量化噪声,不仅对提高信噪比没有好处,反而会有恶化信噪比,降低图像质量,因此需要慎用。
ISP 增益是纯数字增益,和 sensor 数字增益是同样的道理,所以通常很少用。
曝光统计
曝光统计分工
曝光统计需要对图像中的每一个像素进行分类和计算,涉及的计算量非常大,对时序要求非常严格,所以这个工作只能交给硬件流水线去做,不适合 CPU 处理。
AE 算法中根据统计数据评估图像质量、产生新的控制参数的部分则有逻辑比较复杂、算法经常需要升级、数据吞吐量一般不大等特点,因此非常适合用 CPU 处理。
AE 统计策略
- 全局统计 是指将图像全部像素都统计进来,像素的权重完全一样。
- 中央权重统计 是指只统计图像中间部分,这主要是因为人们关注的重点通常都位于图像的中间部分;镜头的成像效果也是中央部分清晰度最高,越到边缘清晰度越低。
- 中央加背景 图像中间部分占 50%权重,图像整体作为背景占 50%权重。
- 加权平均统计 是指将图像分为不同的部分,如 9 宫格或者 13~15 个分散的曝光格,每一部分赋予不同的权重,通常中间部分赋予较大权重,相应的边缘部分则赋予较小的权重。
- 用户 ROI 用户通过人机界面划定一个窗口,AE 只统计这个固定窗口内的像素值。
典型 AE 算法
基本思想
典型的 AE 算法是一种基于负反馈原理的 PID 算法。算法的控制参数分段可调,在不同的区间内算法的收敛速度不同,以期在过渡平滑性和快速响应之间取得较好的平衡。
- 在当前曝光量与目标量差别在 range0 以内的时候,说明当前曝光已经满足要求,不需要进行调整。
- 当差别在 range1 的范围内时,则说明当前曝光与要求的光照有差别,但差别不大,只需要用较小的步长来进行调节即可。
- 当差别在 range2 的时候,则表明差别较大,需要用较大步长来进行调节。
控制参数
- 当前帧的曝光量 由 sensor 曝光时间、sensor 增益、ISP 增益组成
- 增益系数 g=target/measured, 其中 target 为理想画面亮度,measured 为当前画面亮度的实测值
因此 AE 算法的核心任务就是计算正确的 g 参数,这个参数能够使画面得到正确的曝光。
阻尼 (damping)
当计算出正确的 g 参数后,一般并不会让其立刻在下一帧图像就生效。这是因为如果增益变化较大,图像就会产生闪烁,主观感受不好。通常人们更喜欢画面平滑过渡,因此每帧图像的增益变化不宜过大。实现平滑的方法就是给新的参数人为施加一个阻尼,使其缓慢地向新参数过渡。用数学公式描述就是:
\[ g(n)= (1-s) * g(n-1) +s * g_{target} \]
参数分解
当根据路径规划策略计算出下一帧的 g 参数后,需要遵循一定的策略和约束把 g 参数进一步映射为 sensor 曝光时间、sensor 增益、ISP 增益等设备控制参数。分解出来的控制参数必须同步生效才能使画面获得预期的曝光。如果某一项参数未能与其他几项同步生效,则画面会因为短暂过亮、过暗等原因出现闪烁,这是需要避免的。
所有参数都需要在一个特定的时间窗口内生效,即前一帧图像已经结束,新一帧图像尚未开始的这段时间,也就是 sensor 的垂直消隐(vertical blanking)窗口,这个窗口时间很短,典型值在 3~5 毫秒左右,更短的可以到 1ms,如下图所示。
现在的 sensor 为了方便使用,缓解配置参数时间窗口过短的压力,往往都支持一组影子(shadow)寄存器,需要同步生效的参数(曝光时间和增益)可以在任何时间点写入 shadow 寄存器,当 sensor 开始捕捉新的一帧图像之前,会自动把 shadow 寄存器的内容同步到实际生效的寄存器,这样就把几个毫秒的时间窗口扩展成一帧时间,极大地缓解了用户压力。
需要注意的是,虽然这个方案为软件争取到了一帧的缓冲时间,但同时也意味着系统的响应延迟(latency)增加了一帧。
AE 的呼吸效应
- 图像质量呼吸 如果通过调整增益那么会对图像质量产生影响。
- 亮度呼吸 参数设计不合理可能出现亮度震荡。