本人最近在研究去霧方面的最新文獻(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)=θ0+θ1v(X)+θ2s(X)+ε(X).
三、計算θ0,θ1,θ2和σ2的值
d(X)=θ0+θ1v(X)+θ2s(X)+ε(X),
d是深度,v是亮度,s是飽和度。θ0,θ1,θ2線性系數。ε(X)是隨機變量表示模型的隨機錯誤。可以把ε當做隨機圖。
我們讓ε(X)~ N(0,σ2),得d(X)-θ0-θ1v(X)-θ2s(X)~N(0,σ2) ---->d(X)~N(θ0+θ1v+θ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去霧效果已經足夠了。




