4.8. 传感器上标定

像素单元的原始输出尚不能直接使用。在数据离开传感器之前,会对其施加若干校正——一部分在芯片的硅片中完成,一部分在为芯片编程的驱动代码中完成——以应对传感器在此过程中引入的种种缺陷。它们在每一帧上以固定顺序运行:先是列 固定模式噪声(FPN)微调,然后是黑电平减除,接着是坏点校正,最后是镜头阴影校正。了解每一步的作用很重要,因为到达用户代码的图像已经历过所有这些处理。

4.8.1. 列 FPN 校正

传感器的每一列都有自己的放大器和列 ADC,而它们之间微小的制造差异意味着每一列的读出都与相邻列略有不同。如果不加校正,这种 固定模式 会在输出中表现为淡淡的竖直条纹——这些条纹会逐帧保持不动,因为它们来自硅片本身而非场景。传感器在出厂时测量每列的偏移和增益微调值,将它们存入其标定 ROM,并在每次读出时、在任何后续校正运行之前应用它们。先做这一步可以让处理流程的其余部分假定每一列的行为都相同,包括黑电平标定接下来要用到的暗参考像素。

4.8.2. 黑电平标定

ADC 的零点——本应对应于空光电二极管的数字计数值——并不是完全稳定的。它会随温度、随供电电压波动而漂移,并且像素之间也略有不同。如果不加校正,一帧完全黑暗的画面读出来不会是零;每个像素都会带有一个小的正 暗偏移

标准的修正方法是在传感器边缘设置一些被金属物理遮盖、从而永远不会有光到达的行或列。它们的数字计数值给出了当前工作条件下真实的暗参考。传感器每一帧都读取这些被遮盖的像素,按行或按列对它们求平均,并从其他每一个像素中减去该平均值。这样,无论温度或供电如何漂移,受光像素在光电二极管未受光时都会读出零计数。

4.8.3. 坏点校正

任何传感器中都有一小部分像素是 缺陷的——无论有多少光到达它们,它们都读出一个恒定值(卡在高位或卡在低位)。有些缺陷来自制造差异,更多的则在传感器的使用寿命中缓慢累积(长期运行期间宇宙射线的击中通常是元凶)。

现代传感器用一个小型空间滤波器实时处理这一问题。每一帧中,都将每个像素与其同色相邻像素进行比较;任何偏离局部中值足够远、以至于不合理的像素,都会被一个由这些相邻像素推导出的值所替换。该滤波器既能捕捉出厂缺陷,也能捕捉之后产生的缺陷,而无需逐个传感器标定的坏点映射表,并且缺陷在输出中不可见。

4.8.4. 镜头阴影校正

cos⁴ 衰减 与来自镜头外壳的机械渐晕相结合,使每一帧未校正的画面都有明显的角落变暗。传感器上的 镜头阴影校正(LSC)硬件通过将每个像素乘以一个取决于其在画面中位置的增益来进行补偿——中心处为 1.0,朝向角落平滑地升高,以遵循所测衰减曲线的倒数。

传感器提供乘法器硬件,但增益映射表本身则是 MCU 的职责。驱动在启动时将该映射表写入传感器的 LSC 寄存器,要么来自驱动存储的标定数据,要么来自对一个平整参考目标的新鲜测量。有些传感器会将映射表压缩成一小组多项式系数,以便片上寄存器能够容纳它。

LSC 取决于镜头。更换镜头会移动衰减曲线,因此为某一镜头标定的 LSC 映射表不会与另一镜头匹配——一张误用的映射表看起来会像是角落昏暗(校正不足)或角落出现明亮的斑块(校正过度)。