黃沛昱, 李煜龍, 高 磊
(重慶郵電大學 光電工程學院, 重慶 400065)
由于大氣的散射作用, 目標物體的反射光會受到大氣中懸浮粒子、氣溶膠等的吸收和散射, 并與其他方向反射的空氣光混合, 最終成像設備捕獲的圖像會存在色彩失真、對比度降低、細節模糊等問題. 對圖像進行去霧處理, 可以顯著提高場景局部和全局的對比度, 糾正因空氣光造成的顏色失真. 在計算機視覺、高級圖像編輯、目標檢測和識別等算法中, 圖像去霧在一定程度上能提高算法的性能, 因此圖像去霧的研究有著較高的應用價值.
圖像去霧的算法主要有基于圖像增強的去霧算法、基于圖像復原的去霧算法和基于深度學習的去霧算法.
基于圖像增強的去霧算法沒有考慮到霧的濃度與場景深度成正比例的關系, 即圖像霧的濃度分布是不均勻的. 因此, 增強圖像對比度的去霧方法不能自適應的補償霧圖像中對比度的降低, 且容易造成部分圖像信息的失真, 例如基于直方圖均衡化的算法[1]和基于Retinex的圖像去霧算法[2].
基于圖像復原的圖像去霧算法從霧天圖像退化機制出發, 利用大氣散射模型[3], 通過求解圖像降質過程的逆過程來恢復清晰圖像. 尤以He等人提出的基于暗通道先驗的圖像去霧算法為代表, 然而該算法對于圖像的天空區域和白色景物是失效的, 并且容易產生光暈效應[4].
近年來, 深度學習的不斷發展為圖像處理帶來了新思路, 一些基于神經網絡的圖像去霧算法也不斷涌現. Ren等人提出了多尺度卷積神經網絡的去霧方法,通過兩種尺度的網絡得到更準確的介質投射率[5].Li等人為了避免參數因分別估計而帶來誤差累積的問題, 提出了多合一卷積神經網絡圖像去霧算法, 取得了較好的效果[6]. 利用不同尺度的卷積核提取圖像特征,將淺層與深層的圖像特征進行融合, 在一定程度上能使網絡更好地學習圖像的特征[7–9].
基于深度學習的圖像去霧算法利用卷積神經網絡學習圖像特征, 網絡的深度對網絡模型的性能至關重要, 層數增加, 網絡可以進行更加復雜的特征學習. 但是, 在深度學習中網絡層數的增加一般會導致模型過擬合、梯度消失和梯度爆炸. 殘差網絡的提出有效地解決了該問題, 通過短路連接(shortcut connection)機制使得網絡具有學習恒等映射的能力的同時也具有學習其他映射的能力, 因此殘差單元可以在輸入的基礎上學習到新的特征, 從而提高網絡性能, 避免網絡層數增加所導致的網絡退化[10]. 陳清江等人提出了一種混合殘差學習與導向濾波算法在圖像去霧中的應用, 但對于自然真實霧圖像的去霧, 其去霧圖像的視覺效果并不理想[11]. 姜冰等人提出了適用于多場景的ResNet單幅圖像去霧算法, 在GAN網絡中引入殘差結構用以改善網絡性能[12]. 劉仕彥等人針對去霧網絡深度較深且結構復雜, 不易在嵌入式平臺部署的問題, 將殘差塊與信息蒸餾網絡(information distillation network, IDN)的信息蒸餾塊作為網絡的基礎塊, 提出了基于BP-Net網絡結構的圖像去霧算法[13]. 肖進勝等人指出霧圖像可以看成由清晰圖像和霧層組成, 算法通過殘差學習提取霧層的特征以實現圖像去霧, 但網絡權重參數量較大, 網絡訓練困難[14].
綜上所述, 針對現有去霧算法中存在的問題, 本文提出了一種改進殘差神經網絡的圖像去霧算法, 在殘差學習模塊中嵌入深度可分離卷積, 有效解決網絡層數增加所帶來的參數量劇增和網絡訓練困難的問題.算法通過所提出的網絡改進模型來估計透射率, 采用四叉樹分層搜索方法準確地估計大氣光值. 并且利用加權引導濾波對透射率進行細化, 保留更多圖像邊緣信息. 實驗結果表明, 本文算法能較好地實現圖像去霧,并且去霧圖像邊緣信息更豐富, 圖像也更清晰.
本文去霧算法基本思路: 首先根據所提的改進網絡來估計透射率, 其次利用加權引導濾波對透射率進行細化, 然后通過四叉樹分層搜索方法更準確地估計大氣光值, 最后根據式(1)的大氣散射模型表達式來恢復出無霧清晰圖像.
在圖像處理領域, 大氣散射模型通常被用來描述霧天圖像的形成. 大氣散射模型可表示為:

其中,x表示像素索引,Ic(x)為觀測到的有霧圖像,Jc(x)為 去霧后的無霧場景圖像.t(x)是目標對象反射光的透射率, 它由目標場景點與成像設備之間的距離確定, 光的傳播距離越遠, 光的散射和衰減就越大, 即t(x) 越小. 如式(2)所示t(x) 與場景深度d(x)呈負相關,β為衰減系數.Ac是全局大氣光, 表示大氣中的環境光.
由式(1)可知, 圖像去霧算法的關鍵在于求解介質透射率和大氣光值, 然后依據散射模型進行無霧圖像的恢復, 因此如何有效建立有霧圖像到介質透射率的映射網絡顯得尤為重要. 圖1所示為本文算法的網絡結構圖, 網絡主要由多尺度特征提取模塊、嵌入了深度可分離卷積的殘差學習模塊和輸出卷積模塊組成.首先通過不同大小的并行卷積核進行有霧圖像的淺層特征提取. 卷積核的尺寸設置為K×K×N,K×K為卷積核的大小,N為卷積核個數. 卷積核的大小分別為1×1、3×3、5×5和7×7,N的值為12, 步長為1, 并進行相應的填充使的輸出特征圖的尺寸和輸入特征圖的尺寸保持一致. 卷積響應公式為:

圖1 本文網絡結構


將不同尺寸卷積核提取到的特征圖進行拼接, 然后送入后續的殘差塊. 出于網絡訓練參數量的考慮, 本文在殘差結構中引入了深度可分離卷積(depthwise separable convolution, DS Conv), 用于替代普通的卷積.深度可分離卷積可以做到減小參數量的同時其效果等同于普通卷積. 深度可分離卷積可以看成兩部分組成:逐通道卷積和逐點卷積, 逐通道卷積對每個輸入通道應用單個濾波器, 然后使用點式卷積(簡單的1×1卷積)來創建深度層的輸出的線性組合[15].
圖2所示為普通卷積和深度可分離卷積的對比,以三通道輸入和3×3大小的卷積核為例, 在普通卷積中為得到4個輸出特征圖, 需要4個卷積核, 參數量為3×3×3×4. 而深度可分離卷積可以看成兩部分, 首先3×3大小的卷積核與輸入特征圖進行逐通道卷積, 卷積核深度等于輸入通道數; 然后將得到的特征圖與1×1大小的卷積核進行逐點卷積, 卷積核個數為4, 總的參數量為3×3×3+3×1×1×4, 相比普通卷積, 深度可分離卷積可以成倍數減小參數量.

圖2 常規卷積和深度可分離卷積的對比
圖1中的每個深度可分離卷積層中都加入了批量正則化(batch normalization, BN)和線性整流單元(ReLU). 網絡模型中存在3個相同的殘差單元, 每個殘差單元含有兩個深度可分離卷積層. 在深度可分離卷積層中, 逐通道卷積的卷積核個數為1, 大小為3×3, 逐點卷積的卷積核個數為16, 大小為1×1. 最后, 網絡經過一個3×3大小的卷積核卷積輸出介質投射率圖.
為了提高去霧圖像的質量, 并使恢復的無霧圖像邊緣得到保持, 具有更多的紋理信息, 本文對神經網絡學習得到的透射率進行了細化. 與引導濾波(guided image filtering, GIF)相比, 加權引導濾波(weighted guided image filtering, WGIF)在圖像邊緣保持上性能更好, 且能有效減少去霧圖像中的光暈偽影[16]. WGIF在GIF的基礎上引入了邊緣感知權重, 邊緣感知權重表達式為:

其中,G表示引導圖,p′)表示引導圖G中3×3窗口區域的方差. ε是一個常量, 值為( 0.001×L)2,L為引導圖像素的動態范圍. 邊緣感知權重 ΓG(p′)衡量像素p′相對于整個引導圖的重要性. 邊緣處的像素被賦予比平坦區域像素更大的權重.
如圖3所示, WGIF相較于GIF在邊緣保持上性能更好, 較好地保留了圖像的邊緣紋理信息. 因此本文采用WGIF對神經網絡特征學習得到的粗透射率圖進行細化, 以此得到更精細化的透射率. 圖4所示為透射率細化前后效果圖及透射率用于去霧時與之對應的去霧圖. 由圖可知, 細化前后得到的去霧圖差異較為明顯,透射率圖進行細化后, 其恢復出來的無霧圖像更清晰,圖中山脈輪廓也更加分明, 圖像邊緣得到了更好的保持. 因此, 對神經網絡學習得到的透射率圖進行細化是很有必要的.

圖3 不同濾波器的邊緣保持結果對比

圖4 透射率細化前后的圖像去霧對比
由于霧會造成像素強度的增加, 呈現明亮的顏色,在式(1)中全局大氣光Ac通常被估計為霧圖像中最亮像素的強度值. 但是這種方法在某些情況下是不恰當的, 當圖像中存在比大氣光更亮的對象時, 將會高估全局大氣光的值.
基于圖像霧區域的像素強度值較大且方差值較小這一事實, 全局大氣光的估計采用基于四叉樹劃分的分層搜索方法. 首先, 輸入的霧天圖像被劃分成4個矩形子區域, 分別計算每個子區域內平均像素值減去子區域內像素值的標準差, 計算的結果作為該子區域的得分. 然后選出分數最高的子區域, 并進一步將該區域劃分為4個子區域. 重復上述過程, 直到區域大小小于給定的閾值(32×32). 如圖5所示, 圖像中紅框選中的區域是利用分層搜索方法選出的最終用于計算全局大氣光值的像素區域.

圖5 分層搜索方法選出的用于估計大氣光值的區域
用于估算大氣光值的區域選定后, 在該區域中計算式(5), 將使計算值最小的像素作為全局大氣光的值.

其中,Ir(x),Ig(x),Ib(x)分別對應輸入有霧圖像像素的3個顏色通道的像素強度值. 將估計得到的t(x) 和Ac帶入式(1)得到式(6), 根據式(6)就可以計算得到無霧清晰圖像.
算法的硬件配置和軟件配置如下:
硬件配置: Intel Core i5-9400F @ 2.90 GHz CPU,Nvidia GeForce RTX 2060 GPU, 內存16 GB.
軟件配置: Windows 10, TensorFlow 2.1, CUDA 10.1, Python 3.7.
網絡訓練所需的數據集為NYU2 Depth Database[17].根據式(1)和式(2)合成霧天圖像,A的 值在[0.6, 1.0]之間隨機采樣, β的值在[0.5, 1.5]之間隨機采樣. 總共合成26 064張霧圖像, 選取其中23 231張圖像用于訓練,2 833張非重疊的霧圖像用于測試. 圖像大小為320×240.另從互聯網上收集了部分自然界真實霧天圖像作為測試圖像.
在訓練過程中, 采用隨機梯度下降法(stochastic gradient descent, SGD)和反向傳播算法對網絡參數優化. SGD的動量參數設置為0.9, 初始學習率設為0.001,在迭代80個epoch后學習率設為0.000 1, 損失函數為均方誤差(MSE), 網絡中激活函數為ReLU, 網絡訓練總的迭代次數為120個epoch.
本節將本文算法與經典的傳統圖像去霧算法和深度學習去霧算法進行了對比, 圖像來自RESIDE[18]數據集和自然真實霧天圖像. 對比算法涉及以下4種:DCP[4]暗通道先驗圖像去霧、MSCNN[5]多尺度神經網絡圖像去霧、AOD-Net[6]多合一端到端圖像去霧、Residual-GIF[11]混合殘差學習與導向濾波算法在圖像去霧中的應用.
3.2.1 合成霧圖像的去霧對比與分析
為了客觀的評價本文算法的優劣, 本文將結構相似度(structural similarity, SSIM)和峰值信噪比(peak signal to noise ratio, PSNR)作為圖像質量評價的客觀指標. 結構相似度從圖像亮度、對比度和結構3個方面衡量圖像的相似性, SSIM值越大, 圖像失真越小, 去霧性能越好. 峰值信噪比是廣泛使用的圖像質量客觀評價指標之一, PSNR值越大, 圖像受噪聲影響越小, 圖像質量越高.
圖6為測試數據集上部分霧圖像的去霧結果. DCP算法得到的去霧圖像存在色彩失真, 并且在圖像邊緣處存在光暈效應, 造成這一現象是因為算法是基于局部透射率恒定的, 因此在圖像景深發生變化時透射率的估計是不準確的, 會在物體邊緣產生光暈. MSCNN算法同樣也存在去霧圖像顏色不真實和對比度過度增強的問題. AOD-Net算法去霧后的圖像仍存在少量的霧. Residual-GIF算法和本文的算法取得了相對較好的效果, 但本文算法去霧更徹底, 并且圖像的紋理信息更豐富. 為了更好地觀察不同算法的去霧效果, 說明本文算法的有效性, 本文將第一幅圖像的去霧圖像進行了局部放大, 如圖7所示. 可清晰地觀察到, DCP算法和MSCNN算法去霧后的圖像存在色彩失真. AOD-Net算法去霧后的圖像在燈籠上仍存在少量的霧. 本文算法相對于Residual-GIF算法而言, 本文算法燈籠的邊緣信息得到了更好的保持, 燈籠看上去輪廓更分明.

