路錦正,董 川
(1.西南科技大學(xué)信息工程學(xué)院,四川 綿陽 621010;2.特殊環(huán)境機器人技術(shù)四川省重點實驗室,四川 綿陽 621010)
室外場景由于受到霧、霾、煙等因素的影響,其成像結(jié)果通常是模糊的。已退化圖像的對比度低、顏色暗淡,缺失的關(guān)鍵信息給圖像直觀體驗、目標檢測與跟蹤、目標識別等造成重大影響。視頻監(jiān)控、計算機視覺等領(lǐng)域?qū)D像去霧或透霧技術(shù)有著迫切需求。透霧能夠提高霧天圖像利用價值、改善圖像觀感體驗。透霧可以顯著改善場景可懂度、糾正顏色偏差,為機器視覺提供精確的目標信息,從而提高特征提取、濾波或成分分析等算法性能[1]。
圖像透霧有諸多方法,主要包括圖像增強法、圖像融合法和圖像復(fù)原法[2]。前兩種技術(shù)的效果有限或者圖像實時處理難度高。近年來,透霧方法大多集中在基于單幅霧天圖像的復(fù)原透霧領(lǐng)域。此類方法通常需要場景的景深信息或者一些關(guān)于降質(zhì)圖像的先驗假設(shè)作為約束條件,從而將大氣成像模型求解由不適定性轉(zhuǎn)換為適定性。Fattal[3]從光學(xué)成像本質(zhì)上實現(xiàn)了透霧處理,通過估算景物的反射率來推斷反射光線在空氣中傳播時的透射率;后來,其又提出了基于color-lines的高階馬爾可夫隨機場透霧算法,對暗通道的透射率圖利用高階馬爾可夫隨機場優(yōu)化傳輸圖,恢復(fù)了更多的圖像細節(jié),對天空等大片白色區(qū)域具有很好的適應(yīng)性。但是以高階能量項來約束全局先驗,算法較耗時。He等提出了暗原色先驗單幅圖像透霧,是目前透霧效果較好的算法之一[4-5]。后續(xù)文獻的許多方法是對該方法的持續(xù)改進。暗通道先驗算法采用軟摳圖法進一步對透射率圖修復(fù),其中的大規(guī)模稀疏矩陣運算,給透霧算法帶來了巨大的運算量、耗用了大量內(nèi)存,使得算法具有較高的空時復(fù)雜度。研究人員又提出采用最小值濾波和導(dǎo)向濾波相結(jié)合、雙邊濾波等算法代替軟摳圖法修復(fù)透射率圖。雖然以上改進算法的復(fù)雜度都較原算法有所減小,但在處理數(shù)據(jù)量巨大的視頻序列圖像時仍難以滿足實時處理的要求[6]。
視頻圖像處理的嵌入式實施,以其易升級、掌握知識產(chǎn)權(quán)、抗惡劣環(huán)境等優(yōu)勢,受到了工業(yè)界的普遍關(guān)注[7-9]?;跀?shù)字信號處理器(digital signal processor,DSP)的透霧方案更是被廣泛采納。Khodary[10]研究了德州儀器(Texas Instrument,TI)公司達芬奇DM6446下的視頻透霧,實現(xiàn)了3幀/s的處理結(jié)果,后續(xù)經(jīng)深入優(yōu)化實現(xiàn)了8幀/s的透霧速度。Liu[11]基于DM6467T實現(xiàn)了25幀/s的標清分辨率透霧處理,但是透霧效果還有待改善,且該平臺功耗大、體積大。
本文結(jié)合暗原色先驗原型算法,提出了一種改進的、適用于圖像序列的快速透霧技術(shù),在保證不顯著影響圖像質(zhì)量的前提下,大幅降低算法運算量。選擇TI公司面向低功耗的C6748 DSP嵌入式平臺,算法與平臺協(xié)同優(yōu)化,采用系統(tǒng)級和模塊級的兩級優(yōu)化策略,實現(xiàn)了純DSP平臺下視頻圖形陣列(video graphics array,VGA)分辨率,即640×480像素大小的視頻圖像實時透霧處理。
基于McCartney[12]在1977年提出的大氣光模型及其衰減模型,研究人員設(shè)計了在大氣散射理論下被廣泛采用的霧天成像模型:
I(x)=J(x)t(x)+A[1-t(x)]
(1)
式中:I為攝像頭采集到的含霧圖像;J為理想條件下的清晰無霧圖像;t(x)為透射率圖,表示場景中光線穿透霧的大?。籄為大氣光成分,表征周圍環(huán)境光強弱;J(x)t(x)為直接衰減項,反映了場景反射的光線經(jīng)過衰減后的能量;A[1-t(x)]為環(huán)境光與霧相互作用產(chǎn)生的大氣光能量成分,可用來表征場景顏色的偏差。
分析式(1)可知,由于t(x)和A均未知,則從I復(fù)原J的方程問題是不確定的,即圖像復(fù)原解不唯一。所以,期望求解得到一個“唯一解”的清晰圖像,就需要對該方程添加約束條件。研究人員經(jīng)統(tǒng)計大量清晰和有霧圖像,得出了暗原色先驗規(guī)律,即對t(x)的三通道最小值和非天空下大氣光值先驗作為約束條件求解J(x),通過該逆問題計算得到無霧圖像。上述正則化過程可表示為:
(2)
式中:JC為清晰無霧圖像J的某一顏色通道;Ω(x)為以x像素點為中心的窗口;Jdark為J的暗通道,對于非天空部分,Jdark的值趨近于0。
基于C674x-DSP開展圖像視頻應(yīng)用時,算法DSP優(yōu)化是重點。為最大限度提高算法執(zhí)行效率、降低CPU指令消耗:一方面,算法自身運算量應(yīng)適中,即過于復(fù)雜的模塊需要被優(yōu)化或替換;另一方面,應(yīng)充分發(fā)揮CPU的并行優(yōu)勢,即一個指令周期執(zhí)行盡可能多的指令,如定點8條、浮點6條指令并行運行。算法與平臺的聯(lián)合優(yōu)化可望達到DSP算法的實時運行。
根據(jù)DSP架構(gòu)特點,DSP算法優(yōu)化可從系統(tǒng)級優(yōu)化和模塊級優(yōu)化兩個方面來實施。系統(tǒng)級優(yōu)化包括直接內(nèi)存訪問(direct memory access,DMA)的雙緩沖,即片上內(nèi)存與片外內(nèi)存的數(shù)據(jù)乒乓搬移,以及在核心代碼中添加編譯指示指令。模塊級優(yōu)化指算法核心函數(shù)的內(nèi)聯(lián)指令優(yōu)化、線性匯編優(yōu)化。系統(tǒng)級優(yōu)化的目的是使CPU在片上空間讀寫數(shù)據(jù)或讀取程序,以提高其訪問速度。模塊級優(yōu)化的目的是使函數(shù)能夠軟件流水、實現(xiàn)單指令多數(shù)據(jù)(single instruction multiple data,SIMD)處理或單指令周期并行更多指令,以提高CPU指令周期的利用率。無論哪一級優(yōu)化,均可通過集成開發(fā)環(huán)境(code composer studio,CCS)的-O2、-O3選項,開啟編譯器的優(yōu)化功能。
(3)
(4)
2.1.1 均值濾
過于復(fù)雜的軟摳圖無法在DSP上實時處理。本研究經(jīng)過多次的試驗與分析,采取了計算量低而效果沒有顯著降低的均值濾波替代軟摳圖濾波。以模板HR,r=2n+1(n≥0)為掩膜,對圖像矩陣自左向右、自上向下,逐點累積與加權(quán)。其中,窗口尺寸r越大,平滑作用越強;反之越弱。考慮到除法對DSP優(yōu)化有一定限制,r的取值需合理設(shè)置。
(5)
2.1.2 優(yōu)化大氣光值
大氣光值A(chǔ)∈(0,255)為常量。已有試驗表明,它的不同取值對圖像整體亮暗有顯著影響。從當前待透霧圖像直接估計得到合適的A值,顯然是較為合理的。但是,相鄰幀A的抖動會帶來對應(yīng)透霧后圖像的亮度突變。為此,本文采取窗口內(nèi)加權(quán)方法:
(6)
式中:A0由當前幀圖像計算獲得;A1~A3由前三幀圖像計算獲得。
上述四個值加權(quán)得到參與透霧處理的大氣光值A(chǔ)。當前幀透霧完畢后,依次更新A1~A3,為后續(xù)圖像透霧作準備。大氣光值加權(quán)取偶次降冪目的是:一方面便于DSP移位操作;另一方面體現(xiàn)了其他圖像幀越靠近當前幀,其大氣光值權(quán)重越大的特點。
2.2.1 單指令多數(shù)據(jù)
圖像處理算法中,純粹的內(nèi)存讀寫操作,浪費了寶貴的CPU資源。在線性匯編優(yōu)化中,單次讀寫多像素點可顯著提高CPU指令執(zhí)行效率,如四字節(jié)讀寫LDW/STW、八字節(jié)讀寫LDDW/STDW指令。類似地,C語言環(huán)境下的內(nèi)聯(lián)指令_amem4、_amem8實現(xiàn)讀寫操作。在算法的開始部分,通常執(zhí)行讀取數(shù)據(jù)源;在算法的結(jié)束部分,通常執(zhí)行存儲結(jié)果。算法中間即為處理核心,包括數(shù)據(jù)的解包(_unpklu4、_unpkhu4、_pack2)與組包(_packl4、_packh4)、飽和式組包(_spacku4、_spack2)、乘法運算(_mpysu4、_mpyu4、_dotp2)、求最大最小(_minu4、_maxu4)、加減運算(_add4、_sub2、_sub4)、移位與抽取(_shru2、_extu)等。上述指令的共性即單個指令操作了多個像素的相同運算。
2.2.2 軟件流水
通常,圖像算法中存在大量的循環(huán)處理,并且是消耗CPU指令的主要部分。要提高算法系統(tǒng)的執(zhí)行速度,就必須提高CPU指令的并行性,即充分發(fā)掘循環(huán)體之間的指令級并行(instruction level parallelism,ILP)。軟件流水技術(shù)通過對循環(huán)重新建構(gòu),使得每次迭代執(zhí)行的指令是屬于原循環(huán)不同迭代過程;通過編排循環(huán)指令,使循環(huán)體多次迭代并行執(zhí)行。該技術(shù)主要應(yīng)用于具有多個功能部件的并行處理器,如TI的C6000系列DSP。此類CPU配有八個功能單元,每個功能單元執(zhí)行不同指令,因此可最多并行八條指令。通過編譯生成并行匯編文件(*.asm),根據(jù)其中的反饋信息綜合判斷編寫的線性匯編或者內(nèi)聯(lián)指令的優(yōu)化效果。其中包含軟件流水成功建立的提示信息“PIPED LOOP KERNEL”。
2.2.3 浮點除法運算優(yōu)化
①計算透射率:tRow_t = a_haze - ((w_m×jdarkRow[x])>>8)。
②鉗位透射率:if (tRow_t < t_o×a_haze) tRow_t = t_o×a_haze。
③計算中間值:aljz = a_haze/tRow_t。
④透霧的圖像:tem_b = aljz×(srcB[x]-a_haze) +a_haze。
上述過程中,影響系統(tǒng)性能的關(guān)鍵是浮點變量tRow_t的除法運算。除法的函數(shù)調(diào)用方法使遍歷所有像素點的循環(huán)體無法構(gòu)建軟件流水。通過分析C674x的指令體系可知,借鑒倒數(shù)運算可將除法轉(zhuǎn)化為乘法,即aljz=a_haze×_rcpsp((float)tRow_t)。其中,內(nèi)聯(lián)指令_rcpsp用于計算浮點數(shù)tRow_t的倒數(shù)。該方法避免了函數(shù)調(diào)用,使軟件流水成為可能。另外,優(yōu)化上述過程的操作還包括乘法_mpyu4ll、右移_shru2、鉗位_max2、減法_sub4、組包_spack2和_spacku4等指令。
2.2.4 均值濾波的快速優(yōu)化實現(xiàn)
基于暗原色先驗圖像透霧算法中的軟摳圖或?qū)驗V波均含有矩陣復(fù)雜運算,這對于嵌入式DSP來說難以實現(xiàn)實時處理。根據(jù)多次試驗驗證,采用具有模板快速實現(xiàn)的均值濾波來替換軟摳圖或?qū)驗V波。其增強結(jié)果是可以接受的,透霧能力沒有顯著降低。從具體實現(xiàn)來說,模板HR,r=2n+1,n≥0與粗透射率圖卷積得到精細透射率圖。TI的圖像庫(image library,IMGLIB)提供了卷積優(yōu)化模塊IMG_conv_7x7_i8_c8s,即n=3、r2=49。但該模塊在存儲最后結(jié)果前的操作為移位運算。所以本文設(shè)計了如式(7)的卷積模板,即移位大小shift為6。另外,在濾波前將粗透射率圖的四個圖像邊擴展n個像素點,以保證邊緣數(shù)據(jù)的正常處理。
(7)
以上介紹了基于C674x-DSP的實時透霧優(yōu)化技術(shù)與實現(xiàn),接下來針對上述的各種優(yōu)化方法,在不同場景圖像下開展透霧試驗、性能評估與原因分析。
本文在TI的C6748 LCDK(L138/C6748 Develop Kit)開發(fā)平臺上驗證優(yōu)化技術(shù)有效性。透霧因子w為0.85,平滑濾波模板見式(7),透射率最小值t_o為0.2。DSP的CPU主頻456 MHz,二級緩存L2空間都設(shè)置為普通內(nèi)存模式。
為了評估優(yōu)化前后的CPU占用情況,使用仿真器SEED-XDS560v2PLUS,剖析算法模塊的優(yōu)化結(jié)果。在每個主要模塊的執(zhí)行前后分別讀取系統(tǒng)時間,其時間差值即為消耗的CPU指令周期數(shù)量。用簡寫字母表示模塊名稱,Color表示顏色空間變換,Min表示計算RGB的最小通道,F(xiàn)ilter表示平滑濾波,A_c表示計算大氣光值,Dehaze表示最后的透霧計算。表1給出了算法主要模塊優(yōu)化前后CPU資源占用情況。
表1 算法主要模塊優(yōu)化前后CPU資源占用情況
表1中的優(yōu)化前(Before)表示沒有啟用CCS編譯器的-O3資源占用,優(yōu)化后(After)表示開啟了該功能的資源占用,優(yōu)化倍率(Ratio)表示兩者的CPU時鐘周期占用倍率。實際上,上述主要模塊均使用了內(nèi)聯(lián)指令進行優(yōu)化。若函數(shù)模塊沒有使用任何優(yōu)化方法,優(yōu)化前的指令消耗會更多。從表1可知,算法經(jīng)過優(yōu)化后,CPU占用平均降低了98%,單幀圖像透霧消耗CPU約6M指令周期,估算后可完全達到實時(25幀/s)視頻序列透霧。
暗通道數(shù)據(jù)的濾波性能決定了透射率圖精細程度,從而影響了最終的透霧效果。接下來,對不同程度的含霧圖像分別進行濾波和透霧試驗,以展示、分析本文算法的優(yōu)化結(jié)果。
3.3.1 兩種濾波效果
為提高算法系統(tǒng)的處理速度,以達到實時透霧目的,本文對最耗時模塊——透射率圖優(yōu)化作了研究。在不顯著降低系統(tǒng)效果前提下,將透射率圖的導(dǎo)向濾波精細化替換為均值濾波算法。圖1展示了針對濃霧和淡霧圖像透射率圖的導(dǎo)向濾波與均值濾波的處理結(jié)果對比。其中:左列為原始的透射率圖即暗通道信息,中列為透射率圖的導(dǎo)向濾波,右列為透射率圖的均值濾波。
分析圖1可知,導(dǎo)向濾波在濾除細小紋理的同時,較好地保持了幾何結(jié)構(gòu)的邊緣。這是均值濾波所不能達到的。特別是圖1(e)邊緣比圖1(f)的邊緣保留得相對較好。但是,導(dǎo)向濾波會對局部的白色區(qū)域作平滑處理。這是由于其取局部均值操作所帶來的限制。根據(jù)含霧不同程度的圖像濾波結(jié)果:濃霧圖像透射率圖的兩種濾波結(jié)果差別較小,如圖1(b)、圖1(c)的濾波效果相近;而淡霧圖像透射率圖的兩種濾波結(jié)果差別較大,如圖1(e)、圖1(f)的濾波差異對比較明顯。
3.3.2 圖像透霧結(jié)果對比
利用上文均值濾波優(yōu)化后的精細透射率圖,以及窗口加權(quán)優(yōu)化后的大氣光值,根據(jù)透霧模型計算透霧圖像。
圖2、圖3分別展示了濃霧圖像和淡霧圖像用文獻[5]算法和本文算法的透霧結(jié)果。兩圖中的左列為有霧圖像,中列為文獻[5]透霧結(jié)果,右列為本文透霧結(jié)果。
為便于對比區(qū)分細節(jié)差別,對用矩形框標注的相應(yīng)區(qū)域作了局部放大,以分析觀察不同方法的細節(jié)透霧能力。
圖1 濃霧和淡霧圖像透射率圖的兩種濾波效果對比圖
圖2 濃霧圖像的透霧結(jié)果對比圖
圖3 淡霧圖像的透霧結(jié)果對比圖
由圖2可知,對于濃霧的透霧來說,圖2(b)與圖2(c)的差別很小。由圖3可知,對于淡霧的透霧而言,圖3(b)與圖3(c)的差別較大。這種濃霧與淡霧的透霧效果差別,也印證了由圖1分析得出的濾波分析結(jié)論。本文的圖2(c)透霧相比文獻[5]方法的圖2(b)透霧結(jié)果并不遜色。尤其是局部區(qū)域的放大顯示中,圖2(b)與圖2(c)的涼亭頂部,比較來看差別都很小。對于淡霧圖像的透霧能力而言,本文的透霧結(jié)果圖像如圖3(c),圖像整體偏暗,對比度稍偏過;而圖3(b)整體更自然些,對比度適中。
本文在分析暗通道先驗算法圖像透霧原理基礎(chǔ)上,結(jié)合DSP的CPU架構(gòu)特點和指令類型,實現(xiàn)了基于C674x-DSP的視頻圖像實時透霧。本文由均值濾波代替透霧算法中運算復(fù)雜的導(dǎo)向濾波模塊。優(yōu)化過程中,采用DMA雙緩沖技術(shù)提高CPU的數(shù)據(jù)讀寫速度。使用SIMD操作提高CPU處理數(shù)據(jù)效率,充分使用核心循環(huán)模塊的軟件流水,極大地節(jié)約了CPU指令資源。浮點運算使用倒數(shù)計算指令替換除法函數(shù)調(diào)用,以保證軟件流水。均值濾波的2次冪移位提高透射率圖濾波速度。試驗結(jié)果證實,在C6748純DSP平臺上實現(xiàn)了VGA分辨率圖像25幀/s的實時透霧處理。未來將研究在保證處理速度基礎(chǔ)上改善濾波效果,以提高非濃霧圖像的透霧能力。