何立風 鐘 巖 劉艷玲 姚 斌
1(陜西科技大學電氣與信息工程學院 陜西 西安 710021)2(日本愛知縣立大學信息科學學院 日本 愛知縣 480-1198)
因為霧霾天氣一直影響人們的正常生活,研究去霧的一些算法也相繼出現,去霧領域的研究在近年來逐漸熱門,從捕獲的圖像中去除霧、霾,恢復圖像原本的色彩,成為一個較為重要的研究課題。
目前,國內外學者對去霧算法的研究主要分為兩類。一類是依靠圖像的各種先驗知識[1](例如:暗通道[2]、顏色衰減[3]、霧線[4]、對比度[5]等)來輔助估計透射圖[6],其中暗通道先驗算法則是以He算法為代表,He算法去霧整體效果較好,但存在以下缺陷:(1) 當圖像中存在大面積天空區域時,天空區域的霧霾沒有被去除掉,這是因為天空區域的像素點R、G、B三通道像素值均不趨近于0;(2) 在去霧過程中求取透射率圖時,存在大量浮點數計算,導致整個程序運行時間緩慢,無法達到實時去霧的要求。另一類是基于深度學習[7]的方法,可以說是運用了非常強大的非線性模型[8],利用大量的有霧、無霧圖像的數據對,對透射圖進行估計,因此一般能夠得到超越傳統方法的結果。但是基于機器學習[9]的算法在不同數據上的泛化性也是一個未知數。
本文在He算法的基礎上,發現由于帶霧圖像中局部區域暗通道分量不趨近于0,且不能滿足實時去霧的情況下,提出了一種對大氣光值改進的方案。首先計算像素值R、G、B三通道的方差來判斷當前像素點是否存在暗通道值,若不存在,則通過區域窗口中最小的暗通道值作為當前像素點的暗通道值,這樣就可以得到一個較為準確的大氣光值;然后先通過對圖像進行下采樣,求出原圖的縮略圖的透射率,再通過上采樣或插值的方式還原出原圖粗糙的透射率,作導向濾波細化,這樣圖像復原的效果相較于其他算法有大幅度提升,并且程序運行時間也大大縮短;最后針對天空區域將RGB顏色空間轉為HSI顏色空間,對其進行圖像復原。結合大氣散射模型以及求得的精準透射率和天空區域的大氣光值,將天空帶霧區域有效快速的進行去霧。
在去霧領域中,通常使用大氣散射模型來描述這類問題:
Img(x)=J(x)t(x)+A(1-t(x))
(1)
t(x)=e-θD(x)
(2)
式中:Img(x)是我們采集的帶霧圖像,J(x)是實驗結果輸出的無霧圖像,A是大氣散射模型中的全局大氣光值,t(x)表示透射率,θ表示大氣散射系數,D(x)表示景物深度。物理模型去霧的本質為根據已知的Img(x),求解未知的J(x)、A和t(x)。
暗通道先驗去霧算法認為,在大部分非天空的區域里,某一些像素肯定有一種或以上的顏色通道具有很低的值,也就是該區域光強度的最小值是個趨近于0的值,可用公式描述如下:
(3)
式中:Jc表示色彩的R、G、B任一通道,設定Ω(x)為大小為奇數,中心為x的一個窗口,根據暗通道先驗,假設這些小的數值趨近于0,則可以進一步推導出式(1)中J(x)項趨近于0,因此可以在式(1)中推導出t(x)的估計值:
(4)
全局大氣光A的求取:首先將暗通道圖所有像素點按亮度像素值大小排序,抽取前0.1%像素值最大的像素點,然后將這些像素位置標記好,在原始帶霧圖像中找到這些標記的位置,找到像素值最高的點,其像素值作為大氣光值A,由于t(x)的值在估計時會有誤差,在暗通道先驗中設定閾值t0=0.1,使得最終的恢復公式如下:
(5)
暗通道去霧算法是近年來單幅圖像去霧算法中比較主流的一種方法。此方法雖然在去霧方面取得不錯的效果,但是算法本身存在一些問題:在透射率t(x)估計時,當帶霧圖像中局部像素的R、G、B通道中的像素值都不趨近于0,此時得到的透射率就過于粗糙,圖像恢復[10]會有很多誤差,如圖1所示。

(a) 帶霧圖像 (b) 暗通道

