灰色世界法(greyworldmethod)
要計(jì)算未知光源的特性必須從圖片中提取相關(guān)的統(tǒng)計(jì)特性。當(dāng)我們能夠僅使用一個(gè)統(tǒng)計(jì)特性就獲得未知光源特性時(shí),算法就變得非常簡(jiǎn)單了。在這種情況下,未知光源必須在整幅圖片上都是統(tǒng)一的。均值于是就成為了此類(lèi)方法之下最好的統(tǒng)計(jì)指標(biāo)。而灰色世界法正是利用了均值作為估算未知光源的關(guān)鍵統(tǒng)計(jì)量。
從物理意義上說(shuō),灰色世界法假設(shè)自然界景物對(duì)于光線的平均反射的均值在總體上是個(gè)定值,這個(gè)定值近似地為“灰色”。在給定圖片的白平衡算法中,灰色世界假設(shè)圖片中的反射面足夠豐富,以至于可以作為自然界景物的一個(gè)縮影。若這幅圖片是在經(jīng)典光源下拍攝的,其均值就應(yīng)該等于灰色。若這幅圖是在非經(jīng)典光源下拍攝的,那么均值就會(huì)大于或者小于灰色值。而該均值對(duì)于灰色的偏離程度則反映了未知光源相對(duì)于已知光源的特性。
雖然這個(gè)方法比較簡(jiǎn)單,但是仍然可以從一些方面進(jìn)行調(diào)整。一個(gè)方面就是對(duì)于灰色的定義形式的選擇。包括對(duì)于光譜的定義、對(duì)于光譜成分的定義和在經(jīng)典光源之下的RGB的響應(yīng)。另一個(gè)更加重要的調(diào)整方面就是對(duì)于灰色的選擇。不管如何定義灰色,最佳的灰色之選必然是自然界實(shí)事上出現(xiàn)的灰色。但是這個(gè)值是無(wú)法獲得的(除非是合成數(shù)據(jù)),所以對(duì)于灰色的選擇是不同的灰色世界算法的一個(gè)重要的區(qū)別點(diǎn)。 一個(gè)方法是假設(shè)這個(gè)灰色就是實(shí)事上的灰色。也就是說(shuō)反射光譜是均衡的。給定光源之下的RGB響應(yīng)是純白色對(duì)此光源的響應(yīng)值的一部分。比方說(shuō),可以使用50%作為反射率(雖然這個(gè)灰色值對(duì)于人眼視覺(jué)習(xí)慣而言可能過(guò)于明亮)。
另一種方法,就是根據(jù)大量的數(shù)據(jù)提煉出一個(gè)均值,并把它定義為灰色。這種方法提煉的灰色值可能因?yàn)閿?shù)據(jù)庫(kù)使用的不同而有所不同。最終提煉的灰色也能僅適用于原始的數(shù)據(jù)庫(kù),而對(duì)于數(shù)據(jù)庫(kù)未包括的圖片的適用度就會(huì)比較差一些。確定下來(lái)的灰色表達(dá)形式可以用來(lái)表示。下標(biāo)i表示信道,上標(biāo)c為canonical的首字母,表示經(jīng)典光源。
在確定灰色的表達(dá)形式后只要用RGB響應(yīng)與經(jīng)典光源下灰色的比值來(lái)歸一化圖片就可以了。假設(shè)RGB響應(yīng)均值為,下標(biāo)i表示信道,上標(biāo)U為Unknown的首字母,表示未知光源。那么歸一化率的計(jì)算式為如下式所示: 根據(jù)光源轉(zhuǎn)換理論,從未知光源到經(jīng)典光源下圖片表達(dá)式的轉(zhuǎn)換式如下式所定義: 那么,灰色世界法的計(jì)算過(guò)程如下圖所示:
?
本實(shí)驗(yàn)選擇的灰色值為(129,129,129),具體的matlab實(shí)現(xiàn)程序如下:
?
偏藍(lán)圖片
白平衡調(diào)整后的圖片
?
正常光照下的圖片
?
動(dòng)態(tài)閥值的自動(dòng)白平衡法
基于動(dòng)態(tài)閥值的自動(dòng)白平衡法(AutomaticWhiteBalanceMethod)這個(gè)算法是通過(guò)對(duì)圖片的ycbcr色空間的分析來(lái)確定參考白點(diǎn)的,所以次算法可以說(shuō)是自適應(yīng)白平衡算法。本算法選擇參考白點(diǎn)的閥值是動(dòng)態(tài)變化的,所以對(duì)于不同的圖片,其閥值也不同。通過(guò)對(duì)圖片的cbcr坐標(biāo)空間的分析,我們可以看到一個(gè)接近白色的區(qū)域(near-whiteregion)是包含著參考白點(diǎn)的。通過(guò)這個(gè)思路,我們可以通過(guò)對(duì)圖片分區(qū),然后找出參考白點(diǎn),然后在通過(guò)vonkviesmodel來(lái)調(diào)整圖片時(shí)期實(shí)現(xiàn)白平衡。這樣,這個(gè)算法就包括了兩個(gè)步驟了:尋找參考白點(diǎn),白點(diǎn)調(diào)整。尋找參考白點(diǎn):
為了確定一個(gè)接近白色的區(qū)域,我們就必須把RGB色空間轉(zhuǎn)換成YCbCr色空間。
色空間轉(zhuǎn)換后,就是計(jì)算Cb、Cr的均值Mb、Mr;然后通過(guò)下式計(jì)算Cb、Cr的均方差Db、Dr:
為了提高算法的穩(wěn)健性,將圖片分為幾個(gè)區(qū)域并且計(jì)算每個(gè)區(qū)域的Mb、Mr、Db、Dr,如果一個(gè)區(qū)域的Db,Dr太小,那么這個(gè)區(qū)域就沒(méi)有足夠的色彩變化,就可以丟棄掉了。這樣可以避免大面積的統(tǒng)一色調(diào)對(duì)結(jié)果的影響。
接下來(lái)就可以通過(guò)下面的關(guān)系式得到接近白色區(qū)域的所有像素點(diǎn)了:
根據(jù)亮度值,我們選擇接近白色區(qū)域中的10%的候選參考白點(diǎn)最為參考白點(diǎn)。在白點(diǎn)確定后,就可以從參考白點(diǎn)中得到信道增益的值了。為了維持整幅圖片的亮度不變,亮度的最大值被用來(lái)得到信道增益。所以信道增益不及和參考白點(diǎn)有關(guān)還與亮度的最大值有關(guān),其表達(dá)式如下:
其中是整幅圖片像素的亮度最大值,和是參考白點(diǎn)的RGB信道的均值。
最后,根據(jù)von-kviesmodel來(lái)調(diào)整圖片,使其達(dá)到白平衡的效果。調(diào)整的表達(dá)式如下:
其中RGB是圖片的像素點(diǎn)的三個(gè)信道值,是調(diào)整之后的圖片的像素點(diǎn)的三個(gè)信道值。其源程序如下:
%Programforwhitebalancing%
functionW=wbalance(im)
clearall;
closeall;
%讀取照片的信息%
[filename,pathname]=uigetfile(‘*.jpg;*.bmp;*.gif’,‘Pick an
image-file’);
ifisequal(filename,0)
Else
disp([‘Userselected’,fullfile(pathname,filename)]);
end
fname=strcat(pathname,filename);
im=imread(fname);im2=im;
im1=rgb2ycbcr(im);
%將圖片的RGB值轉(zhuǎn)換成YCbCr值%
Lu=im1(:,:,1);
Cb=im1(:,:,2);
Cr=im1(:,:,3);
[xyz]=size(im);
tst=zeros(x,y);
%計(jì)算Cb、Cr的均值Mb、Mr%
Mb=sum(sum(Cb));
Mr=sum(sum(Cr));
Mb=Mb/(x*y);
Mr=Mr/(x*y);
%計(jì)算Cb、Cr的均方差%
Db=sum(sum(Cb-Mb))/(x*y);
Dr=sum(sum(Cr-Mr))/(x*y);
%根據(jù)閥值的要求提取出near-white區(qū)域的像素點(diǎn)%
cnt=1;
fori=1:x
forj=1:y
b1=Cb(i,j)-(Mb+Db*sign(Mb));
b2=Cr(i,j)-(1.5*Mr+Dr*sign(Mr));
if(b1《abs(1.5*Db)&b2《abs(1.5*Dr))
Ciny(cnt)=Lu(i,j);
tst(i,j)=Lu(i,j);
cnt=cnt+1;
End
End
End
cnt=cnt-1;
iy=sort(Ciny,‘descend’);
%將提取出的像素點(diǎn)從亮度值大的點(diǎn)到小 的點(diǎn)依次排列%
nn=round(cnt/10);
Ciny2(1:nn)=iy(1:nn);%提取出near-white區(qū)域中10%的亮度值較 大的像素點(diǎn)做參考白點(diǎn)%
%提取出參考白點(diǎn)的RGB三信道的值%
?
%計(jì)算參考白點(diǎn)的RGB的均值%
黃偏色圖片
?
? ? ??
正常光照下的圖片
?
評(píng)論
查看更多