http://www.cnblogs.com/creat/archive/2010/12/11/1902799.html
白平衡在一般的图像处理书籍都很少会提及,因为说到底白平衡只是一种对人眼视觉特性的模拟,说不上是对图像这个二维数据域的空间变换。简言之,白平衡是传感器设备具备正确识别“白色”的能力。
我们先来看白平衡的“白”是什么。不同的光源具有不同的光谱成分和分布,这在色度学上称之为色温(色温是颜色的定义,以K(凯氏)为单位;对黑体(黑铁棒)加热,3200K时黑体发出的颜色定为白色;5600K时定为蓝色等;在Microsoft Picture Managemnet中色温称为色值)。物体本身反射入射光而显示出颜色,若光源色彩成分有变,势必会影响入射光的颜色,也直接或间接地改变了物体本来的颜色,形成色差。如一个白色的物体,在低色温的光线照射下会偏红,而在高色温的光线照射下会偏蓝。
实际生活中,不论是晴天、阴天、室内白炽灯或日光灯下,人们所看到的白色物体总是是白色的,这就是视觉修正的结果。人脑对物体的颜色有一定先验知识,可依据之侦测并且更正这种色差。但对于固体图像传感器而言,没有办法直接修正这种色温的改变,必须依靠内建的“白平衡”功能作调整。
物体颜色的改变特别是在使用人造光源的场合容易发生,因为传感器还是默认做正常光照下的白平衡,而人工光源色温与之的不同会导致拍得的照片会有不同程度的色差。如白炽灯照明下拍出的照片易偏黄;而在户外日光充足则拍摄出来景物也会偏蓝。同理若选用不同色温条件拍摄同一景物,也会呈诸多色差。
白平衡之“平衡”就是要对不同色温所引起的的色差进行校正,从而使白色的物体呈现真正的白色。数码相机中白平衡一般采用光学粗调和电路微调的方法进行。由于CCD、CMOS 图像传感器具有一定的光谱特性,因此必须在镜头前加上匹配的光学滤色镜,将红外等光线滤除,然后进行软件或电路微调。为了提高易用性,数码相机一般还支持自动白平衡。对于CCM来说,添加镜头来做调节不现实,只有靠自动白平衡算法来保证拍摄照片不失真了。因此,必须开发适合数码相机的自动白平衡算法,以保证拍摄照片不会失真。
传统摄影较少提到“白平衡”,主要是在因为底片上已经做了区分,如:大家都知道的富士胶卷适合室外,柯达胶卷适合室内。也可透过不同的滤色片来实现正确的色彩平衡,这需要若干昂贵的镜头。修改白平衡的方法,除了透过机身设定外,还可以透过计算机软件做事后修片;使用色温表测量现场的色温,之后将测量的数值输入到传感器中,完成白平衡的设定;一般白纸纸质不均,因此每次校正的白平衡也不见得相同,18%灰度色板是一种特殊处理过的色板,能表现达到均衡散光的效果,专业摄影人员常开个灰伞,除了是反光还有白平衡之解;现阶段大多数的数码相机、拍照手机的白平衡的功能都已相当准确。
简言之,白平衡就是在信道平衡模块中调整R/B增益,以合G的照度。
白平衡具有三个基本操作:(1) 色温估计,通过手工调节(取一个“标准白”的物体作为参考) 或算法统计的方法,找出图像中的白点,进而以此估计出表达色温的特征量,平均色差(若是设定色温下拍摄,则直接获得传感器中设定的该色温下的特征量);(2) 增益计算,采用查表或迭代的方法,计算出红色和蓝色增益(校正因子);(3)色温校正,通过Camera control在传感器的红色和蓝色通道乘上对应的校正因子,调整通道增益,以达到白平衡的效果.
人眼会去补偿各光源下的不同色温。固体图像传感器则需一参考点来重现白色,基于此参考点来重新计算其它颜色。举例来说,红灯照射白墙,则墙上会投射出红色(事实上这面墙原本应该是白色的)。但如果相机知道这面墙是白的,它将会补偿出所有的其它场景内的其它相应的颜色。知道这面墙是白色这个工作就是“色温估计”。色温估计是自动白平衡算法的三个基本操作中最重要的一环(手工白平衡不需做色温估计),没有正确的“W”,怎么“B”都不达效果。色温估计估算出正确的色差,才能保证后续操作的正确性。特别是在图像充满大面积彩色时,算法必须具有一定的鲁棒性,以保证色彩的完整性。这步工作就是俗称的找白点。一般的算法都是在YUV空间中做,OV2640是在RGB空间做,而MT9M112是在RYB空间(即亮度Y转换后)来做。这样效果会有一些差异。目前,国际上诸多的论文研究热点都在YUV空间中做色温估计白平衡处理,在RGB中做的效果不是很好。目前使用的较多的是Gray算法和高级Gray算法。Gray算法比较简单,不需要实验条件,直接做迭代计算可得
色温估计的目标就是估算出图像的平均色差。目前的色温估计算法中最基本的是计算整个图像的平均色差(但以平均色差来计算并不准确,[23]中提出以白色像素来计算色差可提高色温估计的精确度)。实际计算中为了实时操作,减少计算量,通常选取某个特定区域(如图像中央)像素进行计算。但若图像颜色较为单一或选定区域正好落入大的色块(红光下的白墙),以上算法求得的色温会非常不准确。为此,必须根据一定的约束条件,挑选出白色像素来计算色差。但由于RGB空间中实现较难,故目前CCM偶尔会出现白平衡失效现象,对于这个,我们也是没有办法。
增益计算是在色温估计的基础上,通过一定方法得到通道增益。通道增益即色温校正因子,有蓝色和红色两个分量,分别对图像蓝色和红色通道进行调整。为将Cb和Cr调整到0 (或接近0)的两个系数。
增益计算的方法有多种,比如查表法、迭代法等。查表法是事先统计出一张表(一般会记录该传感器在几种常见色温下的经典值,这个工作很重要,目前各家传感器商都会做这个数据采集工作,并将之结果固化;高通BB上集成的ISP上也做了这部分工作),记录不同的色温所对应的通道增益,具有速度快的优点;但由于表的容量有限,不能实现各种色温情况的连续调节。迭代算法则是根据Cb和Cr的关系,通过不断地调节μ和ν实现,如图4.22所示,其中λ为迭代步长,由算法给定。实际工作时为两者配合,色温估计后,先取与预估色温最接近的色温下参数,然后逐步做迭代,达到最终的白平衡。这完全是数据集做自学习,然后推广到整个实际中使用。
色温校正比较好理解,实现了“B”的过程。通过Camera control的作用,在增益调整放大器的蓝色和红色通道乘以各自的增益,从而实现对RGB三色的调节;使R/B增益合G的照度。要注意进行溢出处理,防止RGB输出超出0~255的范围。
白平衡的基本算法是Gray World假设算法。在该算法中,R、G、B信道增益为连续可调,最终使得R、G、B之均值可调。计算R/G与B/G,以时域滤波器来计算之。而高级Gray World算法则是建立在统计的基础上,先统计在各种光源下的对白板或者18%灰板的采集,然后基于曝光模式,设置相应的权重后重新计算各区中的R/G与B/G值,将之转为grid坐标;进而找到参考点,以之gain来做迭代。目前一般使用高级Gray World算法。
综上所述,自动白平衡是一个迭代过程,必须通过对连续图像的处理才能完成。自动白平衡是找出“W”,做“B”,那么手工白平衡则是是知道了“W”,做“B”