A Fast Single Image Haze Removal Algorithm Using Color Attenuation Prior——基於顏色衰減先驗單圖片去霧算法原理


       本人最近在研究去霧方面的最新文獻(2016年初),當然去霧方面的經典論文是何凱明博士的Single Image Haze Removal Using Dark Channel Prior》,我這里講的論文主要是自己平時在看的一些文獻,看的過程中進行總結,一方面是給自己看論文留下一點可參考的東西,另一方面希望能對各位產生幫助。可能有些地方不盡如人意,不喜勿噴。

一、專業詞匯:

                     圖1

                                   圖2

                    圖3

    

                                      圖4

 

 

 

 

 

 

 

 

 

 

 

 

 

raw depth map:由霧圖恢復過來的深度圖,如圖1所示

blocking artifacts:塊效應,如圖2所示

transmission maps:去霧要刪掉的圖,如圖3所示

airlight:大氣散射光

二、顏色衰減先驗

這篇文章提出了一種新的先驗——顏色衰減先驗。首先講講什么是顏色衰減先驗:

      

      通過對霧霾圖的場景深度建模(線性模型),它是說圖像的深度和亮度,飽和度之間存在線性關系。如上圖所示,c區域為近景無霧部分,b區域遠近適中,有一定霧,a區域為遠景霧氣濃重。由c右邊圖表可知,c圖的亮度46.18%,飽和度很高,兩者幾乎沒差。通過圖表的比較可以得出以下幾個結論:1.飽和度很容易受霧氣的影響,一旦有一點霧,下降的很快。2.亮度在有霧的情況下(有散熱光)反而會更亮。3.無霧情況下,亮度和飽和度幾乎沒差,受霧的影響下,亮度和飽和度之差懸殊。並且霧越濃重,兩者相差越懸殊,也就是說亮度和飽和度之差和霧濃度正相關。

基於場景深度和霧濃度的關系,我們可以推出:

                                             深度和亮度與飽和度之差正相關!

     於是有 d(X)=θ01v(X)+θ2s(X)+ε(X).

三、計算θ0,θ1,θ2和σ2的值

d(X)=θ01v(X)+θ2s(X)+ε(X),

d是深度,v是亮度,s是飽和度。θ0,θ1,θ2線性系數。ε(X)是隨機變量表示模型的隨機錯誤。可以把ε當做隨機圖。

我們讓ε(X)~ N(0,σ2),得d(X)-θ01v(X)-θ2s(X)~N(0,σ2) ---->d(X)~N(θ01v+θ2s,σ2)

明確問題:亮度v,飽和度s已知,需要計算θ0,θ1,θ2,σ的值,關鍵在於深度d目前不可測量於是有了以下方法。

  a.合成圖像數據集

     

  因為測量圖片的深度比較困難,沒有量化的方法(即d未知)。受唐在<<Investigating haze-relevant features in a learning framework for image dehazing>>文中的方法。根據大氣散射模型:I(X) = J(X)t(X)+A(1-t(X)),t(X) = e-βd(X),β散射系數跟大氣情況有關。本文采用:清晰無霧圖 + 隨機深度圖 【服從(0,1)均勻分布】+隨機大氣光A= 樣本霧圖

第一,對每一張清晰圖,我們都產生一張相同大小的隨機深度圖,合成深度圖的像素值服從在開區間(0,1)的標准均勻分布,即A(1-t(X))。第二,產生0.85<k<1的隨機大氣光A,最后我們用隨機深度圖d和隨機大氣光A合成有霧圖。我們使用500張無霧圖作為訓練樣本。

     b.最大似然估計

對於聯合概率密度函數,我們假設每個像素出錯的概率是獨立的,可得:

   

對該式做最大似然估計,兩邊同時取以e為底的log,然后化簡對θ0,θ1,θ2,σ分別做協方差求極值得:

根據公式(16)-(19),采用梯度下降算法去計算θ0,θ1,θ2的值

 1 /*
 2 *Input: the training brightness vector v,the training saturation vector 
 3 *s,the training depth vector d,and the number of iteration t
 4 *Output:linear coefficients θ0,θ1,θ2,the variable σ2
 5 *Auxiliary functions:
 6 *   function for obtaining the size of the vector: n=size(in)
 7 *   function for calculating the square: out=square(in)
 8 */
 9 Begin
10     n=size(v);
11     θ0=0;θ1=1;θ2=-1;
12     sum=0;wSum=0;vSum=0;sSum=0;
13     for iteraiton from 1 to t do
14           for index from 1 to n do
15               temp=d[i]-θ0-θ1*v[i]-θ2*s[i];
16               wSum=wSum+temp;
17               vSum=vSum+v[i]*temp;
18               sSum=sSum+s[i]*temp;
19               sum=sum+square(temp);
20           end for
21     σ2=sum/n;
22     θ0=θ0+wSum;θ1=θ1+vSum;θ2=θ2+sSum;
23     end for
24 End    

 本文用了500個訓練樣本和1.2億像素點訓練線性模型。經過517代最后得出的最好系數θ0=0.121779,θ1=0.959710,θ2=-0.780245,σ=0.041337。確定了相關系數,我們就可以用來恢復有霧圖的深度。

四、深度圖恢復

b就是由a恢復的深度圖,稱為raw depth map.黑色景物比較近,白色比較遠。圖b就出現了"白鵝效應",圖中的白鵝本身是比較近的,但由於其本身就是白色,誤認為是遠景,這會影響結果的准確性。

                                       

我們取在以遍歷的某像素x為中心的r*r圖像區域內的最小值,結果如圖c所示,有效解決但是出現了塊效應。最后才經過導向濾波得到圖d.

五、清晰圖恢復

通過d,A和公式1,2恢復場景J。為了抑制噪聲,t(X)選取0.1-0.9之間。--- ①
I(X) = J(X)t(X)+A(1-t(X)), --- ②
t(X) = e-βd(X) --- ③
1、由②③可知在深度圖中的白色區域深度無限深,所以I(X)=A,所以本文直接選取深度圖中0.1%亮度像素,選取亮度最集中的一塊作為大氣光A。

2、由①②③得出公式:

有了該公式於是可以對J(X)無霧圖進行恢復已達到目標結果。

散射系數β表示大氣朝各個方向散射光的單位體積的能力。換句話說,間接決定了去霧的強度。

圖11(e-g)不同β的transmission maps,(b-d)是相應去霧結果。可以看出,β太小去霧效果不好,而β太大則去霧過渡(圖d變黑)。因此選取合適的β非常重要。大多數情況β=1.0去霧效果已經足夠了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM