董輝 張斌
光在空氣中傳播時(shí)會(huì)被“霧”[1?2]反射、吸收和散射.光的強(qiáng)度和顏色會(huì)因霧的濃度和光線傳播距離發(fā)生改變.這就造成了圖像質(zhì)量下降,包括圖像模糊,對(duì)比度下降,色彩弱化,場(chǎng)景特征減弱.特別是有霧圖像的深度信息被破壞,會(huì)影響后續(xù)圖像處理和視覺計(jì)算效果.所以,在遙感、航空和水下圖像處理,室外監(jiān)控和目標(biāo)識(shí)別應(yīng)用中,去霧處理被廣泛使用.圖像去霧可以消除霧氣干擾和顏色失真,提高對(duì)比度和視覺效果.
去霧技術(shù)中主要的挑戰(zhàn)是有霧圖像丟失了原始場(chǎng)景的深度信息,這樣就不能使用大氣散射模型對(duì)圖像建模.所以,在去霧處理時(shí),需要使用多幅圖像或附加信息獲得場(chǎng)景的深度信息,實(shí)現(xiàn)對(duì)有霧圖像建模.當(dāng)前,主要的去霧方法有三類.第一類采用圖像處理方法.包括直方圖均衡[3?4]和Retinex方法[5].基于圖像處理的去霧方法只關(guān)注圖像對(duì)比度,飽和度和亮度的提高.這類方法不能得到場(chǎng)景的深度信息、而且會(huì)惡化圖像的視覺效果.第二類采用物理模型方法.這類方法使用附加信息、多幅圖像或先驗(yàn).使用附加信息的方法包括使用大氣光偏振效應(yīng)[6]和深度信息[7].這兩種附加信息需要使用額外的器件,因而在實(shí)際應(yīng)用中不能方便獲得.使用多幅圖像的方法通過(guò)采集同一場(chǎng)景不同天氣條件下的多幅圖像實(shí)現(xiàn)[8?10].在實(shí)際應(yīng)用時(shí),多幅圖像并不能很輕易的獲取.所以,基于假設(shè)[11?13]或先驗(yàn)[2,14]的方法得到越來(lái)越多的應(yīng)用.這種方法首先對(duì)霧建模,然后通過(guò)逆過(guò)程實(shí)現(xiàn)去霧.這種方法使用單一有霧圖像實(shí)現(xiàn)去霧,效果自然.第三類方法基于機(jī)器學(xué)習(xí)[15?18],針對(duì)特定大氣條件訓(xùn)練模型.這類方法有較好的去霧效果,但是對(duì)非霧氣造成的圖像退化產(chǎn)生不好的影響.當(dāng)前,去霧方法中最簡(jiǎn)單有效的是基于暗通道先驗(yàn)(Dark channel prior,DCP)的方法[2].但這一方法并不能很好地處理天空?qǐng)D像和光暈現(xiàn)象,而且計(jì)算量大.針對(duì)該方法的不足,一些后續(xù)工作對(duì)其進(jìn)行了補(bǔ)充[19?21].
本文在DCP方法的基礎(chǔ)上引入可變形自適應(yīng)濾波和形態(tài)學(xué)重構(gòu),實(shí)現(xiàn)去除光暈現(xiàn)象.采用最優(yōu)化介質(zhì)傳播系數(shù)[22]處理有霧圖像天空區(qū)域.實(shí)驗(yàn)結(jié)果表明本文提出的算法能夠普遍用于不同霧氣條件的圖像去霧.對(duì)天空區(qū)域和光暈的去除都有很好的處理效果.而且,該方法采用形態(tài)學(xué)運(yùn)算,易于并行化和硬件實(shí)現(xiàn).
在計(jì)算機(jī)視覺中,大氣光散射模型為:
其中,E為輻照度,d為光線傳播的距離,λ為光的波長(zhǎng),E0(λ)為光源的照度(d=0),β(λ)為總散射系數(shù),E∞(λ)為大氣光的最大輻照.公式右邊的第一項(xiàng)為入射光線的衰減模型,第二項(xiàng)為大氣光模型.有霧圖像模型[2,14]可以簡(jiǎn)化為:
其中,I(x)為觀測(cè)圖像,J(x)為場(chǎng)景輻照,A為全局大氣光,t(t(x)=e?βd(x))為透射率.圖1說(shuō)明式(2)各項(xiàng)在圖像中的意義.圖像去霧的目的就是使用下式恢復(fù)出場(chǎng)景J:
圖1 有霧圖像模型Fig.1 Haze imaging model
去霧中的挑戰(zhàn)是從單幅圖像I中估算出A和t.顯然未知條件大于約束.J不可能直接由式(3)算出.因此,需要使用先驗(yàn)或假設(shè)提供更多約束.
圖像去霧本質(zhì)上是一個(gè)病態(tài)問題,所以需要經(jīng)驗(yàn)觀測(cè)值,多種假設(shè)或先驗(yàn)知識(shí)才能實(shí)現(xiàn).Zhu等[11]發(fā)現(xiàn)了顏色衰減先驗(yàn).Meng等[23]針對(duì)大氣透射函數(shù)提出了內(nèi)在邊界約束.不同于其他方法基于有霧圖像提出假設(shè)或先驗(yàn),He等[2]基于無(wú)霧圖像的統(tǒng)計(jì)特性提出了DCP.DCP基于無(wú)霧圖像的一個(gè)基本特征:無(wú)霧圖像中除天空區(qū)域,至少有一個(gè)顏色通道的亮度非常低.DCP提出三條先驗(yàn):大氣光值已知,大氣透射率在圖像塊中是常數(shù),J的暗通道亮度趨近于0.任意圖像P的暗通道計(jì)算為:min?DC(x)(minCPC).其中,PC為P的彩色通道,?DC(x)為中心點(diǎn)x的鄰域.minC∈(R,G,B)計(jì)算每個(gè)像素的最小顏色通道值,min?DC(x)計(jì)算x鄰域?DC(x)中的最小值.暗通道的計(jì)算過(guò)程如圖2所示.
圖2 暗通道計(jì)算Fig.2 Calculation of dark channel
大氣光值A(chǔ)假設(shè)為已知值,式(2)歸一化為:
其中,C表示R、G、B三個(gè)顏色通道.像素x的鄰域?DC(x)中常量透射系數(shù)t表示為(x).式(4)等號(hào)兩邊進(jìn)行最小值運(yùn)算得到:基于無(wú)霧圖像的非天空區(qū)域暗通道值趨近于零這一先驗(yàn),以及大氣光值非負(fù),式(5)簡(jiǎn)化為:
然后圖像場(chǎng)景J(x)可以通過(guò)下式計(jì)算得到:
這樣,有霧圖像就實(shí)現(xiàn)了去霧處理.使用這一方法恢復(fù)出的圖像效果好,計(jì)算簡(jiǎn)單.但是,在去霧過(guò)程中,假設(shè)圖像在每一個(gè)像素鄰域中透射率相同.這樣恢復(fù)出的圖像在某一圖像塊中深度不連續(xù)的位置會(huì)產(chǎn)生光暈現(xiàn)象.為解決這一問題可以使用導(dǎo)向?yàn)V波(Guided image filter,GIF)[20].
通常情況下,基于DCP的去霧方法能夠有效地對(duì)單幅有霧圖像去霧.但是,仍存光暈現(xiàn)象和天空區(qū)域彩色失真現(xiàn)象.
1.3.1 光暈現(xiàn)象
像素鄰域大小的選擇在DCP方法中非常關(guān)鍵.在去霧運(yùn)算中,鄰域越小Jdark(x)的計(jì)算結(jié)果誤差越大,恢復(fù)的場(chǎng)景圖像過(guò)飽和越明顯.但是,大的鄰域會(huì)使得透射率在一個(gè)過(guò)大的區(qū)域內(nèi)都保持恒定,在鄰域內(nèi)存在深度邊緣時(shí),會(huì)產(chǎn)生強(qiáng)的光暈現(xiàn)象,如圖3所示,鄰域越大,去霧后的圖像光暈影響越大.因此,GIF、散射模型[24?25]、混合DCP[26],保邊處理[12,27]和視覺恢復(fù)[28]等技術(shù)被用于解決光暈問題.但是這些技術(shù)都有其自身的限制.散射模型方法需要預(yù)先得到Trimap圖或用戶手動(dòng)標(biāo)記前景背景.其他方法需要大量的計(jì)算和存儲(chǔ)資源.而且,上述方法都是使用固定尺寸的圖像塊對(duì)一幅圖像進(jìn)行處理.使用形狀不變的鄰域會(huì)破壞圖像塊中深度突變位置的深度信息,造成透射率計(jì)算的錯(cuò)誤.比如使用GIF,大尺寸窗口能夠分散深度邊緣周圍的光暈.但是,去霧后圖像深度邊緣模糊,如圖4所示,窗口越大,光暈越弱,但是葉子和樹枝邊緣的對(duì)比度越差.
本文采用自適應(yīng)結(jié)構(gòu)元和形態(tài)學(xué)重構(gòu)計(jì)算透射率,為了實(shí)現(xiàn)不同深度的保邊濾波,實(shí)現(xiàn)在深度近似的結(jié)構(gòu)中完成濾波和細(xì)小紋理消除,同時(shí)保持圖像的深度邊緣.同時(shí),因?yàn)樾螒B(tài)學(xué)運(yùn)算的天然并行性,易于并行加速和硬件實(shí)現(xiàn).首先使用有霧圖像對(duì)每一像素點(diǎn)計(jì)算其合適的結(jié)構(gòu)元,然后使用這些結(jié)構(gòu)元完成中值濾波輸出模板圖像.有霧圖像的暗通道圖像作為標(biāo)記圖像.使用標(biāo)記圖像和模板圖像完成形態(tài)學(xué)膨脹重建運(yùn)算,結(jié)果即為精細(xì)化的暗通道圖像.
1.3.2 顏色失真
DCP中,不同區(qū)域使用同一恒定的大氣光值并不適合,特別是在天空區(qū)域,會(huì)產(chǎn)生嚴(yán)重的色彩失真.當(dāng)圖像中像素I大于選定的A時(shí),J(X)=1/t(I?A)+A會(huì)得到大于255的數(shù)值,這樣就產(chǎn)生了結(jié)果的上溢,造成恢復(fù)圖像的顏色失真.文獻(xiàn)[2]中,假設(shè)大氣光值大于所有目標(biāo)亮度.但是,當(dāng)目標(biāo)亮度大于AC時(shí),式(7)會(huì)計(jì)算出錯(cuò)誤的透射率(x),如圖5所示.為了減少天空區(qū)域的色彩失真,文獻(xiàn)[29]引入啟發(fā)式邊界,假設(shè)地面區(qū)域的透射率只與其距地平線的垂直距離有關(guān),超過(guò)地平線的天空區(qū)域透射率置為0.這一方法對(duì)于非天空區(qū)域會(huì)產(chǎn)生發(fā)黃和偏暗的效果.文獻(xiàn)[30]根據(jù)有霧圖像的統(tǒng)計(jì)直方圖自動(dòng)檢測(cè)霧氣程度,然后引入非負(fù)天空區(qū)域補(bǔ)償項(xiàng),用于調(diào)整天空區(qū)域(x)的初始值.但是這一方法會(huì)產(chǎn)生明顯的塊效應(yīng).
圖3 不同鄰域大小對(duì)去霧的影響Fig.3 Haze removal results by different patch sizes
本文將文獻(xiàn)[22]中提出的損失函數(shù)用于整幅圖像的透射率計(jì)算.該損失函數(shù)包括兩部分:對(duì)比度項(xiàng)和信息損失項(xiàng).通過(guò)損失函數(shù)的約束,避免了有霧圖像中亮度大于大氣光值的像素,在去霧處理時(shí)發(fā)生溢出.本文提出計(jì)算亮通道(R、G、B三通道中的最大值),使用亮通道計(jì)算透射率.然后融合由亮通道和重構(gòu)圖分別計(jì)算的透射率,得到最終的透射率(x).這樣能夠有效避免天空區(qū)域的色彩失真.
圖4 DCP+GIF方法使用不同大小鄰域的去霧效果Fig.4 Haze removal results by DCP+GIF with different patch sizes
圖5 使用DCP去霧后天空區(qū)域的顏色失真現(xiàn)象Fig.5 Haze removal results with large sky region
圖6 本文去霧算法流程Fig.6 Flowchart of our proposed algorithm
本文提出的算法流程如圖6所示.包括自適應(yīng)濾波,形態(tài)學(xué)重構(gòu)和天空區(qū)域處理:
1)由有霧圖像I的灰度圖計(jì)算顯著圖(Salience map,SM)[31].SM作為導(dǎo)向圖計(jì)算自適應(yīng)結(jié)構(gòu)元.生成的結(jié)構(gòu)元對(duì)最小顏色通道圖像dc1進(jìn)行中值濾波.得到保留了邊緣,抑制了細(xì)節(jié)的結(jié)構(gòu)圖像AF.
2)由I計(jì)算最小顏色通道dc1和暗通道dc2.根據(jù)dc2和I計(jì)算大氣光值A(chǔ).以dc2為標(biāo)記圖像,AF為模板圖像完成形態(tài)學(xué)膨脹重構(gòu)運(yùn)算,獲得精細(xì)化暗通道圖像dc3.結(jié)合A計(jì)算暗通道透射率tdc.
3)由I計(jì)算最大亮通道bc.根據(jù)bc計(jì)算亮通道透射率tbc.逐像素比較tdc和tbc,輸出最大值得到最優(yōu)透射率(x).最后,由(x),A和I恢復(fù)出去霧圖像.
去霧處理的中間過(guò)程如圖7所示.自適應(yīng)濾波圖、暗通道圖和亮通道圖由I計(jì)算得到.暗通道和自適應(yīng)濾波圖完成重構(gòu)運(yùn)算.使用重構(gòu)圖像計(jì)算tdc.亮通道進(jìn)行一次膨脹運(yùn)算再計(jì)算tbc.融合兩種透射率后使用式(8)實(shí)現(xiàn)去霧.
透射率t的表達(dá)式為:
其中,β表示散射系數(shù),d(x)表示場(chǎng)景深度.t僅與場(chǎng)景深度有關(guān).令f和g分別表示標(biāo)記圖像和模板圖像,并且f≤g,測(cè)地膨脹定義為:
其中,b為結(jié)構(gòu)元(Structure element,SE),⊕表示膨脹運(yùn)算,∧表示按像素對(duì)應(yīng)取最小值.大小為n的測(cè)地膨脹定義為:
標(biāo)記圖像f對(duì)模板圖像g的膨脹形態(tài)學(xué)重建表示為:
其中,k為迭代次數(shù).當(dāng)?shù)\(yùn)算達(dá)到穩(wěn)定,即時(shí),迭代停止.膨脹重建能夠在不改變物體形狀的前提下消除標(biāo)記圖像中的細(xì)小結(jié)構(gòu).將形態(tài)學(xué)重建引入透射率的優(yōu)化計(jì)算,需要選擇合適的標(biāo)記和模板圖像.AF(Igray)和dc2分別作為模板和標(biāo)記圖像進(jìn)行形態(tài)學(xué)重構(gòu)運(yùn)算,結(jié)果如圖8所示.與采用GIF的方法比較,采用形態(tài)學(xué)重構(gòu)恢復(fù)的有霧圖像具有更好的對(duì)比度和紋理結(jié)構(gòu).但是采用形態(tài)學(xué)重構(gòu)恢復(fù)圖像,在同一場(chǎng)景深度,很難去除細(xì)紋理集中區(qū)域的細(xì)紋理.因此,要提高去霧的效果,需要解決的問題是:保證深度邊緣不被模糊,抑制相近場(chǎng)景深度的密集細(xì)紋理.為此,我們引入了可變形自適應(yīng)濾波.
圖7 本文去霧算法中間過(guò)程Fig.7 Flowchart of proposed haze removal procedure
最小顏色通道既有圖像的強(qiáng)邊緣信息,也有細(xì)紋理和噪聲.最優(yōu)的模板圖像應(yīng)該僅包含完整且定位準(zhǔn)確的深度邊緣信息.形態(tài)學(xué)運(yùn)算中,通常使用開啟和閉合運(yùn)算去除圖像細(xì)邊緣和噪聲.但是會(huì)模糊圖像邊緣.所以,采用自適應(yīng)可變形中值濾波對(duì)模板圖像進(jìn)行預(yù)處理,能夠很好地去除噪聲和細(xì)紋理,同時(shí)保持準(zhǔn)確的深度邊緣,如圖9所示.
我們采用顯著圖[31]作為導(dǎo)向圖(Pilot)計(jì)算可變結(jié)構(gòu)元.SM計(jì)算過(guò)程如算法1所示.計(jì)算出導(dǎo)向圖后,使用算法2,實(shí)現(xiàn)對(duì)每個(gè)像素的自適應(yīng)中值濾波.去霧效果如圖10所示,去霧后的圖像避免了光暈效應(yīng),而且對(duì)比度得到了增強(qiáng).
圖9 自適應(yīng)濾波結(jié)果Fig.9 Adaptive filtering results
圖10 使用自適應(yīng)中值濾波和形態(tài)學(xué)重構(gòu)實(shí)現(xiàn)的去霧結(jié)果Fig.10 ADSE filter and morphological reconstruction results
算法1.顯著圖(SM)計(jì)算
輸入.灰度圖像I(x).
輸出.顯著圖.
步驟 1.計(jì)算I(x)的二維離散傅立葉變換:F[I(x)].
步驟2.計(jì)算頻譜幅值A(chǔ),相位譜P和log譜L:A=(F[I(x)]),P=φ(F[I(x)]),L=lg(A).
步驟3.V=hn?L,其中hn為均值濾波模板.
步驟4.計(jì)算譜殘差:R=L?V.
步驟 5.計(jì)算SM:SM(x)=g(x)?F?1[exp(R+P)]2,g(x)為高斯濾波模板.
算法2.自適應(yīng)中值濾波
輸入.導(dǎo)向圖SM,dc1,結(jié)構(gòu)元限制范圍?(邊長(zhǎng)為2r+1的矩形).
輸出.自適應(yīng)中值濾波后的圖像.
步驟1.j=1,循環(huán)步驟2~5.
步驟2.以當(dāng)前像素為中心,選取區(qū)域?,?中每一像素i計(jì)算沿不同路徑到中心點(diǎn)的像素值距離,?內(nèi)結(jié)構(gòu)元長(zhǎng)度d(x,y)的均值T作為結(jié)構(gòu)元長(zhǎng)度上限.
步驟3.比較?內(nèi)各像素點(diǎn)結(jié)構(gòu)元長(zhǎng)度d(x,y)與T,若d(x,y)>T,自適應(yīng)SE當(dāng)前位置置0;否則,置1.
步驟4.使用當(dāng)前得到的自適應(yīng)SE對(duì)dc1進(jìn)行中值濾波,結(jié)果為輸出圖像當(dāng)前像素的灰度.
步驟 5.j?j+1,移動(dòng)到下一像素,直到(j=N),結(jié)束循環(huán),其中,N為圖像像素個(gè)數(shù).