梅 葳, 李 昕
(上海大學機電工程與自動化學院, 上海 200072)
在物理學中,霧是由于水蒸氣的液化而形成的一種液態(tài)氣溶膠凝結物。當大氣中存在霧霾時,空氣中的小水珠發(fā)生凝結后會影響光線的傳播從而導致能見度極大地降低。因此,視覺傳感器在有霧天氣下拍攝的圖像存在飽和度差、亮度低、對比度不高等缺陷[1]。計算機視覺的許多應用(包括物體識別和分類、目標追蹤、圖像特征提取以及一些其他的實際應用)都會受到有霧圖像低能見度的影響[2]。因此,消除霧霾得到無霧圖像有非常顯著的研究意義以及應用價值。
近年來,越來越多的計算機視覺領域的專家相繼提出一些去霧算法,這些方法在提高圖像的可視化效果上都有突破性的進步。其中,Qu[3]等人發(fā)現(xiàn)在霧天情況下由于空氣中存在凝結物,光的散射會產(chǎn)生偏振,于是用偏振器獲取圖像不同角度的信息進行復原,但這類算法過程非常復雜,時間復雜度高,不利于實際去霧的應用。Cai[4]等人提出一種基于端對端的深度學習去霧算法,采用基于卷積神經(jīng)網(wǎng)絡的深層架構,學習有霧圖像和透射率之間的關系,訓練得到透射圖,再根據(jù)大氣散射模型去霧,但這類算法對數(shù)據(jù)集的數(shù)量和質量要求較高,并且依賴于高性能的成像設備,否則需要通過人工加霧來生成數(shù)據(jù)集。根據(jù)室外清晰圖像比霧天圖像對比度大這一特點,Tan[5]等人提出最大化局部對比度的方法進行圖像復原,此方法在一定程度上增強了圖像的能見度,但復原圖片往往在梯度變化較大的地方產(chǎn)生偽影效應。楊燕[6-7]等人根據(jù)多級透射率提出了一類基于高斯權重的迭代優(yōu)化去霧算法,其方法對去霧效果有一定的提升,但其算法復雜度較高,實時性較差。Fattal[8]等人首先假設光的透射率與物體色質局部統(tǒng)計無關,然后建立數(shù)學模型估算場景的反照率和光的透射率,但此方法的效果取決于數(shù)據(jù)的統(tǒng)計特性,有較低的魯棒性。Tarel[9]等人提出了一種基于中值濾波器的快速可見性單幅圖像去霧算法,該方法在保留圖像邊緣和圖像角落方面有較好的效果,但在處理天空區(qū)域時會出現(xiàn)偏色現(xiàn)象,且會出現(xiàn)Halo效應。Zhu[10]等人根據(jù)亮度大小和飽和度信息之間的差異,在恢復深度信息之前提出了一種新穎的線性色彩衰減先驗理論,并基于此理論建立了霧天場景深度結構的線性模型,但在估計大氣散射系數(shù)時使用的是全局一致的參數(shù),導致該方法的魯棒性不夠穩(wěn)定,且對于霧霾密度分布不均勻的圖像復原效果不理想。He[11]等人提出暗通道先驗(dark channel prior, DCP)理論:對于一幅RGB彩色圖像,像素通常在至少一個顏色通道中具有非常低的強度值。基于此提出暗通道優(yōu)先的單幅圖像去霧算法,實驗表明該算法在天空區(qū)域去霧失效且復原圖像偏暗。以上方法存在的缺陷包括:① 在天空區(qū)域的去霧效果不佳;② 景深處殘霧去除不徹底且物體邊緣周圍的偽影現(xiàn)象比較明顯。
為了解決以上缺陷,本文在DCP理論的基礎上加以改進,提出一種基于重構暗通道的二次正弦衰減的去霧算法,明顯降低偏色現(xiàn)象并消除部分殘留的偽影光圈,而且復原圖像的亮度和顏色對比度都有較好的提升。
在計算機視覺領域,由Mccartney[12]等人提出的大氣散射模型被廣泛應用于圖像去霧之中,其物理模型如下:
I(x)=J(x)t(x)+A(1-t(x))
(1)
式中,I(x)是輸入的有霧圖像;J(x)表示期望的復原輸出圖像;A是整副圖像的大氣光強度;t(x)代表的是光線的透射率,即霧的通透程度,t(x)∈[0,1]。式(1)右邊的第1項J(x)t(x)稱為直接衰減,第2項被稱為大氣光或者大氣面紗, 直接衰減解釋為場景輻射強度及其在介質中的衰減效果;大氣光描述的是空氣中的小顆粒吸收和散射的光線。由于大氣層通常是均勻的,所以透射率t(x)與場景深度信息相關。因此,t(x)可以被表示為
t(x)=e-β d(x)
(2)
式中,β是大氣散射系數(shù);d(x)代表了場景深度信息,一般在圖像中是分段平滑的[13]。通過式(2)可以看出場景輻射與深度呈指數(shù)衰減。目前已知條件是輸入的霧天圖像I(x),目標是復原圖像J(x),式(1)有3個未知數(shù)(t,A,J),為病態(tài)方程,所以需要借助先驗理論來估算出大氣光A的值和透射率t(x)的值。
He等人提出的DCP理論解釋為一幅無霧圖像的RGB顏色通道中至少有一個顏色通道的像素強度值很低甚至趨于0,將此通道圖稱為暗通道圖,這個理論也被稱為暗通道先驗理論,其數(shù)學表達式為
(3)
式中,Jc代表彩色清晰圖像的一個顏色通道;Ω(x)是以像素x為中心的一個鄰域;Jdark(x)是對應的暗通道,內層是求取無霧圖像的最小顏色通道圖,外層是在以像素x為中心點的濾波窗口Ω(x) 內做最小值濾波操作。在對5 000多幅無霧圖像的暗通道像素進行統(tǒng)計后,發(fā)現(xiàn)絕大多數(shù)的像素值趨于0,于是提出式(3)所示的暗通道先驗理論。
在假設A已知的前提下,結合式(1)和式(3)可以得到透射率t(x):
(4)
為了保證視覺的空間透視感,引入了一個常數(shù)參數(shù)ω(0<ω<1,在文獻[11]中取0.95)來得到新的t(x):
(5)
He[11]等人利用以下方法來計算全局大氣光A,首先從原圖對應的暗通道圖中選取像素最大的前0.1%的像素值,然后在原始有霧圖像中尋找對應像素位置的最大像素點的值作為大氣光A的取值。于是就可以求出透射率,從而根據(jù)下式求出無霧圖像:
(6)
式中,設置一個下限閾值t0(在文獻[11]中取0.1),防止當透射率接近0時復原圖像整體偏白。
由于DCP理論采用了基于像素區(qū)域的最小值濾波方法, 這導致復原圖像在梯度變化較大的地方會出現(xiàn)明顯的殘霧以及偽影。因此,He[11]等人又利用軟摳圖(soft matting,SM)方法對透射率進行細化, 盡管去除了部分殘霧,但出現(xiàn)明顯的光暈現(xiàn)象,且時間復雜度不理想。文獻[14-15]中He等人提出引導濾波系列算法來代替SM進行透射率的細化工作,其效果和時間復雜度都有較大的提升,但是在圖像中物體的邊緣區(qū)域仍然留有光暈。另外,對于包含天空區(qū)域的彩色圖像,其天空區(qū)域的像素強度值在任意一個通道都很高,這與暗通道理論相悖,因此在復原圖像的天空區(qū)域往往會出現(xiàn)顏色扭曲或明顯的偏色現(xiàn)象從而導致天空區(qū)域去霧失效。
針對DCP理論算法中最小值濾波不足以及天空區(qū)域去霧失效等問題,本文提出一種基于重構暗通道的二次正弦衰減的去霧算法,算法流程如圖1所示。首先利用暗通道重構(dark channel reconstruction, DCR)的方法得到重構暗通道,然后進行二次正弦函數(shù)衰減得到二次正弦衰減暗通道,為得到更加自然的透射率,設計霧密度權重函數(shù)近似計算有霧圖像中的霧密度權重系數(shù),再利用快速導向濾波并結合直方圖均衡化優(yōu)化透射率。最后,通過大氣散射模型復原無霧圖像。實驗結果表明本文算法能夠有效去解決光暈效應并在一定程度上去除邊緣殘霧,復原的無霧圖像亮度、飽和度也都有所提升。
圖1 本文算法流程圖
針對有霧圖像在天空區(qū)域處理效果差的問題,我們考慮將天空區(qū)域分割出來進行特殊處理。在這里,先對輸入圖像進行Gamma校正以提高圖像對比度效果。然后對K-Means聚類算法加以改進來進行天空區(qū)域的分割。
(1) Gamma校正
由于霧天圖像在霧的干擾下,物體邊緣會呈現(xiàn)出比較模糊的過渡狀態(tài),導致圖像的對比度較低,針對這一問題,對輸入圖像進行Gamma校正以檢測出圖像信號中的深色部分和淺色部分,并使兩者像素強度比例增大,從而提高圖像對比度效果。矯正函數(shù)為
f(x)=I(x)γ
(7)
式中,I(x)為有霧的原始圖像;γ為矯正系數(shù),為了不影響圖像的整體像素,γ取值為1.5。Gamma轉換屬性與圖像灰度的關系圖如圖2所示。
圖2 Gamma轉換屬性與圖像灰度關系圖
從圖2中可以看出,當γ< 1時,如紅線所示,灰度值在比較低的區(qū)域內的變化速度較灰度值高的區(qū)域更快,并且圖像的整體灰度強度增大,稱這一過程為正補償;而當γ> 1時,則相反,稱這一過程為負補償。因此,我們遵循以下原則進行Gamma矯正來增大圖像深色和淺色區(qū)域的對比度:
(8)
式中,v代表原始圖像各位置的像素強度,即在像素強度大于0.5的圖像區(qū)域進行Gamma正補償,而在像素強度小于0.5的區(qū)域進行Gamma負補償。
(2) K-Means分割
傳統(tǒng)的K-Means算法對初始聚類中心敏感,隨機選取中心點會因其波動而產(chǎn)生較大的誤差且算法時間復雜度較大。針對這些問題,本文在選取初始聚類中心時使其間距盡可能大以降低算法復雜度和迭代產(chǎn)生的波動誤差。
考慮到不同場景的有霧圖像有不同的特征,因此在選擇聚類類別數(shù)k時,首先統(tǒng)計原始圖像的灰度直方圖,然后采用Python中的Seaborn庫對直方圖進行曲線擬合,并計算擬合函數(shù)的極大值個數(shù)即為設定的聚類類別數(shù)k,因為圖像灰度直方圖的極大值個數(shù)可以大致確定圖像像素的類別數(shù),而對于有天空區(qū)域的RGB圖像,其天空區(qū)域的像素強度接近255,有著明顯的像素特征,因此這k個類別數(shù)一定能夠充分分割出天空區(qū)域,直方圖擬合如圖3所示。
圖3 灰度直方圖擬合曲線圖
(9)
(10)
(11)
式中,V是非天空區(qū)域最小通道的平均像素值。最后通過式(9)求得重構的暗通道圖。具體重構效果如圖4 所示。
圖4 DCR過程
考慮到式(1)的大氣散射模型是一個病態(tài)問題,He[11]等人提出的DCP理論通過采用基于局部窗口的最小值濾波器來得到暗通道圖,但復原的無霧圖像有明顯的光暈現(xiàn)象,在使用導向濾波器后仍然留有較多的殘霧。針對這一問題,本文提出一種利用二次正弦函數(shù)衰減重構暗通道的策略。利用二次正弦函數(shù)來衰減第2.1節(jié)中求出的重構暗通道以逼近DCP理論的結論,再利用下式求出初始透射率:
(12)
結合以上分析,本文利用二次正弦函數(shù)衰減重構暗通道來估算透射率的理論依據(jù)有以下幾個方面。
(1) 二次正弦函數(shù)的有效取值范圍與雙精度圖像像素強度范圍一一對應,均在(0, 1)之間,且其函數(shù)變化趨勢與DCP理論相似,都是為了使暗通道圖像像素趨于0,因此進行二次正弦衰減具有可行性。
(2) 二次正弦衰減操作能夠有效解決基于局部窗口的最小值濾波器所產(chǎn)生的光暈效應。
(3) 二次正弦衰減速度快,在一定程度上能有效降低透射率估計算法的時間復雜度。
在文獻[11]中,為了得到自然地去霧效果,引入一個常參數(shù)ω來優(yōu)化透射率,為了進一步體現(xiàn)復原圖像的優(yōu)化效果,本文提出霧密度權重函數(shù)來計算霧密度權重系數(shù)ω(x)代替常參數(shù)ω。對于一幅彩色圖像的HSV通道,其中S為飽和度,V為明亮程度,我們知道有霧圖像在景深處的V值明顯很大,但其S的值明顯偏小,但在霧淺處恰恰相反,但是,HSV中的V值是指RGB中的最大值,該值或多或少會受到某些單通道像素的干擾,因此通過將輸入圖像轉換為HSI通道圖來計算深度信息,其中I的值是RGB的平均值[16]。受Zhu[10]等人的啟發(fā)構建物體深度系數(shù)函數(shù):
d(x)=θ0+θ1I(x)+θ2S(x)
(13)
式中,I(x)和S(x)是輸入有霧圖像在HIS顏色通道的I值和S值;θ0,θ1,θ2這3個系數(shù)是通過監(jiān)督學習的方式訓練得來的。為了更適應自然場景中的霧濃度,構造如下霧度密度權重函數(shù)ω(x):
ω(x)=d(x)1/3
(14)
式中,ω(x)在場景深度更大的地方取值越大,在深度小的地方取值較小,而結合式(2)可知,透射率其實是和場景深度有直接關聯(lián),在同一坐標系中描繪出圖5所示的ω(x)和t(x)的曲線圖。
圖5 霧密度權重函數(shù)和透射率與景深關系對比圖
可以發(fā)現(xiàn),透射率衰減的趨勢和權重系數(shù)增加的趨勢一一對應,因此這種方式求得的霧密度權重系數(shù)是可行且有效的。最后可以求得基于霧密度權重函數(shù)的透射率t(x):
(15)
為了使透射率更加精細化,本文基于He提出的快速導向濾波[14]進行改進來優(yōu)化透射率,He是將原始有霧圖像作為引導圖,而本文將有霧圖像先進行直方圖均衡化后再作為引導圖像,這樣做是為了使亮度均勻分布,增加圖像的全局對比度,使復原圖像層次感更加明顯。其效果對比圖如圖6所示。
圖6 透射率對比圖
大氣光A估算的準確性對復原效果的亮度和飽和度有著直接的影響。根據(jù)式(1)可知,若估算的大氣光值偏高,則會導致復原圖像亮度偏暗。在文獻[11]中,首先從暗通道圖中選取像素值最大的前0.1%的像素,然后在原始有霧圖像中尋找對應像素位置的最大像素點的像素值作為大氣光A的值,但這種方法往往錯選像素強度高的區(qū)域對應的像素值,以至于復原圖像偏暗。由于全局大氣光很容易受到強像素區(qū)域的影響,為了避免陷入強光源帶來的復原圖像偏暗的影響,本文為得到更為準確的大氣光值,采用文獻[17]提出的局部大氣光估算方法,并在此基礎上加以改進。具體步驟如下。
步驟1從第2.1節(jié)中求出的天空區(qū)域最小通道圖中選取像素值最大的前0.1%的像素,然后在原始有霧圖像中尋找對應像素位置的平均值作為初始的全局大氣光A0。
步驟2求原始的輸入的有霧圖像的亮通道圖Imax(x)。
步驟3再根據(jù)所求得的A0和Imax(x)求取局部大氣光值A(x),即每個像素點都有對應的局部大氣光值。
具體公式如下:
(16)
A(x)=aImax(x)+bA0
(17)
式中,Imax(x)為亮通道圖;a和b是兩個權重系數(shù),且a+b<1.0。
在估算了透射率t(x)和大氣光值A(x)后,根據(jù)式(6)就可以復原無霧圖像:
(18)
式中,常數(shù)t0是為了避免分母接近0。
本文算法主要針對含有天空區(qū)域的有霧圖像,而暗通道優(yōu)先算法對于沒有天空區(qū)域的圖像的去霧效果已經(jīng)很好。由以上算法思路可知,將本文算法用于不含天空區(qū)域的圖像也是可行的,即使不含天空區(qū)域的圖像的暗通道整體像素較低,但不能確保此類圖像就不存在局部強光源, 為了避免局部強光源的影響,進行暗通道重構是很有必要的。而且,將霧密度權重函數(shù)和快速導向濾波用于不含天空區(qū)域圖像的去霧也是毋庸置疑的。為了驗證本文算法對成像場景中不包含天空區(qū)域的霧圖有效,特此選擇一張不含天空區(qū)域圖像進行實驗。
文中設計的參數(shù)取值分別為:θ0=0.12,θ1=0.96,θ2=0.78,實驗在Microsoft Visual Studio 2017環(huán)境下運行,操作系統(tǒng)為Windows 1 064位操作系統(tǒng),硬件配置為Intel(R) Core(TM) i7-7500U CPU @ 2.70 GHz, 8.0 GB RAM。將本文所提出的算法與一些經(jīng)典去霧算法進行比較,包括Tarel[9], Zhu[10], Fattal[8], He[11]等人提出的算法。然后從主觀性和客觀性分別來分析實驗結果。為驗證所提算法的有效性,本文選取了多組霧霾天氣場景圖進行實驗,實驗結果如圖7所示。
本文對大量的有霧圖片進行實驗,選取了4幅圖片進行效果展示,具體的復原效果如圖7所示。其中,圖7(a)為有霧圖像;圖7(b)為He[11]等人采用DCP理論以及引導濾波系列算法的效果,在一定程度上消去了霧霾,但物體邊緣的光暈現(xiàn)象比較明顯,另外由于大氣光的估算不夠精確導致復原圖像在天空區(qū)域出現(xiàn)明顯的偏色現(xiàn)象且圖像整體偏暗;圖7(c)為Tarel[9]等人構建大氣耗散函數(shù)并使用中值濾波器來進行近似估計,雖然可將圖像的輪廓復原清晰,但在梯度跳變處仍然有光暈現(xiàn)象,而且復原圖的飽和度過低;圖7(d)為Zhu[10]等人提出的顏色衰減先驗理論的去霧效果,此方法采用全局一致的大氣散射系數(shù)從而導致在霧濃度高的地方去霧效果差;圖7(e)為Fattal[8]等人提出的一種估算場景反照率和介質傳輸率的方法,從復原結果來看,在天空區(qū)域的處理效果不是很理想,而且圖像的對比度和飽和度沒有本質上的提高;圖7(f)為本文提出的算法的復原效果,與以上算法相比,本文方法復原的圖像較為清晰且亮度飽和度適中。
圖7 實驗結果對比
為進一步驗證本文算法的有效性,在客觀數(shù)據(jù)上,本文采取可見邊增加率E[18]、平均梯度比R以及運行時間T這3個評價指標加以分析。其數(shù)學表達式如下:
(19)
(20)
式中,n0是有霧圖像的可見邊緣的數(shù)量;nr表示復原圖像的可見邊緣的數(shù)量;ri是輸出圖像在Pi上對輸入圖像的梯度比;?i是輸出圖像的可見邊的集合。具體的對比數(shù)據(jù)如表1所示。觀察圖表可知,在可見邊增加率方面,本文算法和Tarel[9]提出的算法比其他算法的效果要好,說明復原圖輪廓像比較清晰;在平均梯度比方面,本文算法明顯優(yōu)于其他算法,說明復原圖像的細節(jié)特征更加明顯;在運行時間方面,Zhu[10]提出的算法用時最少,本文算法時間復雜度適中,但仍有一定的進步空間。
表1 評價指標數(shù)據(jù)比較(圖1到圖4是圖7中的4幅圖)
為了改善暗通道先驗去霧算法在天空區(qū)域失效以及最小濾波器導致出現(xiàn)光暈偽影和去霧不徹底等問題,本文提出一種基于重構暗通道的二次正弦衰減的圖像去霧算法。該方法提出DCR的方法來重新計算暗通道圖,避免了因天空區(qū)域最小通道像素強度過大而導致的天空區(qū)域去霧失效以及復原圖像偏暗等問題。為了應對DCP中的光暈偽影現(xiàn)象,本文算法使用二次正弦函數(shù)衰減來替代最小值濾波的過濾操作,并考慮到霧濃度的影響,設計霧密度權重函數(shù)估算權重系數(shù),從而得到初始透射率。為了得到更精確的透射率,本文利用快速導向濾波并結合直方圖均衡化來優(yōu)化初始透射率;在大氣光估算方面,為了使復原圖像亮度均衡,本文利用最大通道圖來估算局部大氣光。大量實驗結果表明,本文算法能有效降低光暈現(xiàn)象的程度,并能解決天空區(qū)域的偏色和扭曲問題,而且復原圖像細節(jié)清晰,色調自然。