灰色世界法(greyworldmethod)
要計算未知光源的特性必須從圖片中提取相關的統計特性。當我們能夠僅使用一個統計特性就獲得未知光源特性時,算法就變得非常簡單了。在這種情況下,未知光源必須在整幅圖片上都是統一的。均值于是就成為了此類方法之下最好的統計指標。而灰色世界法正是利用了均值作為估算未知光源的關鍵統計量。
從物理意義上說,灰色世界法假設自然界景物對于光線的平均反射的均值在總體上是個定值,這個定值近似地為“灰色”。在給定圖片的白平衡算法中,灰色世界假設圖片中的反射面足夠豐富,以至于可以作為自然界景物的一個縮影。若這幅圖片是在經典光源下拍攝的,其均值就應該等于灰色。若這幅圖是在非經典光源下拍攝的,那么均值就會大于或者小于灰色值。而該均值對于灰色的偏離程度則反映了未知光源相對于已知光源的特性。
雖然這個方法比較簡單,但是仍然可以從一些方面進行調整。一個方面就是對于灰色的定義形式的選擇。包括對于光譜的定義、對于光譜成分的定義和在經典光源之下的RGB的響應。另一個更加重要的調整方面就是對于灰色的選擇。不管如何定義灰色,最佳的灰色之選必然是自然界實事上出現的灰色。但是這個值是無法獲得的(除非是合成數據),所以對于灰色的選擇是不同的灰色世界算法的一個重要的區別點。 一個方法是假設這個灰色就是實事上的灰色。也就是說反射光譜是均衡的。給定光源之下的RGB響應是純白色對此光源的響應值的一部分。比方說,可以使用50%作為反射率(雖然這個灰色值對于人眼視覺習慣而言可能過于明亮)。
另一種方法,就是根據大量的數據提煉出一個均值,并把它定義為灰色。這種方法提煉的灰色值可能因為數據庫使用的不同而有所不同。最終提煉的灰色也能僅適用于原始的數據庫,而對于數據庫未包括的圖片的適用度就會比較差一些。確定下來的灰色表達形式可以用來表示。下標i表示信道,上標c為canonical的首字母,表示經典光源。
在確定灰色的表達形式后只要用RGB響應與經典光源下灰色的比值來歸一化圖片就可以了。假設RGB響應均值為,下標i表示信道,上標U為Unknown的首字母,表示未知光源。那么歸一化率的計算式為如下式所示: 根據光源轉換理論,從未知光源到經典光源下圖片表達式的轉換式如下式所定義: 那么,灰色世界法的計算過程如下圖所示:
?
本實驗選擇的灰色值為(129,129,129),具體的matlab實現程序如下:
?
偏藍圖片
白平衡調整后的圖片
?
正常光照下的圖片
?
動態閥值的自動白平衡法
基于動態閥值的自動白平衡法(AutomaticWhiteBalanceMethod)這個算法是通過對圖片的ycbcr色空間的分析來確定參考白點的,所以次算法可以說是自適應白平衡算法。本算法選擇參考白點的閥值是動態變化的,所以對于不同的圖片,其閥值也不同。通過對圖片的cbcr坐標空間的分析,我們可以看到一個接近白色的區域(near-whiteregion)是包含著參考白點的。通過這個思路,我們可以通過對圖片分區,然后找出參考白點,然后在通過vonkviesmodel來調整圖片時期實現白平衡。這樣,這個算法就包括了兩個步驟了:尋找參考白點,白點調整。尋找參考白點:
為了確定一個接近白色的區域,我們就必須把RGB色空間轉換成YCbCr色空間。
色空間轉換后,就是計算Cb、Cr的均值Mb、Mr;然后通過下式計算Cb、Cr的均方差Db、Dr:
為了提高算法的穩健性,將圖片分為幾個區域并且計算每個區域的Mb、Mr、Db、Dr,如果一個區域的Db,Dr太小,那么這個區域就沒有足夠的色彩變化,就可以丟棄掉了。這樣可以避免大面積的統一色調對結果的影響。
接下來就可以通過下面的關系式得到接近白色區域的所有像素點了:
根據亮度值,我們選擇接近白色區域中的10%的候選參考白點最為參考白點。在白點確定后,就可以從參考白點中得到信道增益的值了。為了維持整幅圖片的亮度不變,亮度的最大值被用來得到信道增益。所以信道增益不及和參考白點有關還與亮度的最大值有關,其表達式如下:
其中是整幅圖片像素的亮度最大值,和是參考白點的RGB信道的均值。
最后,根據von-kviesmodel來調整圖片,使其達到白平衡的效果。調整的表達式如下:
其中RGB是圖片的像素點的三個信道值,是調整之后的圖片的像素點的三個信道值。其源程序如下:
%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值轉換成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);
%根據閥值的要求提取出near-white區域的像素點%
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區域中10%的亮度值較 大的像素點做參考白點%
%提取出參考白點的RGB三信道的值%
?
%計算參考白點的RGB的均值%
黃偏色圖片
?
? ? ??
正常光照下的圖片
?
次算法的缺點是運行速度慢,但是對圖片的還原效果還是比較顯著的。
其他白平衡算法 鏡面法(PerfectReflectorModel)
根據圖像形成理論,對于純白色的反射面而言,無論光源是什么顏色,最終反射后的顏色總能完全表現出光源的顏色。如果景物中有純白的部分,那么就可以直接從這些像素中提取出光源信息。基于這種思想的方法都被稱為是鏡面法。
與灰色世界法類似的,鏡面法也有多種調整方式。在本文中著重介紹兩種。
第一種方法較為基本也較為簡便。這種方法假設圖片中一定有純白色面存在,那么在經典光源下,圖片中所有像素點三個信道的最大值都應該等于255,或者是一個給定的純白色的值。在任何其他的光源下,圖片純白色點的像素值就會小于經典光源下的純白色,并且這些點將代表整幅圖片中最亮的點。那么只要將各信道的值按比例規一化到最大值(純白色)就可以獲得在經典光源下的圖片了。
假設經典的白色表達形式可以用來表示。下標i表示信道,上標c表示經典光源。假設RGB響應的最值為,下標i表示信道,上標U表示未知光源。那么歸一化率的計算式為如下式所示:
根據光源轉換理論,從未知光源到經典光源下圖片表達式的轉換同樣可以用下式定義:
其計算過程如下:
?
當選擇(255,255,255)為白色值的時候只需把每個信道的像素值拉伸到最大值即可。這種鏡面法最為簡單,在有效性方面的表現也不錯。
第二鏡面法算法在第一步的基礎上改進了對于白色點的定義。它不是將白色定義為各信道值最大的點。而是將滿足某個條件的點都定義為白色點,通過計算這些點的平均色溫,得到對于未知光源的估計值。這類算法首先將對于白色的定義形式轉換到了YCbCr空間:
在YCbCr空間中,Y是灰度,表示圖像的亮度,Cb和Cr是色度的藍色和紅色分量,代表圖像的色差。由于鏡面是圖像中亮度最大的部分,那么Y值最大的點就可以很好的代表圖像中的鏡面。
第二步就是在轉換完的空間中尋找到可以代表鏡面的點。在Y較小時,Cb和Cr較小的像素表現為接近白色的灰度值;而在Y較大時,Cb和Cr較大的像素仍可以認為是白色物體受到光源污染得到的。因此我國的白平衡研究學者提出了下列約束條件:
由算法決定,不同鏡面算法的值不同。 在選出了合適的白色點之后,下一步就是要估計色溫,根據計算的色溫來還原已知光源下的圖片。色溫估計的計算式如下式所示: 其中下標X標示信道,在這種算法中X=Y、Cb、Cr。
進行色溫估計之后,利用光源轉換式可以獲得如下圖所示的計算過程:
?
音階映射法(gamutmappingmodel)
音階映射法采用了與前幾種方法完全不同的思路,是第一個很好的描述了圖片統計特性的算法,由Forsyth在1990年首次提出。此方法的第一步是建造一個所有可能的R、G、B值得集合,這些值是在經典光源下拍攝所有現實世界可能出現的反射面獲得的。這個集合是一個凸多面體,因此可使用其頂點來表征。在第二步中,使用相似的方法,將圖片中所有出現的R、G、B值繪成一個凸多面體。第三步是將這兩個凸多面體相互映射從而獲得對角變換矩陣。根據映射得來的變換矩陣一般不是唯一的,而是一個由許多矩陣組成的集合。所以第四步就是從這個集合中挑選出最終的變換矩陣。
音階映射法的主要優點在于對于其應用環境沒有特別的限制,因此其平均表現水平要高于灰色世界法和完美反射法。其不足之處主要有三:
第一,要獲得在經典光源下所有可能出現的R、G、B值集合非常困難,一般只能獲得近似集合。
第二,映射兩個三維集合的計算量比較大。
第三,獲得的變換矩陣是一個集合,沒有有效的方法獲得最優解。 1996年Finlayson提出透視色彩法,在音階映射法的基礎上作了兩點改進。第一,這種方法使用了色度空間(r,g)=(R/(R+B+G),G/(R+B+G));第二,通過考慮可能出現的光源值來進一步縮小得到的變換矩陣集合。使用色度空間之后,參數集合從三維降為兩維,降低了運算復雜度。考慮可能出現的光源以后縮小了目標變換矩陣的范圍,使得最后得到的結果更接近最優解。 透視色彩法的主要缺陷在于光源集合是一個非凸集合,也就說它無法僅僅使用頂點來精確表征。這樣就加大了運算難度。
Barnard采用的方法是將其近似認為一個凸集合,這樣就不需要增加額外的計算了,但是對最后變換矩陣集合的準確獲得造成了一定負面影響。
接下來將對音階圖法的基本計算方法作一個闡述。所使用的色度空間為改進后的二維色度空間(r,g)=(R/(R+B+G),G/(R+B+G))。
第一步為構造色集合圖;第二步與第三步,構造待測圖片的色集合圖并將其映射到測試色集合圖中。 經過映射以后未知光源的圖片就與經典光源下的可能圖像建立了映射關系。通常,建立的映射關系不是唯一的,而是一個集合,這樣就需要對這個集合中所有的映射關系進行篩選從而獲得最佳結果。選擇的過程必須要建立額外的假設,因此不是唯一的。
色相關法(colorbycorrelationmodel)
Finlayson提出了色相關法作為對于透視色彩法的改進。色相關法的實質就是將色彩空間離散化,從而進一步降低計算復雜度。色相關法的基本思想是預先計算一個矩陣,這個矩陣描述了不用光源與特定圖像色彩出現之間的相關度。
矩陣的每一行對應于一個不同的訓練光源,每一列為可能出現的色彩值,這些色彩值是通過離散化染色空間(r,g)獲得的。行和列可以任意排列而不影響此方法的有效性。矩陣元素A(i,j)的含義為:在光源i之下拍攝的圖片中出現色彩j。
色相關法中提出了兩種定義矩陣元素A(i,j)的方法。在第一種方法中,A(i,j)只能取0或1。取0表示色彩j不可能出現在光源i之下,取1表示色彩j可能出現在光源i之下。在第二種方法中,A(i,j)可以去0到1之間的任何一個值,代表色彩i出現在光源j之下的概率。在計算完相關矩陣之后,使用類似的方法將目標圖片的色彩空間離散化,形成一個相關矢量,與相關矩陣相乘以獲得這個未知光源下的圖象與各個已知光源的相關度。選取相關度最大的
一個或幾個已知光源對未知光源特性進行估計,求得未知光源特性。色相關法的好處在于,在充分考慮到圖像統計特性的前提下進一步降低了計算復雜度。但是其不足也是明顯的。首先,與透視色彩法一樣,對于所有可能光源的估計是近似的,不完全的,可能影響到最后的估計結果。其次,離散化色彩空間的過程中丟失了許多色彩信息,在一些情況下,可能使相關矩陣和向量相乘后的結果為零向量。
以下將對色相關的計算步驟進行簡要介紹: 第一步,建立相關矩陣,其過程:(a)找出在參考光源下的彩色圖像的色度;(b)計算出每個色彩在參考光源下的出現概率;(c)將b所計算出的概率加入色相關矩陣M。
可以看到(a)中所示的色度集合是離散的,因為色相關矩陣中的各種顏色分布也是離散的。(c)中相關矩陣的每一列代表不同的光源,在這一列中的每一個值代表了對應的色彩區域出現的概率。
第二步是相關的過程。在進行相關之前需要先構造圖像向量,圖像向量的每一個元素值代表對應的色彩區間是否出現在給定的需要進行白平衡處理的圖片中。
接著就是相關過程了,相關矩陣與特征向量的相關過程可以簡要表示:(a)從圖像色度集合中求出圖像向量;(b)將圖像數據與可能的光源進行相關;(c)選擇一個可能的光源。
第三步就是最佳光源的選取。最佳光源的選取有多種方法,包括最大相關值法:尋找所有相關向量中最大的元素;最大相關值平均法:將相關向量里最大的幾個值所對應的光源色彩進行平均,然后求出最佳光源;等等。
神經網絡法(NeuralNetworkApproachtoColourConstancy)
神經網絡法是處理視角比較獨特的一種白平衡算法。該方法同樣對染色空間(r,g)進行了離散化處理,并將其與神經網略結構相聯系。目前提出的神經網絡白平衡算法使用了3層結構,輸入層有X000個節點,第一個隱藏層有X00個節點,第二個隱藏層有X0個節點,輸出層有2個節點。輸入層代表離散化的染色空間(r,g),每一個節點的輸入可取0或1,表示某個色彩值(ri,gi)是否在圖像中出現。輸出層表征了光源特性。上層為下層值得加權和。通過輸入不同的圖片,可以訓練神經網絡的權值,以獲得滿意的結果。
輸入神經元有多個,輸出神經元為兩個。神經網絡的輸出描述了未知光源特性,輸入則代表了圖像的色彩特性。 對于各層結點數為多少時處理效果最優這個問題,目前還沒有辦法在理論上進行驗證。試驗經驗表明,在一定的范圍內,結點數的多少不影響處理的最終效果。但這也同時表明了,神經網絡發的處理效果優化存在一定難度。
評論