开坑记录一下白平衡相关算法,从两个最基本的白平衡算法开始。
白平衡算法之Gray World和White Patch
颜色作为物体最基本的属性,在大部分场合对人类视觉而言是一个能够轻而易举捕获的信息。但在数字成像过程中,颜色是一种及其不稳定的图像特征。数字成像时获取的颜色主要依赖三个因素:物体表面光谱反射率、场景中的光照条件和成像器件的对光的灵敏度曲线。人类视觉系统存在一种颜色恒常性功能,能够在不同的光照下自动消除光照的影响,从而获得较稳定和准确的物体颜色。但是成像设备不具备这种特质,因此白平衡算法对成像颜色好坏起到了至关重要的作用。
白平衡算法的核心内容就是估计光照。但是从一幅已有图像去估计光照本身就是一个病态问题,因此,现有的白平衡算法基本都是基于一定的假设和先验条件。其中,Gray World和White Patch是两个基于各自假设,简单、实用的白平衡算法。
White Patch(MaxRGB)
White Patch假设:图像中,RGB颜色通道的最大响应是由场景中的白色表面引起的。理论上白色表面可以反射场景光照的颜色,因此,RGB通道中最大的值将被作为图像的光照颜色。所以,该算法又被称为MaxRGB算法。其数学形式为:
max x f ( X ) = k e (1) \max\limits_{x}f(X)=ke\tag1 xmaxf(X)=ke(1)
其中 X X X表示像素点坐标, k k k为用于校准光照的常量, e e e为光照。该最大值是各通道分别计算,而不是必须是一个像素点的三通道最大。这就导致了该算法在很多场合中其实并不适用,因为该算法假设需要在场景中存在一个白色(标准光源下)像素点或者三通道反射率相同的点(灰点)。当场景中没有这样的点的时候,该算法的表现就会比较糟糕。而以后的许多算法也是在找白点上做了各种改进,该算法最大的优点就是简单高效。
具体的实现也比较简单,实际用的时候,白点的定义也可以有很多。归一化后可以以1作为最大点,也可以用绿色通道最大值作为最亮点求各个通道的增益系数。
算法流程
- 计算三通道各自最大值 R m a x R_{max} Rmax, G m a x G_{max} Gmax, B m a x B_{max} Bmax。
- 计算增益, k = [ R m