(c) 透射率t (d) 恢復圖像圖1 暗通道先驗算法
圖1(d)就是利用暗通道原理恢復得到的無霧圖像圖。透射率t的估計過于粗糙,且大氣光值的選取有待商榷。因為在圖中某些像素點的R、G、B三通道像素值都沒有趨近于0,所以不符合暗通道先驗這個條件,導致在根據式(5)復原的過程中,圖像的上半部分區域的結果出現失真[11]、色彩混亂的情況,致使圖(d)中恢復的無霧圖像并不理想。
本文就大氣光值的選取,透射率圖的細化,圖像復原后的處理三個方面進行了改進。實驗結果發現,大氣光值的精確選取消除了局部區域色彩分量不趨近于0造成的失真缺陷;提取透射率圖方法的改進提高了程序的運行速度;HIS模型[12]圖像復原更加符合人類對色彩空間的認知。
針對以上分析,本文對暗通道先驗算法進行如下改進:將大氣光值的選取進行優化;透射率圖的估計先局部處理再進行濾波;復原后的圖像通過圖像增強技術再進行二次處理。
在暗通道先驗算法中,大氣光值A的取值具體步驟如下:
(1) 在暗通道圖中對像素值得大小排序,抽取出其中像素值最大的前0.1%像素點,并標記好這些像素的下標。
(2) 在這些下標中,找到原始帶霧圖像img中對應下標的點,這些點中像素值最大的作為大氣光A的值。
這樣的大氣光值A有以下的問題:當局部像素點的R、G、B三通道的像素值都不趨近于0,且像素值大小都相近。此時,得到的暗通道圖中,此局部像素點的暗通道圖的像素值就是一個不精確的值,從而選取的大氣光值A就出現偏差。
針對此問題,本文提出一種改進方法,在提取暗通道圖時,設定一個閾值T1,當局部像素點R、G、B三通道像素值的方差大于閾值T1時,說明此像素點三通道的像素值波動很大,可以取其最小的值選做是暗通道圖的一部分。局部像素點的均值和方差由式(6)、式(7)計算所得。
(6)
(7)
當局部像素點R、G、B三通道像素值的方差小于閾值T時,說明此像素點三通道的像素值波動不大,無法取得對應的暗通道像素值,此時其暗通道值由窗口中其他像素點的三通道中最小值的均值確定,如式(8)所示,其中,窗口區域大小為W,像素點img(i,j)。
(8)
實驗證明,通過該方法得到的大氣光值較為平滑、穩定,對局部色彩分量不趨近于0的區域進行精準估計,從而得到優化的大氣光值,為后續的圖像復原工作提供有力的支持。
2.2.1 He的透射率估計
He的算法效果針對大部分帶霧圖像去霧效果都較為不錯,但是存在的問題也是很明顯的。例如在計算透射率圖時,會有大量的計算導致程序運行速度太慢,很難達到實時去霧的要求。
2.2.2 本文的透射率估計
本文通過對透射率圖的計算方式上進行一些改變,通過對透射率圖精度需求的下降,提高透射率圖計算速度,這樣加快程序的執行速度。
首先,求取原圖的縮略圖,也就是原圖的下采樣,使得圖像大部分的細節還存在,丟失部分細節;其次求取縮略圖的透射率圖,這樣就可以減少計算量,加快程序運行速度,再通過三次內插法或雙線性內插法來獲取原圖的透射率圖;最后對求得的透射率圖用導向濾波精確化。計算過程如圖2所示。

圖2 計算透射率流程圖
對一幅1 024×768的帶霧圖像進行透射率圖的估計,本文的算法得出的透射率圖在大部分細節上幾乎一致,效果良好,但在算法運行時間上大幅提高,具體如圖3及表1所示。

(a) 帶霧圖像 (b) He算法透射率圖

(c) 帶霧圖像 (d) 本文透射率圖圖3 透射率圖估計的對比

表1 不同算法對透射率圖估計的時間
實驗結果發現,針對一幅1 024×768的帶霧圖像處理只需要30 ms左右,640×480大小的帶霧圖像處理只需大約27 ms,而He算法需要三倍以上的時間才能完成,所以本文算法在執行速度上滿足較多實時應用場景。
2.3.1 He的復原算法
式(5)中的各個變量通過前面的步驟都已經給出說明,這里不再重復,最后進行計算即可。方法上簡單易懂,只是通過帶霧圖像I(x)、大氣光值A,透射率圖t(x),三個參數的值來復原出去霧圖像J(x)。在有些實例中,去霧效果并不好,在圖像的色彩上還存在較大問題,如圖4所示。

