黃 靖,姜 文,肖長詩,文元橋,周高景,,張 帆
1(武漢理工大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,武漢 430063) 2(武漢理工大學(xué) 航運學(xué)院,武漢 430063) 3(國家水運安全工程技術(shù)研究中心,武漢 430063) E-mail:huangjing@whut.edu.cn
在氣象條件不佳的情況下,空氣中懸浮粒子(如霧、霾和灰塵等)吸收物體本身的反射光,同時散射大氣光.使得拍攝的圖像顏色偏灰白、對比度下降,物體特征難以辨別.降質(zhì)后的圖像不僅視覺效果差,影響后期處理,還會對各類依賴光學(xué)成像儀器的系統(tǒng)(如航拍系統(tǒng)、室外監(jiān)控和目標(biāo)識別等)造成嚴(yán)重的干擾.為此圖像去霧技術(shù)具有重要的實際意義[1].
早期的方法[2,3]通過增加對比度,突出景物特征和有價值信息,達(dá)到霧天圖像清晰化目的.如Kim[2]的直方圖均衡化方法,通過擴大圖像灰度級的動態(tài)范圍使其分布大致均勻,從而提高圖像的對比度.Land[3]的Retinex理論,認(rèn)為一幅圖像可以表示為照射分量和反射分量的乘積,找到方法分離出反射分量,然后削弱照射分量以達(dá)到圖像增強目的.另外,同態(tài)濾波算法、小波變換等也常用來提高圖像對比度.此類方法僅僅考慮對比度,沒有研究有霧圖像退化的物理模型,去霧效果一般,而且經(jīng)常造成圖像細(xì)節(jié)丟失,使圖像失真.
目前去霧算法大部分基于物理模型.通過研究大氣懸浮顆粒對光的散射作用,建立大氣散射模型[4],先估計出關(guān)鍵的透射率圖,然后反演出降質(zhì)前的圖像.如He[5]通過分析5000張戶外清晰圖像,統(tǒng)計出在無霧條件下,圖像任意局部小塊內(nèi)RGB三通道至少有一個強度很小,基于此先驗知識利用最小值濾波估計透射率圖,然后反演出無霧圖像.但He的暗通道先驗方法過高估計霧的濃度,導(dǎo)致去霧后圖像整體亮度偏暗,且天空區(qū)域常出現(xiàn)失真現(xiàn)象.Tarel[6]假設(shè)大氣耗散函數(shù)在局部上變化平緩,利用中值濾波對介質(zhì)透射系數(shù)進(jìn)行估計,但該方法不能自適應(yīng)調(diào)整參數(shù),容易產(chǎn)生光暈效應(yīng).Gibson[7]使用主成分分析方法PCA,解釋了暗通道先驗的合理性,然后利用自適應(yīng)維也納濾波代替He的最小值濾波對場景透射率進(jìn)行估計.Meng[8]依據(jù)圖像固有的邊界約束,提出一種基于上下文正則加權(quán)的方法估計場景透射率.該方法簡單高效,但去霧后圖像的天空區(qū)域易出現(xiàn)“塊效應(yīng)”,視覺效果不自然.Tang[9]首先分析了一系列多尺度顏色特征,然后利用隨機森林建立回歸模型,訓(xùn)練出特征與透射率之間的映射關(guān)系.綜上所述,目前主流算法需要先驗知識或人為約束作為前提,在大部分情況下能夠取得理想去霧效果,但在一些復(fù)雜場景(如含大面積白色/天空區(qū)域,或者霧濃度較大)失效,因此具有一定的場景局限性.
圖像去霧是一項具有挑戰(zhàn)性的任務(wù),但人腦可以在無任何附加信息情況下,快速地分辨出自然場景中霧濃度大小,據(jù)此模擬人腦機制的深度學(xué)習(xí)方法也被用于圖像去霧問題.在Tang方法基礎(chǔ)上,Ren[10]和Cai[11]采用卷積網(wǎng)絡(luò)代替隨機森林,建立有霧圖像和透射率圖之間的回歸模型.Ren提出一種多尺度卷積神經(jīng)網(wǎng)絡(luò)MSCNN,該模型由粗略網(wǎng)絡(luò)和細(xì)化網(wǎng)絡(luò)組成,前者估計出粗略透射率圖,后者再對其進(jìn)行局部細(xì)化,得到最終的透射率圖.Cai提出一種端到端的去霧網(wǎng)絡(luò)DehazeNet,利用卷積操作提取霧相關(guān)特征,同時利用新的激活函數(shù)BReLU提高透射率的精度,該方法取得了良好的去霧效果.但值得注意的是,無論MSCNN還是DehazeNet方法,均假設(shè)不同尺度的卷積操作可代替人工特征提取方法,得到類似的霧相關(guān)特征.這一觀點缺乏理論性依據(jù).為此本文提出一種新的基于深度學(xué)習(xí)的去霧方法.如圖1所示,在回歸模型算法之前增加一個自編碼網(wǎng)絡(luò)[12],通過無監(jiān)督學(xué)習(xí)方式獲得霧相關(guān)特征,這是與MSCNN等方法最大不同之處;然后建立一個卷機神經(jīng)網(wǎng)絡(luò)(Convolution neural network,CNN)進(jìn)行樣本訓(xùn)練,學(xué)習(xí)得到霧相關(guān)特征與場景透射率間的映射關(guān)系,并估算出有霧圖像的透射率圖;最后根據(jù)大氣散射模型反演出無霧圖像.為驗證本文方法的科學(xué)有效性,我們在自然和人工合成的有霧圖像上做大量實驗.實驗結(jié)果表明,本文方法恢復(fù)出的無霧圖像質(zhì)量更高,穩(wěn)定性更強,能適用更廣泛的場景.

