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