覃宏超,李炎炎,龍 偉,趙瑞朋,王 倩
QIN Hongchao,LI Yanyan,LONG Wei,ZHAO Ruipeng,WANG Qian
四川大學 制造科學與工程學院,成都 610065
School of Manufacturing Science and Engineering,Sichuan University,Chengdu 610065,China
霧氣會降低圖像的對比度與景物的能見度,嚴重影響了戶外圖像采集系統的正常工作[1]。因此,研究具有實時性和魯棒性的實時視頻去霧算法具有理論研究意義和實際應用價值。
近年來國內外學者主要對單幅圖像去霧進行研究,并在該領域取得較大的突破。目前,對于霧天圖像處理方法主要劃分成兩大類[2-5]:基于圖像增強去霧算法和基于物理模型的圖像復原去霧算法。圖像增強的方法能有效增加對比度,突出細節,能在一定程度上去霧和提高霧天圖像的視覺效果,但由于沒有考慮到圖像的退化問題,容易導致圖像信息丟失,沒能從根本上去霧。典型的算法如直方圖均衡化算法[6]和基于Retinex理論的去霧算法[7]。基于物理模型的霧天圖像復原方法主要利用大氣散射模型,從霧天圖像中估計透射率和大氣光來復原圖像。這類算法能夠利用先驗知識來復原圖像,還原出更多細節信息,從根本上去霧。典型的方法如暗原色先驗(Dark Channel Prior,DCP)去霧算法[8]。該算法對大多數戶外照片都能取得很好的效果,但是對于景深變化邊緣處容易出現白邊現象,求取大氣光時容易受到圖像中白色物體影響而估計錯誤,導致圖像整體偏暗和彩色失真問題,且算法復雜度高,達不到實時性要求。
結合圖像增強和圖像復原兩種類型方法的優點,本文提出一種基于暗原色先驗和直方圖均衡化的實時視頻去霧方法。首先使用暗原色先驗算法進行第一次去霧,然后使用直方圖均衡化進行二次去霧和圖像增強,同時利用圖像采樣技術和引導濾波優化算法提高處理速度。大量實驗表明,本文方法不僅去霧圖像清晰,而且處理時間短,具有實時性、魯棒性和實用性。
暗原色先驗去霧算法采用大氣散射模型[9],其表達式為:

式中,I(x)為霧天圖像;J(x)為無霧圖像;t(x)為透射率;A為大氣光強度。
He等人統計大量的戶外無霧圖像特性發現暗像素統計規律。任意一幅圖像J的暗原色定義為:

式中,Jc為J的一個顏色通道;Ω(x)為以x為中心的一個局部區域。
圖像的非天空區域Jdark總是趨向于0的,即:

該統計規律被稱為暗原色先驗。
利用暗原色先驗理論,結合大氣散射模型即可得到透射率t(x)的估計表達式:

式中,ω(0<ω≤1)為常數,用來保留一部分霧氣,使圖像看起來更加真實而不丟失深度感,一般取值為0.9。為防止t(x)為0而設置一個下限值to,最終去霧之后的圖像J的表達式為:

A的估計方法為:先找出J的暗原色圖像中亮度最大的前0.1%的像素,然后取這些像素對應原圖的像素最大值作為A的值[3]。直接使用該算法去霧會有以下問題:
(1)直接用式(5)求得的透射率去霧,在處理梯度較大的景深邊緣時,會出現明顯的塊效應,也就是白邊現象,如圖2(c)所示。運用軟摳圖或引導濾波算法[10]精細化透射率估計圖能在很大程度上改善這一現象。其中軟摳圖算法有較好的處理效果,但處理速度極慢;引導濾波雖然有較快的處理速度,但效果一般,對于梯度較大的景深邊緣處仍有殘霧。
(2)大氣光A是暗原色先驗算法中非常重要的一個參數,大氣光估計值正確性直接影響到去霧效果的好壞。但大氣光A估計時容易受圖像中白色物體的影響,容易估計錯誤,找到的不是真正大氣光的值而是白色物體的值。如圖3(b)所示,暗原色先驗算法錯誤地把圖中摩托車大燈的像素值作為大氣光的值,而大氣光的值應該在紅框處取得,從而造成了圖片整體偏暗,天空區域彩色失真,去霧效果不理想。
(3)去霧后的圖像容易整體偏暗,灰度集中,視覺效果不好,如圖4(b)所示。
(4)算法復雜度高,處理速度慢,達不到實時性要求。
He的暗原色先驗算法關鍵的一步是將圖像分塊進行最小值濾波求得塊暗原色圖,其塊大小直接影響了透射率的估計。塊Ω較小,則透射率t估計圖的細節較多,層次感好,但是平滑太少,局部錯誤明顯增多,且估計大氣光A時會出錯;塊Ω選取得較大,局部錯誤減少,但會得到分布過于單一的暗原色圖,致使透射率t估計圖的細節和層次感不夠明顯,不能有效區分距離的遠近,在景深邊緣容易出現白邊。由于多數真實圖像霧氣濃度分布不均,固定值的塊大小,魯棒性差,去霧效果不穩定,不適合視頻去霧。
為了解決這個問題,本文采用逐像素式最小值濾波求點暗原色圖。He的最小值濾波是將圖像分塊處理的,塊的移動步長為塊的寬度;而本文塊的移動步長為一個像素點,如圖1所示。

圖1 最小值濾波示意圖
點暗原色圖不但保留較多的細節,層次感好,又能平滑過渡,減少局部錯誤,解決了塊偏大和偏小的矛盾,避免了白邊現象,也為大氣光估計提供較為精細的暗原色圖。使用點暗原色圖與塊暗原色先驗圖去霧效果如圖2所示。兩種算法的塊大小均為15×15,使用點暗原色圖的算法去除塊效應,保留了較多的細節,層次感好,去霧更加徹底,而且塊大小對改進后的算法去霧效果影響不大,塊越小處理速度越快,使得改進后的算法魯棒性更強。

圖2 改進后的暗原色先驗算法去霧效果
大氣光A的值是暗原色先驗算法非常重要的一個參數,錯誤地估計大氣光A的值會造成圖像整體偏暗或彩色失真,去霧效果不理想。本文基于四叉樹分割思想[3]來估計大氣光值。估計大氣光值的時候應該在霧氣均勻區域中霧氣濃度最大的地方取得。首先通過四叉樹法分割暗原色圖像,之所以使用暗原色圖是為了避免局部圖像在某通道存在極大值時引起對大氣光的錯誤估計,天空區域或霧氣濃度區域的平均值較大,但同時為了避免圖中較大白色物體影響,還需要計算標準差,如果區域中有較大白色物體則標準差較大,如果是天空區域或霧氣濃度均勻區域則標準差較小,故可以用區域的均值減去標準差的差值來準確確定大氣光估計區域,差值最大的區域即為天空區域或霧氣區域,可表示為:

式中,i為其中某一區域,i=1,2,3,4;A(i)和S(i)分別為該區域的平均值和標準差;D(i)為平均值與標準差之間的差值。
為了提高準確率,取D(i)值最大塊繼續四等分分割,如此重復迭代,直到圖像的塊大小小于給定閥值,取最后得到的圖像塊中像素值最大的位置點對應原圖該位置的像素值作為大氣光A的值。使用四叉樹法估計大氣光的去霧效果,如圖3所示。從圖3(b)中可看出,He算法錯誤地把摩托車大燈的黃圈位置作為大氣光取值點,而四叉樹法則把紅圈里的白色點作為大氣光取值點。由此可見,四叉樹法估計大氣光的正確性高,魯棒性好,適合視頻去霧處理。

圖3 四叉樹法和He算法對比
針對He暗原色先驗算法去霧后圖像整體偏暗,灰度集中,視覺效果不好的問題,本文采用直方圖均衡化來進行圖像增強。對于視覺良好的自然圖像,其直方圖分布應該呈現固有的規律性,各種灰度值像素應分布在較大的范圍內,而不是集中于少部分灰度級,應是盡可能依據圖像特征分布于各個灰度級,從而擴大原有動態范圍,提高圖像的視覺對比度。運用直方圖均衡化技術即可簡單快速地達到這個目的,如圖4所示。從圖4(c)中可看出,經過直方圖均衡化后去霧圖像,去霧更徹底,圖像自然明亮,視覺效果好,魯棒性強,適合視頻去霧。

