暗通道去霧法

一、算法背景

  暗通道先驗去霧算法是大神何愷明2009年發表在CVPR上的一篇論文,還獲得了當年的CVPR最佳論文。

  根據論文的介紹,暗通道去霧算法是基於一個關鍵的觀察:在沒有霧霾的室外圖像中,大多數局部區域包含一些像素,這些像素在至少一個顏色通道中具有非常低的強度(原文:It is based on a key observation - most local patches in haze-free outdoor images contain some pixels which have very low intensities in at least one color channel)。因此,基於這個先驗知識,可以直接評估出霧霾的厚度,並恢復出高質量的圖像,同時還能得到高質量的深度圖。

  在計算機視覺領域,對於霧霾圖像的模型定義爲:
在這裏插入圖片描述

  這個模型可以這樣理解,I表示帶有霧霾的圖像,J表示沒有霧霾的圖像,t表示透射率,描述了光通過介質投射到攝像頭過程中沒有被散射的部分,A表示全局大氣光照。公式的第一項叫做直接衰減項(direct attenuation),用來描述圖像場景中,光在介質中經過衰減的部分;第二項表示大氣光照(airlight),它由圖像採集裝置前方的散射引起,會導致景物色調的偏移。當大氣是均勻的時候,透射率t可以表示爲如下公式:
在這裏插入圖片描述
其中β是大氣的散射係數。這個公式表明,隨着景深的增加,場景的亮度呈指數衰減。


  所以,從圖像處理的角度講,霧霾圖像模型表示,在RGB顏色空間中,向量A、I、J是共面且終點是共線的,如下圖所示:
在這裏插入圖片描述
所以,透射率t就可以表示爲:
在這裏插入圖片描述
其中,c ∈ {r, g, b},表示圖像顏色通道的下標。

  算法提出的背景模型如此,暗通道去霧算法則是在這個模型上,提出了一個新的先驗知識-暗通道先驗,從戶外霧霾圖像中直接估算透射率t。在知乎上看到一張圖有點意思哈,應該可以幫助理解,作者見水印:
在這裏插入圖片描述

二、算法原理

2.1 算法提出

  暗通道先驗法是基於一個觀察結果:在大多數非天空的區域中,至少有一個顏色通道在某些像素處具有非常低的強度。換句話說,這樣一個區域中的最小強度值應該非常低,所以對於一幅圖像J,定義了其暗通道去霧算法的模型:
在這裏插入圖片描述
其中,Jc表示無霧圖像J三個顏色通道的暗原色,Ω(x)表示以x爲中心的局部區域塊,作者的觀察發現,除了天空區域,Jdark的強度是非常低、趨於0的,Jdark叫做無霧圖像J的暗通道,上面的這個觀察叫做暗通道先驗法。

  論文提到,暗通道的低強度的原因主要有三個:a)、陰影,如城市景觀圖像中的汽車、建築物和窗戶內部的陰影,或景觀圖像中的樹葉、樹木和岩石的陰影等;b)、有顏色的物體或者其表面,任何顏色通道中缺少顏色的對象(例如,綠草/樹/植物、紅色或黃色的花/葉、藍色的水面)都會導致暗通道中的值較低;c)、深色物體或表面,深色樹幹和石頭等。由於自然的室外圖像通常充滿陰影和色彩,這些圖像的暗通道真的很暗!

  作者收集了很多圖像並計算了他們的暗通道圖像,如下:
在這裏插入圖片描述
在這裏插入圖片描述
可以看到,暗通道中大約75%的像素值爲零,90%的像素強度低於25,大多數暗通道的平均亮度都很低,這意味着只有一小部分室外無霾圖像偏離了暗通道先驗理論。

2.2 透射率估算

  論文給出的透射率t的計算公式如下:
在這裏插入圖片描述
其中,ω的值是基於應用的,論文中所有實驗的值取0.95。這部分的推導如下:

  首先假設大氣光A是給定的、局部區域Ω(x)也是恆定的,對霧霾圖像模型取最小值操作(注意這裏是對三個通道獨立操作):
