当前位置:文档之家› 有关白平衡的理论知识

有关白平衡的理论知识

白平衡在一般的图像处理书籍都很少会提及,因为说到底白平衡只是一种对人眼视觉特性的模拟,说不上是对图像这个二维数据域的空间变换。

简言之,白平衡是传感器设备具备正确识别“白色”的能力。

我们先来看白平衡的“白”是什么。

不同的光源具有不同的光谱成分和分布,这在色度学上称之为色温(色温是颜色的定义,以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)的两个系数。

增益计算的方法有多种,比如查表法、迭代法等。

查表法是事先统计出一张表(一般会记录该传感器在几图4.22 白平衡增益计算迭代示意种常见色温下的经典值,这个工作很重要,目前各家传感器商都会做这个数据采集工作,并将之结果固化;高通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”白平衡是图像处理的一个极重要概念。

所谓白平衡(英文名称为White Balance),就是对白色物体的还原。

当我们用肉眼观看这大千世界时,在不同的光线下,对相同的颜色的感觉基本是相同的,比如在早晨旭日初升时,我们看一个白色的物体,感到它是白的;而我们在夜晚昏暗的灯光下,看到的白色物体,感到它仍然是白的。

这是由于人类从出生以后的成长过程中,人的大脑已经对不同光线下的物体的彩色还原有了适应性。

但是,作为拍摄设备,如数码相机,可没有人眼的适应性,在不同的光线下,由于CCD输出的不平衡性,造成数码相机彩色还原失真。

一般情况下,我们习惯性地认为太阳光是白色的,已知直射日光的色温是5200K左右,白炽灯的色温是3000K左右。

用传统相机的日光片拍摄时,白炽灯光由于色温太低,所以偏黄偏红。

所以通常现场光线的色温低于相机设定的色温时,往往偏黄偏红,现场光线的色温高于相机设定时,就会偏蓝。

为了解决不同色温下,引起的白色漂移现象。

由于白色对色温变化的响应最大,通常用白色来作为调整的基色。

通常的白平衡技术有:自动白平衡、钨光白平衡、荧光白平衡、室内白平衡、手动调节。

本文仅介绍其中的一种自动白平衡。

白平衡算法通常分为两步:白色点的检测,白色点的调整。

本方法采用一个动态的阀值来检测白色点。

详细算法过程为:1. 把图像w*h从RGB空间转换到YCrCb空间。

2. 选择参考白色点:a. 把图像分成3*4个块(块数可选)。

b. 对每个块,分别计算Cr,Cb的平均值Mr,Mb。

c. 对每个块,根据Mr,Mb,分别计算Cr,Cb的方差Dr,Db。

d. 判定每个块的近白区域(near-white region)。

判别表达式为:Cb(i, j) − (Mb + Db× sign(Mb )) < 1.5×Db && Cr(i, j) − (1.5×Mr + Dr× sign(Mr )) < 1.5×Dr设一个“参考白色点”的亮度矩阵RL,大小为w*h。

若符合判别式,则作为“参考白色点”,并把该点(i,j)的亮度(Y分量)值赋给RL(i,j);若不符合,则该点的RL(i,j)值为0。

3. 选取参考“参考白色点”中最大的10%的亮度(Y分量)值,并选取其中的最小值Lu_min.4. 调整RL,若RL(i,j)<Lu_min, RL(i,j)=0; 否则,RL(i,j)=1;5. 分别把R,G,B与RL相乘,得到R2,G2,B2。

分别计算R2,G2,B2的平均值,Rav,Gav,Bav;6. 得到调整增益: Ymax=double(max(max(Y)))/15;Rgain=Ymax/Rav;Ggain=Ymax/Gav;Bgain=Ymax/Bav;7. 调整原图像:Ro= R*Rgain; Go= G*Ggain; Bo= B*Bgain;图像处理二值化含笑:早就觉得图像处理有意思,不过一直畏惧它,现在尝试着走进去看看,发现了很多好玩的东西。

1:二值化或者黑白处理效果图:2:原理:图像二值化也叫图像黑白化,那么,彩色图像黑白化处理通常有三种方法:最大值法、平均值法、加权平均值法。

下面详细介绍三种方法的原理:最大值法:最大值法是每个像素点的RGB值等于原像素点的RGB值中最大的一个即R=G=B=MAX( R,G,B );效果,最大值发产生亮度很高的黑白图像平均值法:平均值法使每个像素点的RGB值等于原像素点的RGB值的平均值,即R=G=B=(R+G+B)/3加权平均法:加权平均法根据需要指定每个像素点RGB的权数,并取其加权平均值,即R=G=B=(Wr*R+Wg*G+Wb*B )/3Wr、Wg、Wb表示RGB的权数,均大于零,通过取不同的权数可实现不同的效果3:主要代码实现:int Height = bmp_old.Height;int Width = bmp_old.Width;Bitmap bitmap = new Bitmap(Width, Height);Bitmap MyBitmap = (Bitmap)bmp_old;Color pixel;for (int x = 0; x < Width; x++)for (int y = 0; y < Height; y++){pixel = MyBitmap.GetPixel(x, y);int r, g, b, Result = 0;r = pixel.R;g = pixel.G;b = pixel.B;Result = ((r + g + b) / 3);bitmap.SetPixel(x, y, Color.FromArgb(Result, Result, Result)); }Form3 output2 = new Form3(bitmap, "二值化");output2.MdiParent = this;output2.Show();。

相关主题