(a) 帶霧圖 (b) 去霧后的圖圖4 He算法復原效果圖
He算法針對類似圖4的實例,由于過度去霧造成圖像中局部區域的色彩失真,使得原圖的恢復結果產生明顯色差問題。
2.3.2 本文的復原方法
以上問題是在RGB色彩空間復原的,出現了部分區域恢復不清晰問題,本文算法是將圖像的RGB色彩空間轉化為HSI色彩空間,從而實現圖像復原的方法。HIS色彩空間是用色調(H)、飽和度(S)、亮度(L)來描述色彩,因為選擇HSI模型符合人們對顏色的識別。
在處理彩色圖像時,可以只對I分量進行處理,結果不改變原圖像中的彩色種類;將RGB空間色彩轉化到HSI空間中,結合非天空和天空區域的亮度信息、色調信息、飽和度信息,可以更好地避免過度去霧圖像色彩失真的情況,從而得到較好的去霧效果。
在驗證本文算法的可行性和有效性時,本文選取了多種場景下的多種帶霧圖像,在運行本文算法的同時,使用He算法、中值濾波算法、均值濾波算法、多尺度Retinex算法對圖像進行去霧處理。實驗使用清華同方臺式機,處理器為Inter(R) Core(TM) i7-6700 CPU 3.4 GHz,內存8 GB,軟件平臺為MATLAB 2016a。
因為在圖像中某些像素的R、G、B三通道像素值都沒有趨近于0,導致在根據式(5)復原的過程中,圖像的局部區域出現失真,色彩混亂的情況。本文算法通過對每個像素的R、G、B色彩分量進行篩選,挑選出符合暗通道原理的像素點,那些不符合特定閾值的像素點通過其局部像素點的均值得出暗通道圖對應像素點的像素值。綜上所述,得出的暗通道圖就較為精確,從而得到的大氣光值也較為平滑,不會造成圖像局部色彩失真的情況。
He等的透射率圖估計整體效果較好,但局部區域存在明顯的缺陷,通過本文的算法,透射率圖的估計由以下步驟得出。
通過對原圖的下采樣,得到原圖的縮略圖,選擇分辨率適當的縮略圖,因為分辨率較低時,圖像中的部分細節存在失真現象,所以我們需要選擇合適的大小的縮略圖。求出當前縮略圖的透射率圖,然后再通過插值的方法得到原圖的透射率圖,這樣的透射率圖精度和原方案的透射率圖效果一致,但是速度上明顯要高于He算法透射率圖求取的速度。通過求得原圖大小合適的縮略圖,再利用插值的方法求得原圖的透射率圖,在運行速度上相比He以及其他算法有較大的提升,且透射率圖的效果也是幾乎一致的。
在實際去霧過程中,針對大面積天空帶霧圖像,如圖5所示,He的算法得出的透射率圖整體效果較好,復原的無霧圖像整體偏暗,局部會有色彩失真的問題,本文算法正好克服了這些不足,得出的透射率圖更精確,從而復原的無霧圖像更清晰可見。

圖5 不同場景各算法去霧效果對比
圖5中分別有4種帶霧圖像,從不含天空區域和包含天空區域兩種圖像來測試各種算法的去霧效果。從結果可知,He算法相對于中值/均值濾波等算法去霧效果較為明顯,帶霧圖像中第1、2幅都是不含天空,圖像中的車、街道、房屋等目標通過本文算法都恢復的較為清晰,Retinex算法對于帶濃霧圖像的去霧都會有局部色彩失真的情況;帶霧圖像中第3、4幅圖選取有大部分天空的圖像,He算法和中值或均值算法的效果幾乎沒有將天空區域恢復出來,所選取的大氣光值在算法本身是存在一些缺陷的;Retinex算法恢復的天空區域部分偏白,去霧效果不足,而本文算法改進大氣光值的選取,從而克服這一缺陷,天空區域的顏色與實際場景趨近一致。
在程序運行時間上,如表2所示,本文和其他算法進行了對比,對不同大小尺寸的圖像進行去霧結果對比。

表2 各算法對不同大小圖像去霧的運行時間
由表2可知,針對一幅彩色帶霧圖像去霧時,通過對透射率圖的改進,整體算法運行時間縮短50%以上,在保持透射率精度的同時加快速度,加上大氣光值和圖像復原的改進,得到較為明顯的去霧結果,在去霧效果和速度上達到了實際生活中實時去霧的要求。
本文是在He算法的基礎上,通過改進大氣光值的選取,透射率圖的精確估計,以及圖像復原利用HSI空間的特性,更加符合人類對顏色空間的認知。一系列改進方法進行實時去霧,不僅在去霧程度上更加優化,同時在實驗處理速度上也大幅縮短時間,達到了實時去霧的效果。然而在實驗過程中發現提取透射率圖時可以通過SSE代碼優化去處理浮點數計算的方式加快程序運行速度,這種通過硬件再對代碼進一步加速是以后繼續研究的方向;同時在復雜場景中不僅僅是去霧,而且可以通過去霧去檢測運動目標的一些方法也是我們需要研究的內容。