圖1 本文的圖像去霧方法Fig.1 Proposed image dehazing algorithm
大部分去霧算法以大氣散射模型為基礎(chǔ),該模型用于描述有霧圖像退化的原理.Narasimhan[4]對大氣散射模型進(jìn)行推導(dǎo):
I(x)=J(x)t(x)+A(1-t(x))
(1)
t(x)=e-βd(x)
(2)
式中,I(x)表示有霧圖像在位置x上的像素值,J(x)表示無霧條件下對應(yīng)位置的像素值,A為大氣光強,t(x)表示透射率,β為大氣散射系數(shù),d(x)表示場景深度.I(x)已知,去霧問題本質(zhì)是求出大氣光強A和透射率t(x),然后通過公式(1)反演出無霧圖像J(x).當(dāng)景深d(x)取無窮大時,t(x)接近0,帶入公式(1)則有:
A=I(x),d(x)→∝
(3)
上式表示大氣光照度A近似等于圖像中最遠(yuǎn)像素點的強度值.在實際的場景中,d(x)不會取無窮大;但當(dāng)距離足夠遠(yuǎn)時,透射率t(x)取值很小近似于0.因此A一般取值為天空區(qū)域或者景深最大區(qū)域的像素值.計算A之后,去霧問題的關(guān)鍵是通過一定策略估算透射率t(x),如公式(4):
(4)
大量學(xué)者致力于找出約束函數(shù)Ф.諸如He[5]利用最小值濾波函數(shù)估計透射率,Tarel[6]、Gibson[7]和Wang[13]則分別采用中值濾波、維也納濾波和雙邊濾波估計透射率.此類方法需要人工設(shè)計濾波算子,對初始參數(shù)依賴強,因此去霧效果不穩(wěn)定.2014年Tang[9]首次將精力投入于提取有霧相關(guān)的特征,然后利用隨機森林代替約束函數(shù)Ф,回歸出特征與t(x)之間的映射關(guān)系.該方法創(chuàng)新型強,對隨后去霧方法的發(fā)展具有重大意義.
估算透射率的關(guān)鍵是提取一系列霧相關(guān)的特征,諸如暗通道[5]、局部最大飽和度[14]、色調(diào)差異[15]和顏色衰減[16]等,這些可由人工特征提取方法獲得.然而,人工特征提取方法往往費時費力,因此利用自編碼網(wǎng)絡(luò)通過無監(jiān)督學(xué)習(xí)方式獲取霧相關(guān)特征.自編碼網(wǎng)絡(luò)最初用于圖像去噪[12],它能夠有效提取物體的主要信息,后被廣泛應(yīng)用于物體檢測與識別等領(lǐng)域.如圖2所示,為本文自編碼網(wǎng)絡(luò)結(jié)構(gòu).該自編碼網(wǎng)絡(luò)一共包含四層——1個輸入層、2個隱含層和1個輸出層,各層神經(jīng)元的數(shù)量分別為r×r、k1×k1、k2×k2、r×r,原則上k1和k2均小于r.