在這裏插入圖片描述
等價於
在這裏插入圖片描述
對上式三個通道圖像取最小值操作,得到:
在這裏插入圖片描述
根據暗通道先驗理論,Jdark是趨於0的:
在這裏插入圖片描述
Ac是一個正數,所以可以表示爲:
在這裏插入圖片描述
最後,推導得到:
在這裏插入圖片描述
事實上,在這裏插入圖片描述 是歸一化的霧霾圖像的暗通道,它直接給出了透射率的估值。暗通道先驗法對於天空區域而言不是好的先驗模型,但天空的顏色通常與霧霾圖像中的大氣光A非常相似,所以在天空區域有:
在這裏插入圖片描述
由於天空是無限的並且趨向於零傳輸,所以不需要事先分離天空區域,可將其與非天空區域的處理等同。同時,論文還引入常數ω(0<ω≤1),爲了讓處理結果看起來更自然一些,理由是現實生活中,即使是晴天白雲,空氣中也會存在一些顆粒,看遠方的物體還是能夠感覺到霧的影響,另外,霧的存在可以讓人們感覺到景深的存在,所以需要保留一部分的霧:
在這裏插入圖片描述

2.3 軟摳圖(Soft Matting)

  作者注意到霧模型公式與圖像摳圖(摳圖…怪怪的翻譯)方程形式比較類似,所以才採用了軟摳圖算法來優化透射率。首先用t(x)來表示精確的透射率,那麼估算的透射率與之差值爲:
在這裏插入圖片描述
其中,L表示摳圖拉普拉斯矩陣(the Matting Laplacian matrix),而λ是一個正則化參數,上式的第一項是一個平滑項,第二項是一個數據項,L矩陣的第(i,j)項定義爲:
在這裏插入圖片描述
其中,IiIj是輸入圖像在ij處像素的顏色;δij表示Kronecker delta,μkΣk表示區域wk內的顏色的均值矩陣和協方差矩陣;U3是一個3×3的單位矩陣;ε是一個正則化參數;|wk|表示區域wk內的像素的個數。

  通過求解下列稀疏線性系統,可以得到最優t
在這裏插入圖片描述
其中,U是和L一樣大小的單位矩陣,這裏λ取一個很小的值(10-4)。

  我們使用soft matting來細化已經填充了整個圖像的粗糙的t,下圖c就是soft matting的結果,b是數據項。
在這裏插入圖片描述

2.4 恢復場景亮度

  得到透射率圖後,可以根據霧霾模型公式恢復出場景的亮度,但是,當t(x)接近0的時候,直接衰減項J(x)t(x)也是接近0,直接恢復J會容易受噪聲干擾,因此需要對t做一個下界t0的限制(論文取0.1),這意味着,在非常密集的霧霾區域,會保留少量的霧霾。最終,J(x)表示爲:
在這裏插入圖片描述

  由於場景的亮度通常不如大氣中的光線明亮,所以去除霧霾後的圖像看起來很暗淡,因此一般是對圖像做一個曝光調整。

2.5 估算大氣光

  霧霾圖像的暗通道很好地近似於霧霾的密集度(見下圖(b))。可以利用暗通道來改進大氣光估計。首先選擇暗通道中最亮的0.1%的像素。這些像素是最不透明的(在下圖(b)中以黃線爲界)。在這些像素中,選擇輸入圖像I中強度最高的像素作爲大氣光。這些像素位於下圖(a)中的紅色矩形中,但這些像素可能不是整個圖像中最亮的。這種基於暗通道先驗的簡單方法比“最亮像素”方法具有更強的魯棒性。
在這裏插入圖片描述

2.6 實驗結果

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
  這些實驗結果都是論文裏的圖像,實際上,後面的研究也提出了soft matting的結果還是有點粗糙的,而且速度也是不夠快,所以2011年,作者又提出導向濾波來獲得更細膩的結果,導向濾波的運算主要集中在方框濾波(均值濾波),因此可以考慮通過積分圖等的方法來優化,而且另一個重要的應用前提是opencv集成了挺多快速算法的,用起來也方便。

三、參考

[1] Single Image Haze Removal Using Dark Channel Prior

知君書記本翩翩,
爲許從戎赴朔邊。
紅粉樓中應計日,
燕支山下莫經年。
– 唐 杜審言 《贈蘇綰書記》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章