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

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

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

該統(tǒng)計(jì)規(guī)律被稱為暗原色先驗(yàn)。
利用暗原色先驗(yàn)理論,結(jié)合大氣散射模型即可得到透射率t(x)的估計(jì)表達(dá)式:

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

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

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

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

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

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

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

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

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

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

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

表1 各方法相關(guān)評(píng)價(jià)指標(biāo)對(duì)比

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

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

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

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

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