圖6 測試集上不同算法結果對比

圖7 不同算法去霧圖像的局部放大
不同算法的PSNR和SSIM指標對比結果如表1所示. 由表可知, 相較于其他算法, 本文算法在峰值信噪比和結構相似度上均有最高的值, 這說明本文算法具有明顯優勢, 去霧圖像受噪聲干擾更小, 圖像質量更好, 去霧前后的圖像具有更高的相似度.

表1 不同算法的PSNR和SSIM對比結果
3.2.2 自然真實圖像的去霧對比與分析
此部分討論自然真實霧圖像的去霧, 不同算法的自然真實霧圖像去霧對比如圖8所示. DCP算法在圖像天空區域的去霧效果不理想, 由于DCP算法基于暗通道先驗特性, 往往會高估霧的濃度, 導致在圖像邊緣處容易產生光暈偽影. MSCNN算法恢復的無霧圖像在視覺上呈現對比度過度增強, 由第3幅圖可以看出圖像中樹有關的邊緣信息并沒有得到保持, 樹葉顏色偏暗, 說明MSCNN算法通過細尺度網絡細化透射率的手段并不奏效. AOD-Net算法將所有中間參數都在一個統一的模型中進行估計, 一定程度上避免了參數分別估計帶來誤差累計的問題, 去霧圖像取得了較好的效果, 但圖像仍存在少量的霧. 基于殘差學習的Residual-GIF算法同樣也存在去霧不完全的問題. 本文算法與前幾種算法相比, 去霧圖像在視覺上取得了更好的效果, 不僅去霧更加徹底, 而且圖像邊緣保持的更好.
將圖8中第2幅霧圖像在不同算法下的去霧圖像進行局部放大, 放大效果如圖9所示. 可以清楚地看到MSCNN、AOD-Net和Residual-GIF對濃霧圖像的去霧處理并不理想, 圖像遠景部分仍存在少量的霧. 由于圖9中的圖像不含天空區域, 所以DCP算法同本文算法一樣都能較好地實現圖像去霧. 但是, 對于含有天空區域的圖像, DCP算法會存在天空區域透射率估計不準確的問題, 去霧圖像存在光暈偽影, 而本文算法對于存在天空區域的圖像一樣能較好地實現圖像去霧.

圖8 不同算法對霧天圖像的去霧結果

圖9 不同算法去霧圖像的局部放大
本文分別對多尺度特征提取模塊、殘差模塊和深度可分離卷積模塊進行了消融定量分析實驗, 以此驗證本文網絡的有效性.
為了保證消融實驗中比較的公平性, 網絡參數設置均保持一致. 消融實驗結果如表2所示, 從結果中可以看出, 采用多尺度并行卷積模塊提取圖像特征并進行融合, 網絡模型的性能得到了一定的提高, 同時模型中加入殘差學習模塊能進一步改善網絡性能. 用深度可分離卷積替代普通卷積, 網絡性能略微有所提高. 但是, 正如第2.2節圖2所分析的那樣, 深度可分離卷積相比普通卷積, 其網絡模型參數量大大減小.

表2 不同配置的消融實驗定量比較結果
針對傳統圖像去霧算法中去霧不完全, 色彩失真的問題, 提出了一種改進殘差神經網絡的圖像去霧算法. 本文新穎的在殘差學習模塊中嵌入深度可分離卷積, 有效避免了網絡層數增加而導致模型訓練困難和網絡參數量劇增的問題. 本文算法還利用加權引導濾波對網絡得到的透射率圖進行了細化, 使得最終的去霧圖像保留更多的邊緣信息, 并且通過四叉樹分層搜索方法準確地估計大氣光值. 本文通過消融實驗對比分析了網絡中各個模塊對整個網絡的影響, 驗證了所提算法的有效性和可靠性. 實驗結果表明本文算法在PSNR和SSIM指標上取得了一定的提高, 并且去霧圖像在主觀視覺效果上也有較好的表現, 同時算法對于自然真實霧圖像的去霧也能很好的適用.