王 碩,陳金玉
重慶大學 自動化學院,重慶400044
在霧或霧霾天氣條件下,從戶外獲得的圖像變得模糊,圖像中場景信息的丟失會降低計算機視覺系統處理的效果,通過去霧處理來提高圖像的視覺效果以及突出圖像的特征信息變得越來越重要。
目前圖像去霧算法主要分為兩大類:一類是基于圖像增強的去霧算法,對常用的圖像增強算法進行針對性的運用和改良,增強圖像的對比度,突出圖像中景物的特征和有價值的信息[1-2],如基于Retinex 的方法[3]、基于直方圖均衡化的方法[1-2]等。另一類是基于物理模型的圖像復原去霧算法,從降質圖像的形成機理出發,建立大氣散射模型,通過一定的先驗信息反向推出復原圖像[1-2],這類算法針對性強,復原效果自然。近年來,在基于物理模型的去霧方法中,出現了不少基于機器學習和深度學習的去霧算法[4-5],但是該類算法需要大量的有霧圖像數據進行訓練,而且去霧效果依賴訓練圖像數據的質量,存在較大的不確定性。
基于物理模型的去霧算法依賴一定的先驗知識,如Fattal等人[6]假設透射率和物體表面著色局部不相關,以此來估算場景反照率以及介質透射率,但對于濃霧區域,該算法失效;Tan等人[7]以最大化局部對比度為約束條件復原圖像,復原后的圖像易出現顏色過飽和現象和光暈;Kim 等人[8]通過建立一個包括衡量對比度和信息損失的代價函數,來估算最佳的場景透射率,對天空區域免疫,但是復原結果中易出現亮度不均;Berman 等人[9]以顏色線為先驗條件,利用這些顏色線估算全局的透射率,復原結果中易出現局部過飽和等現象。He 等人[10]提出暗通道先驗的假設,通過求取圖像的暗通道,進而估算場景透射率,對戶外圖像取得了良好的去霧效果。但是當圖像中存在天空等明亮區域時,暗通道先驗的假設不再成立,導致復原圖像容易產生色彩失真或偽影的現象。針對暗通道先驗算法在天空區域易失效的問題,后續出現了許多改進算法。Li等[11]提出了暗通道置信度的概念,用以校正不滿足暗通道先驗區域的透射率。劉國等人[12]在求取暗通道的過程中,引入自適應閾值,以提高估算透射率的準確度。肖進勝等[13]利用邊緣檢測算法分割出天空區域,并對天空區域的透射率進行補償。王柯儼等[14]提出多閾值天空分割法,并假定天空區域的透射率為一個定值,以此來校正天空區域的透射率。
本文受以上算法啟示,提出了一種基于局部亮度和飽和度的暗通道置信度計算方法,用以校正天空區域的透射率,解決暗通道先驗算法在天空區域失效的問題。實驗結果表明,本文改進的算法消除了暗通道先驗算法在天空區域產生色彩失真、過飽和和偽影等問題,復原的圖像中天空區域具有良好的視覺效果。
在圖像去霧研究領域中,通常用大氣散射模型[1-2]描述有霧圖像的形成:

其中,I是有霧圖像;J是場景反射光強度(無霧圖像);A是全局大氣光照強度;t為透射率;β為大氣散射系數;d為場景深度。由大氣散射模型可知,若想根據有霧圖像I復原出無霧圖像J,需要先求得A和t。
He 等[10]通過定義彩色圖像的暗通道并對大量彩色圖像進行統計觀察,發現圖像中色彩鮮艷的區域總有一個顏色通道的值近似或等于0,由此得到暗通道先驗的定理。

其中,Jc表示圖像的一個顏色通道,c∈{r,g,b},Ω(x)表示以像素x為中心的一個窗口。
假設大氣光值A已知,對式(1)的兩端同時求取暗通道,可求得透射率t:

其中,ω為控制去霧程度的調節參數,通常取0.95。
最后將A和t代入到式(1)中,即可恢復出無霧圖像J(x):

由于天空等明亮區域的像素通道值均很大,不存在像素通道值趨于零的像素點,從而不滿足暗通道先驗的假設,導致暗通道先驗算法失效,并且在此區域應用He等[10]的算法求得的透射率要比實際值偏小,使得復原結果中天空區域像素通道值的差異被嚴重放大,致使復原圖像色彩失真。針對這個問題,Li等[11]提出基于局部對比度和亮度的暗通道置信度,用暗通道置信度的概念表示局部區域暗通道先驗算法的滿足程度,以此校正透射率。