圖2 本文的自編碼網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.2 Structure of the proposed auto-encoder network
在訓(xùn)練階段,從訓(xùn)練樣本集Iset中隨機選擇N個大小為r×r的有霧圖像塊xi作為輸入(需向量化),以xi自身作為標(biāo)簽進(jìn)行訓(xùn)練.各層之間使用sigmoid作為傳輸函數(shù),以均方誤差函數(shù)MES作為損失函數(shù),通過反向傳播算法訓(xùn)練各網(wǎng)絡(luò)層參數(shù).對于訓(xùn)練樣本xi,定義各層的輸出為:
a(1)=xi
a(2)=f(∑W(1)a(1)+b(1))
a(3)=f(∑W(2)a(2)+b(2))
a(4)=f(∑W(3)a(3)+b(3))
(5)
其中網(wǎng)絡(luò)的層數(shù)為4,網(wǎng)絡(luò)參數(shù)W和b表示相鄰兩層間的聯(lián)結(jié)權(quán)重和偏置,a(·)表示各層的輸出值,a(1)=xi表示第一層網(wǎng)絡(luò)的輸出為xi;f(·)代表sigmoid激活函數(shù),定義為f(·)=1/(1+exp(-x)).網(wǎng)絡(luò)參數(shù)通過最小化網(wǎng)絡(luò)輸入xi和輸出之間的loss函數(shù)獲得,用均方誤差函數(shù)作為loss函數(shù),假設(shè)樣本的總量為N,則有:
(6)
在訓(xùn)練過程中,以30000個大小為15×15的有霧圖像塊作為輸入,兩個隱含層大小分別為121和49,網(wǎng)絡(luò)參數(shù)W初始化為[0,0.001]的高斯分布,b初始化為0,迭代次數(shù)80.訓(xùn)練出參數(shù)W和b之后,記錄每個訓(xùn)練樣本xi的兩個隱含層輸出值a(2,xi)和a(3,xi),并將其歸一化至初始大小15×15,最后將xi及歸一化后的特征進(jìn)行融合,得到一個15×15×9的特征塊序列feature(xi).因樣本輸入塊xi是RGB三通道,對每個分量單獨訓(xùn)練得到自編碼網(wǎng)絡(luò),每個自編碼網(wǎng)包含1個輸入層和2個隱含層,故最終得到feature(xi)的維數(shù)為3×3=9.此外給定一張測試圖像,滑塊處理后將各塊帶入訓(xùn)練好的自編碼網(wǎng)絡(luò),得到對應(yīng)的特征塊序列;然后將所有特征塊序列按對應(yīng)位置重組成原始圖像大小,得到一個9維的特征圖序列.如圖3所示,為有霧圖像通過自編碼網(wǎng)絡(luò)學(xué)習(xí)得到的特征圖序列.

圖3 原始圖及本文自編碼網(wǎng)絡(luò)學(xué)習(xí)的特征圖序列Fig.3 Original image and features learned by the proposed auto-encoder network
文獻(xiàn)[9]指出,霧的相關(guān)特征圖與透射率之間存在一種非線性的映射關(guān)系.即:
t(xi)=f1(f2(…fn(F1(xi),F2(xi),…,Fk(xi))))
(7)
式中Fk(xi)表示圖像xi的第k個特征圖,f1,…,fn表示一系列未知的非線性關(guān)系,t(xi)表示xi對應(yīng)的透射率.本小節(jié)利用CNN模型代替隨機森林[9],通過有監(jiān)督學(xué)習(xí)方式得到特征圖與透射率圖之間的映射關(guān)系.訓(xùn)練完CNN參數(shù)后,將上一節(jié)得到的特征圖序列作為CNN模型的輸入,得到要求的場景透射率圖.本文CNN結(jié)構(gòu)如圖4所示,網(wǎng)絡(luò)的第一層是輸入層;第二層采用多尺度的平行卷積操作獲取多尺度的特征;第三層到第六層是一個過渡階段,串行4個單尺度的卷積操作,每個卷積后用ReLU函數(shù)進(jìn)行修正;最后一層是采用全連接,輸出與原始圖像大小一致的單通道圖.

