冯·克里斯假设
相机校准最简单也是最常用的方法就是依据冯·克里斯假设[1]。这种方法旨在将色彩转换为LMS色域,然后每个通道仅使用三个乘法器便可进行校正。该假设假定通过单独调整三种视椎细胞反应的增益,就可以实现人视觉系统的色彩恒定性。这三种视椎细胞反应的增益取决于感知环境,即色彩历史和周边环境。两个辐射光谱f1和f2的视椎细胞反应可以通过适当选择对角适应矩阵D1和D2来匹配,即,使得D1 •S•f1 =D2•S•f2,。其中S为视椎细胞敏感度矩阵。在LMS(长中短波敏感视椎细胞反应域)中,有:
这种方法的优势在于相对简单,易于实现,仅使用三个并行乘法器,并将其作为数字图像传感器或图像传感器流水线(ISP)的一部分:
在实际实现中,使用RGB色域替代LMS域来调整通道增益。一种颜色(以白色为代表)通常用相等的R、G、B值来表示。但是,针对某种色彩调整感知视椎细胞反应或R、G、B值,不能保证其它色彩也得到如实表达。
分量校正
对任何特定的色彩分量,冯•克里斯假设只能表达输入和输出之间的线性关系。假设用相似的数据表达(比如每分量8位、10位或12位),除非k等于1.0,否则部分输出动态范围就无法使用,或者部分输入值对应于需要剪切或钳位的值。除了使用乘法器,还可以使用小规模的基于分量的查找表来表达任何定义输入/输出映射的函数。这样在一个模块中就可以实现传感器/显示器的非线性与伽马校正。在采用FPGA图像处理流水线实现方案中,可以使用赛灵思伽马校正IP模块来完成这一运算。
完整查找表
相机校准可为所有可能的相机输入三色刺激值分配预期值。我们可以将所有可能的输入RGB值预期值存储在一个大型查找表中,但这种方案有两个弊端。第一个问题是内存大小。对10位的色彩分量而言,这个查找表将达到230字(4GB)的深度、30位的宽度。第二个问题是初始化值。一般来说,通过校正测量,只能建立数十到数百个相机输入值/预期输出值对。其余稀疏的查找表值必须通过内插得到。这种内插工作并不轻松,因为异构分量输入到输出函数并非是单调或平滑的。图2a所示即为R、G、B输入(行)输出(列)值的测量值与预期值对。
通过对内插得到的经验结果进行视觉评估(图2b),结果表明内插法与基于伽马校正和色彩校正矩阵的解决方案相比并没有明显的质量改进。大多数图像或视频处理系统均受制于对外部存储器的访问带宽。大型查找表要求使用外部存储器;逐像素访问需要很高的带宽;而且查找表内容是静态的(难以逐帧重新编程),会限制完整查找表解决方案在嵌入式视频/图像处理应用中的实际使用。
色彩校正矩阵
我们在本文中介绍的校正方法将向您演示如何采用3×3矩阵乘法器进行坐标转换,旨在让测得的红、绿和蓝三种色彩分量正交化。这种方法与冯•克里斯方法相比的优势在于所有三个色彩通道都参与了校正过程。比如,在调整绿色通道增益时,可以结合红色通道和蓝色通道的信息。另外,这种方法还适合用同一模块同步进行相机校准和白平衡校正,并逐帧更新矩阵系数以平滑匹配不断变化的光源。
白平衡校正使用的两种最简单的算法是灰度世界算法和白点算法。这两种方法均使用RGB色域。
灰度世界算法[2]依据这样的启发条件,即虽然场景中的不同物体有截然不同的颜色,场景颜色的平均值(红、绿、蓝三种颜色的平均值)应该是中性的灰色。因此,一帧中R、G、B平均色值之差能体现出光源的颜色信息。校正的作用是进行色彩转换后使得到的平均色值完全相同。灰度世界算法相对容易实现。但是如果场景中出现大型运动物体,这种方法就会产生严重误差,导致原生的场景色彩掉色或变化。