C1(x)、C2(x)分別為由統計局部對比度和亮度得到的暗通道置信度,C(x)為最終計算得到的暗通道置信度,tc(x)為補償后的透射率。
暗通道先驗的假設通常在色彩鮮艷的場景下才成立,如圖1 中的(b)所示,在無霧圖像中的天空區域,暗通道值不接近于0,導致暗通道先驗算法在此區域失效。

圖1 無霧圖像的亮度和飽和度
而在有霧圖像中,常常出現如天空、灰白的建筑物等不滿足暗通道先驗的場景,本文通過分析這些場景在HSV空間的特點,發現這些灰白高亮的區域有著較高的亮度和較低的飽和度,如圖1 中的(c)、(d)所示。本文基于此特點,提出了一種新的暗通道置信度計算方法,用于校正透射率,并結合四叉樹搜索法改進了大氣光值的估計方法。
實際上,當圖像中灰白高亮區域的面積小于暗通道先驗算法使用的最小值濾波的窗口的大小時,濾波窗口滑動過的區域總能找到暗原色點,所以暗通道先驗在此區域依舊成立,如圖1(b)中的建筑物區域所示,此時透射率是不需要校正的。而當灰白高亮區域的面積大于濾波窗口的大小時,會出現濾波窗口滑動過的區域不包含任何暗原色點的情況,導致暗通道先驗在此區域失效,如圖1(b)的天空區域所示。本文通過對S和V分別進行最大值濾波和最小值濾波,以過濾掉那些小面積的灰白區域。

其中,S和V分別為HSV空間的飽和度和亮度,且均作歸一化處理;Smax(x)和Vmin(x)為飽和度和亮度分別經過最大值、最小值濾波后的結果,濾波半徑取求暗通道所用的窗口大小。如圖1(d)、(e)所示,高亮度和低飽和度的區域基本保持在天空區域。
本文利用二維高斯函數,結合飽和度、亮度和局部暗通道置信程度的關系,構造計算暗通道置信度的公式,如下所示:

其中,C(x)為暗通道置信度,取值區間為[0,1],c為關于A的自適應調節參數,為大氣光值均值。實驗發現,c的取值區間為[0.01,0.05],且當大氣光值A越大時,c取較小值有更好的效果,反之取較大值。
當暗通道置信度過低時,會對透射率過度補償,影響去霧效果,因此需要對C(x)設定閾值,經實驗分析,C(x)取值區間為[0.5,1],可獲得最佳效果。

如圖2所示為本文算法求得的暗通道置信度,可以看出本文算法能夠有效地將有霧圖像中天空區域分割出來。

圖2 暗通道置信度
本文通過暗通道置信度來校正透射率,不再保留去霧調節參數ω,求得的粗略透射率為:

本文采用引導濾波[15]對粗略透射率進行細化后,得到最終細化的透射率。
大氣光值應當取無窮遠處,即霧最濃的區域,一般為天空區域。本文基于有霧圖像在HSV 空間的特點,采用四叉樹搜索法來尋找大氣光值存在的區域,算法過程如下:
(1)將原圖轉換到HSV空間中,求得亮度V和飽和度S,對V和S作歸一化處理。
(3)選取Score[i]值最大的區域進行迭代處理,直到到達設置的閾值,閾值為δ=max(20,min(h,l)/20),其中h和l為原圖的長和寬。
(4)在最終選取的區域取V-S最大值的像素點作為大氣光值所在點,再將大氣光值從HSV 空間轉換到RGB空間即可求得A。
如圖3所示,在多種場景下,本文算法都準確地定位到了有霧圖像中的天空區域,得到了準確的大氣光值。