圖4 本文的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.4 Structure of the proposed CNN

(8)

表1 本文的卷積神經(jīng)網(wǎng)絡(luò)各層參數(shù)Table 1 Layer′s parameters of the proposed CNN
假定有霧圖像的大小w×h,采用一個r×r的矩形框以一定的步長s對其進(jìn)行掃描.則圖像掃描后得到局部塊個數(shù)為:
(9)
將每個局部塊帶入訓(xùn)練好的自編碼網(wǎng)絡(luò),得到各隱含層歸一化后的輸出值,融合成為r×r×9特征塊序列.然后將所有特征塊序列按照對應(yīng)位置重組成原始圖像大小,得到一個w×h×9的特征圖序列.再將整個特征圖序列作為CNN的輸入,依據(jù)訓(xùn)練好的CNN參數(shù),輸出透射率圖.為使透射率圖更精細(xì),以原始圖像的灰度圖像作為參照,對透射率圖進(jìn)行導(dǎo)向濾波處理.
然后估計大氣光強A.大氣散射模型中,當(dāng)距離d(x) 取無窮大時,t(x)接近0,此時I(x)=A.表示大氣光照度A近似等于圖像中最遠(yuǎn)像素點的強度值.因此選擇透射率圖中0.1%最暗的像素點的值作為A.依據(jù)文獻(xiàn)[5],這些最暗的像素點對應(yīng)于暗通道圖像中最亮的像素點,選擇暗通道圖像中最亮的0.1%像素點的平均值作為A.
在獲得透射率圖和大氣光強A后,依據(jù)大氣散射模型反演出無霧圖像,為避免透射率太小導(dǎo)致的噪聲,應(yīng)限制透射率t(x)的值不小于0.1.公式如下:
(10)
為驗證本文方法的有效性,在真實和人工有霧圖像做幾組實驗.將實驗結(jié)果與主流的He方法[5]、Meng方法[8]、Tang方法[9]、MSCNN[10]和DehazeNet[11]等作對比,并進(jìn)行定性和定量分析.整個實驗平臺為MATLAB R2015a,運行環(huán)境為64位Windows 10,計算機配置為CPU Intel(R)Core(TM)i5,2.50GHz,內(nèi)存為8GB.
自編碼和CNN兩個網(wǎng)絡(luò)模型,需要大量的有霧圖像和對應(yīng)的透射率圖作為訓(xùn)練樣本.由于有霧圖像的真實透射率圖在實際中難以獲取,本文利用一組無霧圖像及其真實的深度圖,參照大氣散射模型人工合成有霧圖像和透射率圖作為訓(xùn)練樣本.過程如下:文獻(xiàn)[4]中指出大氣散射系數(shù)β可看作一個較小的常量,令β在區(qū)間[0,0.5] 隨機取得,注意防止β過大導(dǎo)致透射率接近于0.大氣光A=[k,k,k]在圖像的光亮區(qū)域取得,令k在區(qū)間[0.8,1]隨機取得.給定無霧圖像J和場景深度圖d,依據(jù)公式(1)、(2)產(chǎn)生有霧圖像I和對應(yīng)的透射率圖t.此外,為使生成的透射率更加細(xì)致,采用導(dǎo)向濾波對t進(jìn)行平滑后處理.無霧圖像及其真實的深度圖來源于多維重構(gòu)領(lǐng)域的三個標(biāo)準(zhǔn)數(shù)據(jù)集——NYUD[18]、make3D[19]和KITTI[20].如表格2所示,數(shù)據(jù)集中包含室內(nèi)、戶外多種場景下的景深圖,距離d由深度相機或者激光雷達(dá)測量得到,因此具有較高的精度.為防止訓(xùn)練樣本差異性帶來的誤差,本文從NYUD、make3D和KITTI三個數(shù)據(jù)集中各隨機選取1000張,共3000張圖像作為無霧圖像集Jset.依據(jù)上述方法,生成一組有霧圖像集Iset和透射率圖像集tset作為訓(xùn)練樣本集.為獲取訓(xùn)練所需的圖像塊,令圖像塊長寬均為15,從Iset每張有霧圖像隨機中隨機截取10個15×15的圖像塊,共組成30000個有霧圖像塊作為自編碼網(wǎng)絡(luò)的輸入,同時對應(yīng)的30000個透射率塊作為CNN的訓(xùn)練標(biāo)簽.

