何立風(fēng) 鐘 巖 劉艷玲 姚 斌
1(陜西科技大學(xué)電氣與信息工程學(xué)院 陜西 西安 710021)2(日本愛(ài)知縣立大學(xué)信息科學(xué)學(xué)院 日本 愛(ài)知縣 480-1198)
因?yàn)殪F霾天氣一直影響人們的正常生活,研究去霧的一些算法也相繼出現(xiàn),去霧領(lǐng)域的研究在近年來(lái)逐漸熱門,從捕獲的圖像中去除霧、霾,恢復(fù)圖像原本的色彩,成為一個(gè)較為重要的研究課題。
目前,國(guó)內(nèi)外學(xué)者對(duì)去霧算法的研究主要分為兩類。一類是依靠圖像的各種先驗(yàn)知識(shí)[1](例如:暗通道[2]、顏色衰減[3]、霧線[4]、對(duì)比度[5]等)來(lái)輔助估計(jì)透射圖[6],其中暗通道先驗(yàn)算法則是以He算法為代表,He算法去霧整體效果較好,但存在以下缺陷:(1) 當(dāng)圖像中存在大面積天空區(qū)域時(shí),天空區(qū)域的霧霾沒(méi)有被去除掉,這是因?yàn)樘炜諈^(qū)域的像素點(diǎn)R、G、B三通道像素值均不趨近于0;(2) 在去霧過(guò)程中求取透射率圖時(shí),存在大量浮點(diǎn)數(shù)計(jì)算,導(dǎo)致整個(gè)程序運(yùn)行時(shí)間緩慢,無(wú)法達(dá)到實(shí)時(shí)去霧的要求。另一類是基于深度學(xué)習(xí)[7]的方法,可以說(shuō)是運(yùn)用了非常強(qiáng)大的非線性模型[8],利用大量的有霧、無(wú)霧圖像的數(shù)據(jù)對(duì),對(duì)透射圖進(jìn)行估計(jì),因此一般能夠得到超越傳統(tǒng)方法的結(jié)果。但是基于機(jī)器學(xué)習(xí)[9]的算法在不同數(shù)據(jù)上的泛化性也是一個(gè)未知數(shù)。
本文在He算法的基礎(chǔ)上,發(fā)現(xiàn)由于帶霧圖像中局部區(qū)域暗通道分量不趨近于0,且不能滿足實(shí)時(shí)去霧的情況下,提出了一種對(duì)大氣光值改進(jìn)的方案。首先計(jì)算像素值R、G、B三通道的方差來(lái)判斷當(dāng)前像素點(diǎn)是否存在暗通道值,若不存在,則通過(guò)區(qū)域窗口中最小的暗通道值作為當(dāng)前像素點(diǎn)的暗通道值,這樣就可以得到一個(gè)較為準(zhǔn)確的大氣光值;然后先通過(guò)對(duì)圖像進(jìn)行下采樣,求出原圖的縮略圖的透射率,再通過(guò)上采樣或插值的方式還原出原圖粗糙的透射率,作導(dǎo)向?yàn)V波細(xì)化,這樣圖像復(fù)原的效果相較于其他算法有大幅度提升,并且程序運(yùn)行時(shí)間也大大縮短;最后針對(duì)天空區(qū)域?qū)GB顏色空間轉(zhuǎn)為HSI顏色空間,對(duì)其進(jìn)行圖像復(fù)原。結(jié)合大氣散射模型以及求得的精準(zhǔn)透射率和天空區(qū)域的大氣光值,將天空帶霧區(qū)域有效快速的進(jìn)行去霧。
在去霧領(lǐng)域中,通常使用大氣散射模型來(lái)描述這類問(wèn)題:
Img(x)=J(x)t(x)+A(1-t(x))
(1)
t(x)=e-θD(x)
(2)
式中:Img(x)是我們采集的帶霧圖像,J(x)是實(shí)驗(yàn)結(jié)果輸出的無(wú)霧圖像,A是大氣散射模型中的全局大氣光值,t(x)表示透射率,θ表示大氣散射系數(shù),D(x)表示景物深度。物理模型去霧的本質(zhì)為根據(jù)已知的Img(x),求解未知的J(x)、A和t(x)。
暗通道先驗(yàn)去霧算法認(rèn)為,在大部分非天空的區(qū)域里,某一些像素肯定有一種或以上的顏色通道具有很低的值,也就是該區(qū)域光強(qiáng)度的最小值是個(gè)趨近于0的值,可用公式描述如下:
(3)
式中:Jc表示色彩的R、G、B任一通道,設(shè)定Ω(x)為大小為奇數(shù),中心為x的一個(gè)窗口,根據(jù)暗通道先驗(yàn),假設(shè)這些小的數(shù)值趨近于0,則可以進(jìn)一步推導(dǎo)出式(1)中J(x)項(xiàng)趨近于0,因此可以在式(1)中推導(dǎo)出t(x)的估計(jì)值:
(4)
全局大氣光A的求取:首先將暗通道圖所有像素點(diǎn)按亮度像素值大小排序,抽取前0.1%像素值最大的像素點(diǎn),然后將這些像素位置標(biāo)記好,在原始帶霧圖像中找到這些標(biāo)記的位置,找到像素值最高的點(diǎn),其像素值作為大氣光值A(chǔ),由于t(x)的值在估計(jì)時(shí)會(huì)有誤差,在暗通道先驗(yàn)中設(shè)定閾值t0=0.1,使得最終的恢復(fù)公式如下:
(5)
暗通道去霧算法是近年來(lái)單幅圖像去霧算法中比較主流的一種方法。此方法雖然在去霧方面取得不錯(cuò)的效果,但是算法本身存在一些問(wèn)題:在透射率t(x)估計(jì)時(shí),當(dāng)帶霧圖像中局部像素的R、G、B通道中的像素值都不趨近于0,此時(shí)得到的透射率就過(guò)于粗糙,圖像恢復(fù)[10]會(huì)有很多誤差,如圖1所示。
(a) 帶霧圖像 (b) 暗通道
(c) 透射率t (d) 恢復(fù)圖像圖1 暗通道先驗(yàn)算法
圖1(d)就是利用暗通道原理恢復(fù)得到的無(wú)霧圖像圖。透射率t的估計(jì)過(guò)于粗糙,且大氣光值的選取有待商榷。因?yàn)樵趫D中某些像素點(diǎn)的R、G、B三通道像素值都沒(méi)有趨近于0,所以不符合暗通道先驗(yàn)這個(gè)條件,導(dǎo)致在根據(jù)式(5)復(fù)原的過(guò)程中,圖像的上半部分區(qū)域的結(jié)果出現(xiàn)失真[11]、色彩混亂的情況,致使圖(d)中恢復(fù)的無(wú)霧圖像并不理想。
本文就大氣光值的選取,透射率圖的細(xì)化,圖像復(fù)原后的處理三個(gè)方面進(jìn)行了改進(jìn)。實(shí)驗(yàn)結(jié)果發(fā)現(xiàn),大氣光值的精確選取消除了局部區(qū)域色彩分量不趨近于0造成的失真缺陷;提取透射率圖方法的改進(jìn)提高了程序的運(yùn)行速度;HIS模型[12]圖像復(fù)原更加符合人類對(duì)色彩空間的認(rèn)知。
針對(duì)以上分析,本文對(duì)暗通道先驗(yàn)算法進(jìn)行如下改進(jìn):將大氣光值的選取進(jìn)行優(yōu)化;透射率圖的估計(jì)先局部處理再進(jìn)行濾波;復(fù)原后的圖像通過(guò)圖像增強(qiáng)技術(shù)再進(jìn)行二次處理。
在暗通道先驗(yàn)算法中,大氣光值A(chǔ)的取值具體步驟如下:
(1) 在暗通道圖中對(duì)像素值得大小排序,抽取出其中像素值最大的前0.1%像素點(diǎn),并標(biāo)記好這些像素的下標(biāo)。
(2) 在這些下標(biāo)中,找到原始帶霧圖像img中對(duì)應(yīng)下標(biāo)的點(diǎn),這些點(diǎn)中像素值最大的作為大氣光A的值。
這樣的大氣光值A(chǔ)有以下的問(wèn)題:當(dāng)局部像素點(diǎn)的R、G、B三通道的像素值都不趨近于0,且像素值大小都相近。此時(shí),得到的暗通道圖中,此局部像素點(diǎn)的暗通道圖的像素值就是一個(gè)不精確的值,從而選取的大氣光值A(chǔ)就出現(xiàn)偏差。
針對(duì)此問(wèn)題,本文提出一種改進(jìn)方法,在提取暗通道圖時(shí),設(shè)定一個(gè)閾值T1,當(dāng)局部像素點(diǎn)R、G、B三通道像素值的方差大于閾值T1時(shí),說(shuō)明此像素點(diǎn)三通道的像素值波動(dòng)很大,可以取其最小的值選做是暗通道圖的一部分。局部像素點(diǎn)的均值和方差由式(6)、式(7)計(jì)算所得。
(6)
(7)
當(dāng)局部像素點(diǎn)R、G、B三通道像素值的方差小于閾值T時(shí),說(shuō)明此像素點(diǎn)三通道的像素值波動(dòng)不大,無(wú)法取得對(duì)應(yīng)的暗通道像素值,此時(shí)其暗通道值由窗口中其他像素點(diǎn)的三通道中最小值的均值確定,如式(8)所示,其中,窗口區(qū)域大小為W,像素點(diǎn)img(i,j)。
(8)
實(shí)驗(yàn)證明,通過(guò)該方法得到的大氣光值較為平滑、穩(wěn)定,對(duì)局部色彩分量不趨近于0的區(qū)域進(jìn)行精準(zhǔn)估計(jì),從而得到優(yōu)化的大氣光值,為后續(xù)的圖像復(fù)原工作提供有力的支持。
2.2.1 He的透射率估計(jì)
He的算法效果針對(duì)大部分帶霧圖像去霧效果都較為不錯(cuò),但是存在的問(wèn)題也是很明顯的。例如在計(jì)算透射率圖時(shí),會(huì)有大量的計(jì)算導(dǎo)致程序運(yùn)行速度太慢,很難達(dá)到實(shí)時(shí)去霧的要求。
2.2.2 本文的透射率估計(jì)
本文通過(guò)對(duì)透射率圖的計(jì)算方式上進(jìn)行一些改變,通過(guò)對(duì)透射率圖精度需求的下降,提高透射率圖計(jì)算速度,這樣加快程序的執(zhí)行速度。
首先,求取原圖的縮略圖,也就是原圖的下采樣,使得圖像大部分的細(xì)節(jié)還存在,丟失部分細(xì)節(jié);其次求取縮略圖的透射率圖,這樣就可以減少計(jì)算量,加快程序運(yùn)行速度,再通過(guò)三次內(nèi)插法或雙線性內(nèi)插法來(lái)獲取原圖的透射率圖;最后對(duì)求得的透射率圖用導(dǎo)向?yàn)V波精確化。計(jì)算過(guò)程如圖2所示。
圖2 計(jì)算透射率流程圖
對(duì)一幅1 024×768的帶霧圖像進(jìn)行透射率圖的估計(jì),本文的算法得出的透射率圖在大部分細(xì)節(jié)上幾乎一致,效果良好,但在算法運(yùn)行時(shí)間上大幅提高,具體如圖3及表1所示。
(a) 帶霧圖像 (b) He算法透射率圖
(c) 帶霧圖像 (d) 本文透射率圖圖3 透射率圖估計(jì)的對(duì)比
表1 不同算法對(duì)透射率圖估計(jì)的時(shí)間
實(shí)驗(yàn)結(jié)果發(fā)現(xiàn),針對(duì)一幅1 024×768的帶霧圖像處理只需要30 ms左右,640×480大小的帶霧圖像處理只需大約27 ms,而He算法需要三倍以上的時(shí)間才能完成,所以本文算法在執(zhí)行速度上滿足較多實(shí)時(shí)應(yīng)用場(chǎng)景。
2.3.1 He的復(fù)原算法
式(5)中的各個(gè)變量通過(guò)前面的步驟都已經(jīng)給出說(shuō)明,這里不再重復(fù),最后進(jìn)行計(jì)算即可。方法上簡(jiǎn)單易懂,只是通過(guò)帶霧圖像I(x)、大氣光值A(chǔ),透射率圖t(x),三個(gè)參數(shù)的值來(lái)復(fù)原出去霧圖像J(x)。在有些實(shí)例中,去霧效果并不好,在圖像的色彩上還存在較大問(wèn)題,如圖4所示。
(a) 帶霧圖 (b) 去霧后的圖圖4 He算法復(fù)原效果圖
He算法針對(duì)類似圖4的實(shí)例,由于過(guò)度去霧造成圖像中局部區(qū)域的色彩失真,使得原圖的恢復(fù)結(jié)果產(chǎn)生明顯色差問(wèn)題。
2.3.2 本文的復(fù)原方法
以上問(wèn)題是在RGB色彩空間復(fù)原的,出現(xiàn)了部分區(qū)域恢復(fù)不清晰問(wèn)題,本文算法是將圖像的RGB色彩空間轉(zhuǎn)化為HSI色彩空間,從而實(shí)現(xiàn)圖像復(fù)原的方法。HIS色彩空間是用色調(diào)(H)、飽和度(S)、亮度(L)來(lái)描述色彩,因?yàn)檫x擇HSI模型符合人們對(duì)顏色的識(shí)別。
在處理彩色圖像時(shí),可以只對(duì)I分量進(jìn)行處理,結(jié)果不改變?cè)瓐D像中的彩色種類;將RGB空間色彩轉(zhuǎn)化到HSI空間中,結(jié)合非天空和天空區(qū)域的亮度信息、色調(diào)信息、飽和度信息,可以更好地避免過(guò)度去霧圖像色彩失真的情況,從而得到較好的去霧效果。
在驗(yàn)證本文算法的可行性和有效性時(shí),本文選取了多種場(chǎng)景下的多種帶霧圖像,在運(yùn)行本文算法的同時(shí),使用He算法、中值濾波算法、均值濾波算法、多尺度Retinex算法對(duì)圖像進(jìn)行去霧處理。實(shí)驗(yàn)使用清華同方臺(tái)式機(jī),處理器為Inter(R) Core(TM) i7-6700 CPU 3.4 GHz,內(nèi)存8 GB,軟件平臺(tái)為MATLAB 2016a。
因?yàn)樵趫D像中某些像素的R、G、B三通道像素值都沒(méi)有趨近于0,導(dǎo)致在根據(jù)式(5)復(fù)原的過(guò)程中,圖像的局部區(qū)域出現(xiàn)失真,色彩混亂的情況。本文算法通過(guò)對(duì)每個(gè)像素的R、G、B色彩分量進(jìn)行篩選,挑選出符合暗通道原理的像素點(diǎn),那些不符合特定閾值的像素點(diǎn)通過(guò)其局部像素點(diǎn)的均值得出暗通道圖對(duì)應(yīng)像素點(diǎn)的像素值。綜上所述,得出的暗通道圖就較為精確,從而得到的大氣光值也較為平滑,不會(huì)造成圖像局部色彩失真的情況。
He等的透射率圖估計(jì)整體效果較好,但局部區(qū)域存在明顯的缺陷,通過(guò)本文的算法,透射率圖的估計(jì)由以下步驟得出。
通過(guò)對(duì)原圖的下采樣,得到原圖的縮略圖,選擇分辨率適當(dāng)?shù)目s略圖,因?yàn)榉直媛瘦^低時(shí),圖像中的部分細(xì)節(jié)存在失真現(xiàn)象,所以我們需要選擇合適的大小的縮略圖。求出當(dāng)前縮略圖的透射率圖,然后再通過(guò)插值的方法得到原圖的透射率圖,這樣的透射率圖精度和原方案的透射率圖效果一致,但是速度上明顯要高于He算法透射率圖求取的速度。通過(guò)求得原圖大小合適的縮略圖,再利用插值的方法求得原圖的透射率圖,在運(yùn)行速度上相比He以及其他算法有較大的提升,且透射率圖的效果也是幾乎一致的。
在實(shí)際去霧過(guò)程中,針對(duì)大面積天空帶霧圖像,如圖5所示,He的算法得出的透射率圖整體效果較好,復(fù)原的無(wú)霧圖像整體偏暗,局部會(huì)有色彩失真的問(wèn)題,本文算法正好克服了這些不足,得出的透射率圖更精確,從而復(fù)原的無(wú)霧圖像更清晰可見(jiàn)。
圖5 不同場(chǎng)景各算法去霧效果對(duì)比
圖5中分別有4種帶霧圖像,從不含天空區(qū)域和包含天空區(qū)域兩種圖像來(lái)測(cè)試各種算法的去霧效果。從結(jié)果可知,He算法相對(duì)于中值/均值濾波等算法去霧效果較為明顯,帶霧圖像中第1、2幅都是不含天空,圖像中的車、街道、房屋等目標(biāo)通過(guò)本文算法都恢復(fù)的較為清晰,Retinex算法對(duì)于帶濃霧圖像的去霧都會(huì)有局部色彩失真的情況;帶霧圖像中第3、4幅圖選取有大部分天空的圖像,He算法和中值或均值算法的效果幾乎沒(méi)有將天空區(qū)域恢復(fù)出來(lái),所選取的大氣光值在算法本身是存在一些缺陷的;Retinex算法恢復(fù)的天空區(qū)域部分偏白,去霧效果不足,而本文算法改進(jìn)大氣光值的選取,從而克服這一缺陷,天空區(qū)域的顏色與實(shí)際場(chǎng)景趨近一致。
在程序運(yùn)行時(shí)間上,如表2所示,本文和其他算法進(jìn)行了對(duì)比,對(duì)不同大小尺寸的圖像進(jìn)行去霧結(jié)果對(duì)比。
表2 各算法對(duì)不同大小圖像去霧的運(yùn)行時(shí)間
由表2可知,針對(duì)一幅彩色帶霧圖像去霧時(shí),通過(guò)對(duì)透射率圖的改進(jìn),整體算法運(yùn)行時(shí)間縮短50%以上,在保持透射率精度的同時(shí)加快速度,加上大氣光值和圖像復(fù)原的改進(jìn),得到較為明顯的去霧結(jié)果,在去霧效果和速度上達(dá)到了實(shí)際生活中實(shí)時(shí)去霧的要求。
本文是在He算法的基礎(chǔ)上,通過(guò)改進(jìn)大氣光值的選取,透射率圖的精確估計(jì),以及圖像復(fù)原利用HSI空間的特性,更加符合人類對(duì)顏色空間的認(rèn)知。一系列改進(jìn)方法進(jìn)行實(shí)時(shí)去霧,不僅在去霧程度上更加優(yōu)化,同時(shí)在實(shí)驗(yàn)處理速度上也大幅縮短時(shí)間,達(dá)到了實(shí)時(shí)去霧的效果。然而在實(shí)驗(yàn)過(guò)程中發(fā)現(xiàn)提取透射率圖時(shí)可以通過(guò)SSE代碼優(yōu)化去處理浮點(diǎn)數(shù)計(jì)算的方式加快程序運(yùn)行速度,這種通過(guò)硬件再對(duì)代碼進(jìn)一步加速是以后繼續(xù)研究的方向;同時(shí)在復(fù)雜場(chǎng)景中不僅僅是去霧,而且可以通過(guò)去霧去檢測(cè)運(yùn)動(dòng)目標(biāo)的一些方法也是我們需要研究的內(nèi)容。