圖3 大氣光值估計結果
本文實驗開發環境使用的是Matlab2016a,程序運行環境為Window10。本文算法計算暗通道和暗通道置信度采用的濾波半徑均為自適應取值,大小為krnlsz=floor(max([3,w×kenlRatio,h×kenlRatio])),kenlRatio=0.1,w和h分別為圖像的寬和高。
為了驗證文本算法去霧的效果,本文分別選取He等[10]的暗通道先驗算法、Berman等[9]的基于顏色線的去霧算法、Cai等[4]的基于DehazeNet的去霧算法和王柯儼等[14]的基于暗通道先驗的改進算法,與本文算法進行圖像去霧比較。
圖4(a)為有霧原圖,圖4(b)為He 的暗通道先驗算法的復原結果,可以看出在非天空區域,He的算法有著良好的去霧效果,但是在天空區域,去霧效果并不理想,如圖4(b)中,Image1的天空有明顯的色彩失真,Image3的天空被過度增強,Image4 中的天空存在偽影,Image5中的天空和海面由于過度增強,產生了明顯的色差和偽影;圖4(c)為Berman 的算法,如圖4(c)中的Image1 所示,該算法在近景和遠景都有著良好的去霧效果,但是圖像整體或局部會偏暗,如圖4(c)中Image2、Image3、Image4所示,局部區域過暗,而且在Image4和Image5中的天空區域產生了明顯的亮度不均;圖4(d)為Cai的算法,復原結果中不存在色差和偽影,近景復原效果良好,但是復原圖像中遠景區域去霧程度低,如圖4(d)中Image1、Image3、Image4和Image5的遠景區域依然有大量明顯的霧;圖4(e)為王的算法,通過多閾值分割出天空區域,并單獨進行透射率的補償,明顯改善了天空區域復原的效果,但是王的算法認為天空區域的透射率為相同的定值,當天空區域的信息比較多時,可能會降低天空區域的去霧效果,如圖4(e)中Image2所示,因為天空區域取了較大的透射率,導致天空區域去霧程度降低;圖4(f)為本文算法的復原結果,與原算法相比,在天空區域去霧效果良好,如圖4(f)中Image1、Image3、Image4 和Image5 所示,并沒有產生嚴重的色彩失真或偽影等現象,并且在滿足暗通道先驗的區域,盡可能地保留了原有的去霧效果,但是本文算法并沒有解決暗通道先驗算法不能有效去除景深突變區域殘留霧的問題,如圖4(f)中Image1所示,左上角依然有少量殘留的霧。

圖4 去霧結果比較
因為本文算法主要解決是暗通道先驗算法在天空區域容易失效,導致算法復原結果中出現色彩失真或偽影的問題,所以本文采用文獻[16]中方法評估復原圖像色彩偏移程度,并采用Structural Similarity Index(SSIM)即結構相似性指標[17],評估有霧圖像和復原圖像的結構相似程度。
文獻[16]以原圖像和復原圖像RGB 顏色分量的直方相似性來度量去霧圖像的色調偏移程度:


其中,I表示原始有霧圖像,J為復原圖像。uI和uJ分別表示I和J的均值,分別表示圖像I和J的方差,σIJ為I和J的協方差,K1和K2為常數,通常取K1=(C1×L)2、K2=(C2×L)2,一般C1=0.01、C2=0.03,L是像素值的范圍,取255。SSIM 指標越大,表示原圖像和復原結果的結構越相似。
表1、2分別為圖4中不同算法的去霧結果的直方圖的形狀相似性和結構相似性。由表1、2可知,由于Berman 的復原結果中經常出現局部過暗或亮度不均的現象,導致其復原結果與原圖像的直方相似性較低。而Cai的SSIM指標普遍偏高,是因為Cai的算法去霧程度比其他幾種算法低,導致Cai的復原結果與原圖像有更高的結構相似性。本文算法的復原結果中,不存在色彩失真等現象,且在非天空區域盡可能保持了原算法的去霧效果,所以相比He的算法,本文算法有著更高的直方圖相似性和結構相似性。

表1 各算法處理前后的直方相似性

表2 各算法處理前后的結構相似性
在相同條件的實驗環境下,對圖4中的Image1進行去霧,文中不同算法的時間消耗,如表3所示。

表3 各算法去霧處理時間消耗
可以看出,本文算法的去霧處理速度要比He的算法稍慢,是因為去霧過程中需要額外計算暗通道置信度。但是本文算法中計算暗通道置信度所需要的最小值濾波和最大值濾波均能在線性時間內實現,細化透射率所用的引導濾波也能在線性時間內實現,所以本文算法的時間復雜度依然是線性的,算法的復雜度并沒有增加。
本文基于暗通道先驗的算法,提出了一種新的基于局部亮度和飽和度的暗通道置信度計算方法,用暗通道置信度對天空區域的透射率進行校正,有效地解決了天空區域色彩失真問題,拓展了算法的適用范圍。同時,利用四叉樹搜索法,結合圖像在HSV 空間的特點來尋找大氣光值,提高了大氣光值估計的準確性。實驗結果表明,本文算法能有效地解決暗通道先驗算法在天空區域容易產生色彩失真或偽影的問題。