表2 三個深度圖像數(shù)據(jù)集Table 2 Three depth-image datasets
在線挑選了一組具有代表性的自然圖像作為測試集進(jìn)行實驗,如圖5所示,為幾種主流算法及本文方法的去霧結(jié)果.

圖5 幾種算法在自然圖像上的去霧效果Fig.5 Experimental results on natural haze images
從中看出He方法去霧效果明顯,但過高地估計了霧的濃度,使去霧后的圖像整體偏暗.Meng方法增加圖像的能見度,但出現(xiàn)顏色扭曲、細(xì)節(jié)丟失情況.如圖5(c)所示,女士照片中臉部皮膚顏色加深出現(xiàn)“斑點”,城市照片中天空出現(xiàn)嚴(yán)重的“光暈”現(xiàn)象.DehazeNet和MSCNN兩種方法沒有出現(xiàn)顏色失真的情況,但去霧效果需進(jìn)一步加強,如森林照片結(jié)果中依然存在大量的霧.相比之下,本文方法去霧效果良好且顏色逼真,視覺感強.

圖6 幾種算法在江面圖像上的去霧效果Fig.6 Experimental results on river haze images

圖7 幾種算法在人工合成圖像上的去霧效果Fig.7 Experimental results on artificial haze images
為進(jìn)一步比較去霧算法的魯棒性,拍攝一組水面有霧圖測試集.這組圖像中有大面積灰色或白色水面區(qū)域,容易與天空顏色混淆,因此具有較強的挑戰(zhàn)性.如圖6所示,在水面測試集上,幾種主流算法的去霧效果大打折扣.He方法的天空區(qū)域偏紫藍(lán)色,水體區(qū)域偏灰黑色,圖像整體顯得較模糊.Meng方法的數(shù)字區(qū)域泛白,天空區(qū)域有嚴(yán)重人工“塊效應(yīng)”顯得粗糙而不平滑,整體產(chǎn)生很強的違和感.本文方法得到的去霧后圖像顏色更明亮、內(nèi)容細(xì)節(jié)更完整.
參照文獻(xiàn)[1]給定的三個評價指標(biāo)——均方誤差(MSE)、對比度增強(CG)和能見度測量(IVM)對幾種算法的實驗結(jié)果進(jìn)行定量評估.以人工合成的有霧圖像作為測試集,原始清晰圖像作為標(biāo)準(zhǔn)結(jié)果進(jìn)行對比.其中三個評價指標(biāo)定義如下:
(11)
(12)
(13)
式中H,W為圖像的高和寬,c∈{R,G,B}為三個通道,J和I分別是去霧圖像和測試圖像,Cj表示圖J某個像素點的對比度,nr,ntotal分別表示圖J中可見邊緣數(shù)量和邊緣總量,(x,y)∈δ表示可見邊緣的區(qū)域.理論上MSE 值越小、CG值和IVM值越大表示去霧效果越明顯.如圖7所示,Meng方法出現(xiàn)嚴(yán)重的顏色過飽和現(xiàn)象,He方法色彩相對柔和,但是去霧效果欠佳.MSCNN和本文方法去霧效果更好,圖像更加清晰明亮.另外,表3記錄了去霧結(jié)果的平均指標(biāo)值.可以看出Meng方法具有最高的MSE和CG值,表明去霧前后圖像對比度相差最大,同時與標(biāo)準(zhǔn)結(jié)果的結(jié)構(gòu)相似度相差也最大.He方法三個指標(biāo)值均處于中間水平,結(jié)果差強人意.MSCNN方法具有最高的IVM和最低的CG,表明去霧后能夠很好地保留原始內(nèi)容和細(xì)節(jié),但對比度增加不明顯,去霧效果有待提高.本文方法的MSE最小、CG和IVM也較高,表明去霧結(jié)果和標(biāo)準(zhǔn)結(jié)果更為接近.定量分析的結(jié)果與定性分析結(jié)果基本一致.