圖4 直方圖均衡化效果
人眼在看超過每秒24幀的靜態圖片就會認為是連續動態視頻,因此處理每幀圖片應該小于42 ms,而暗原色先驗算法的復雜度高,達不到實時視頻處理的要求,本文采用圖像采樣技術和引導濾波優化算法提高處理速度和增強去霧效果。
雖然逐像素式求點暗原色圖算法求得的透射率圖保留了較多的細節信息,層次感好,對于去中薄霧效果非常好,但是對于中大霧的去霧效果還不夠好,還存在殘霧,原因在于透射率圖還不夠精細,邊緣保持不夠好。為了增加本文算法適用性范圍,提高魯棒性,采用具有邊緣保持特性的引導濾波來精細化透射率,則在此之前的透射率圖可以適當降低一點原透射率精度,其去霧效果理論上應該不會有太大的區別。即求透射率之前先對原圖進行下采樣,可縮小為原圖的1/5,計算出小圖的透射率,之后再通過引導濾波[10]對小圖的透射率進行上采樣,這樣既可以減少運算量,又可以獲得較為精細的透射率圖。經過實驗,這種方式極大地提高了處理速度,而且去霧效果更明顯,如圖6(d)所示。
引導濾波采用最小二乘法思想,通過盒式濾波器(Box Filter)和圖像積分進行運算,具有良好的邊緣保持和細節增強性能,其執行速度與濾波窗口尺寸無關,運行速度快。數學表達式為:

式中,I為引導圖像,本文以原圖的灰度圖作為引導圖像;p為輸入圖像;q為輸出圖像;i和j為像素標簽;Wij為濾波核函數,其定義為:

式中,ωk為第k個核函數窗口;為窗口內的像素個數;μk和是引導圖像I在窗口內的均值和方差;ε為平滑因子。
算法的編程實現方式對處理速度有著很大的影響。本文采用運行效率較高的C/C++調用Opencv計算機視覺庫進行編程。Opencv是一個輕量級且高效圖像處理函數庫,其函數都經過優化,執行效率非常高,且速度快。本文算法最費時的地方在于圖像的遍歷,因此采用執行效率最高的指針尋址方式遍歷圖像,對于可以并行計算的地方進行并行計算,將大大提高處理速度。
對于視頻去霧,各幀圖像之間存在大量的冗余信息,如果視頻的場景變化較小,大氣光值就變化非常小。編程時候可以設定為每隔30幀求取一次大氣光的值,這將大大減少運算量,節省處理時間。
本文算法結果均在CPU為Intel i5-3337U@1.8GHz,內存為4 GB的PC機上運行所得,操作系統為Win7家庭版,開發語言為C++和OpenCV,開發平臺為Visual Studio 2010。
視頻去霧流程圖如圖5所示。

圖5 視頻去霧流程圖
圖6展示了本文算法對小霧、中霧和大霧圖像(從上到下)的去霧效果。為了進一步驗證本文算法的去霧效果,在實驗中將本文算法與圖像復原典型算法、He的暗原色先驗算法和圖像增強典型算法——多尺度Retinex算法[11-12]做了全面的比較。其中He算法使用引導濾波優化透射率,本文算法對原圖進行0.2倍的下采樣。
4.3.1 去霧效果視覺對比
如圖6所示,He算法去霧徹底,還原了許多的細節信息,但去霧后圖像色調偏暗,層次感差,而且處理天空區域易出現彩色失真,整體視覺不好。多尺度Retinex算法,對于近景的去霧效果好,去霧徹底,色彩明亮,但對于遠景的去霧效果欠佳,去霧不徹底,遠景處保留著大量殘霧,未能還原出更多的遠景信息,色彩偏灰,整體視覺效果一般。本文算法綜合了He算法和多尺度Retinex算法的優點,對遠景的去霧效果相對于多尺度Retinex算法要好,還原出了更多的遠景信息,去霧后圖像的天空區域沒有出現彩色失真的情況,色彩豐富明亮,圖像的層次感好,具有更好的視覺效果。
4.3.2 去霧效果的客觀評價
為了更加客觀地評價本文算法的有效性,采用信息熵、平均梯度和方差等指標對圖像進行質量評價,并用處理時間評價算法的處理速度[13-15],結果如表1所示。
圖像信息熵表示為圖像灰度級集合的比特平均數,描述了圖像平均信息量,如下所示:

圖6 霧天圖像復原結果對比(圖像從上到下分別為小霧、中霧和大霧)

表1 各方法相關評價指標對比

式中,pi為像素值i出現的概率。從表1中可以看出本文算法復原出更多的圖像信息,復原的結果大大優于He算法和多尺度Retinex算法。
圖像的平均梯度可以敏感地反映出對圖像微小細節反差的表達能力,同時還可以反映出圖像的紋理變換特征,其大小可表征圖像的清晰度,如下所示:

式中,Ji,j為第i行第j列的像素值;c與r為圖像的行數和列數。本文算法對于小霧和中霧復原圖像的平均梯度值比He算法高,稍低于多尺度Retinex算法,但對于大霧圖像,則是最高的,即本文算法復原大霧圖像是最清晰的。
圖像的方差反映圖像灰度相對于灰度平均值的離散情況,其大小表示圖像的對比度,如下所示:

式中,xi為像素的灰度值;μ為圖像的灰度平均值。由于本文算法采用直方圖均衡化,提高了對比度,使得本文算法復原圖像的方差比較大,也比較均勻,視覺效果良好。
在圖像處理中,能量梯度函數常被用來提取邊緣信息,對焦良好的圖像,邊緣更尖銳,有更大的梯度值,適合實時評價圖像清晰度。該函數采用橫縱相鄰點的差分計算一個點的梯度值,單峰性好,可靠性高,其表達式如下:

其中,I為灰度圖像;x、y為像素點坐標;M、N為圖像長和寬。為了方便比較,將其歸一化為0到100之間,能量梯度值最高的歸一化為100。從能量梯度的結果來看,多尺度Retinex算法的能量梯度是最高的,本文算法稍低于Retinex算法,但遠高于He算法,在大霧圖像處理中的能量梯度是最高的。
本文算法采用圖像采樣技術聯合引導濾波,不但去霧效果好,且處理速度塊。對于一幅500×330的圖像只需要32 ms,完全能滿足視頻實時處理的要求。綜合來看,本文算法對于小、中和大霧圖像都有良好的去霧效果,適用范圍廣,運算量小,魯棒性好,適合視頻實時去霧。

圖7 霧天無人機航拍視頻去霧效果截圖
本文算法解決單幅圖像的快速去霧問題,將本文算法應用到視頻實時去霧中去。圖7給出了本文算法對一段霧天無人機航拍視頻的去霧效果的部分截圖。視頻的大小為672×378,平均每幀處理時間為35 ms,已達到視頻實時處理的速度要求。從圖7中可看出,本文算法對于大霧、中霧和小霧情況都有較好的去霧效果,去霧效果細節清晰,色彩真實自然,適用性廣,魯棒性強。
本文基于暗原色先驗算法,對其進行了改進和提煉,使用逐像素式最小值濾波來求得點暗原色圖消除了塊效應,基于四叉樹分割思想快速準確地估計大氣光值,提高算法的魯棒性,并加入了直方圖均衡化技術來增強去霧圖像,改善視覺效果,同時利用圖像采樣聯合引導濾波及各幀圖像之間的冗余信息來減少運算量,提高去霧速度,增強去霧效果。大量實驗表明,本文算法是有效的,達到了算法改進的目的。當然,本文算法還有一些缺點需要改進,例如圖像的天空區域去霧效果不佳,去霧后圖像的噪聲被放大和對于較大的視頻還是達不到實時性要求。下一步工作是進一步改進算法,提高算法的處理效果和處理速度,增加算法的實用性。