表3 幾種去霧算法的實驗結(jié)果指標(biāo)值Table 3 Values of the experimental result
本文方法以30000個尺寸15×15的RGB圖像塊作為訓(xùn)練樣本,自編碼網(wǎng)絡(luò)和CNN迭代次數(shù)分別為80和25,離線狀態(tài)下訓(xùn)練時間為半個小時.為進(jìn)一步比較各算法的效率,以不同尺寸圖像進(jìn)行實驗,記錄其平均運行時間,結(jié)果如表4所示.可以看出基于網(wǎng)絡(luò)模型方法的MSCNN和DehazeNet效率最高,優(yōu)于主流的DCP算法.相比之下本文方法在效率上處于劣勢,尤其在尺寸較大的圖像運行時間過長,如一張800×600的圖像運行時間超過20s.分析其原因在于自編碼網(wǎng)絡(luò)中存在滑塊操作,需求出每塊圖像特征然后再將所有特征塊恢復(fù)成原始大小,因此代碼運算量較大.簡化自編碼結(jié)構(gòu)、提高算法的運行效率,將成為下一階段的改進(jìn)重點.

表4 幾種去霧算法的時間效率(單位s)Table 4 Time consumption comparison with different dehazing algorithm
樣本集對網(wǎng)絡(luò)模型的訓(xùn)練也至關(guān)重要.為驗證不同樣本集導(dǎo)致的不同去霧效果,單獨使用NYUD、make3D和KITTI數(shù)據(jù)庫及混合使用上述三個數(shù)據(jù)庫作為訓(xùn)練集進(jìn)行相關(guān)實驗.圖8分別顯示MSE、CG和IVM三個指標(biāo)結(jié)果,每幅圖的橫坐標(biāo)表示測試圖像的序號,不同顏色的條型代表基于不同的訓(xùn)練集.可以看出訓(xùn)練集差異性對去霧效果影響較大.相比而言,混合數(shù)據(jù)庫的MSE值相對較小、CG和IVM值相對較大,表示去霧圖像效果更好.理論上解釋是—NYUD數(shù)據(jù)庫只涉及室內(nèi)圖像,make3D、KITTI分別是戶外和街道圖像,單一場景數(shù)據(jù)集不具通用性,而混合數(shù)據(jù)集涵蓋不同場景,適應(yīng)性更強,因此去霧效果更穩(wěn)定.據(jù)此,本文方法中選擇混合圖像數(shù)據(jù)集作為訓(xùn)練樣本.

圖8 基于不同訓(xùn)練集的去霧效果Fig.8 Results based on different datasets
此外,本文方法也存在局限性.如圖9所示,分別在夜晚或者霧濃度分布極不均勻的圖像上,本文方法的效果并不理想.這是由于本文所用的物理模型過于簡化,不足以描述極復(fù)雜情況下的霧圖退化原理.然而這是所有基于大氣散射模型的去霧算法的通病.因此,參照文獻(xiàn)[21,22]所述的夜晚去霧算法,建立一個更具魯棒性的物理模型,解決極復(fù)雜情況下的去霧問題是下一步的工作重點.

圖9 極復(fù)雜情況下的去霧效果Fig.9 Results in extremely complex cases
本文通過一個自編碼網(wǎng)絡(luò)無監(jiān)督學(xué)習(xí)得到霧相關(guān)特征圖,然后結(jié)合CNN模型回歸得到透射率以解決單幅圖像去霧問題.與傳統(tǒng)基于先驗或約束條件的去霧算法相比,自編碼網(wǎng)絡(luò)特征學(xué)習(xí)的方式更加有效方便,同時CNN回歸模型得到的場景透射率圖更加接近真實值.最后,在自然和人工有霧圖像上的做相關(guān)實驗,結(jié)果表明本文方法能復(fù)原出質(zhì)量更高的無霧圖像,具有更強的場景適用性.