路錦正,董 川
(1.西南科技大學信息工程學院,四川 綿陽 621010;2.特殊環境機器人技術四川省重點實驗室,四川 綿陽 621010)
室外場景由于受到霧、霾、煙等因素的影響,其成像結果通常是模糊的。已退化圖像的對比度低、顏色暗淡,缺失的關鍵信息給圖像直觀體驗、目標檢測與跟蹤、目標識別等造成重大影響。視頻監控、計算機視覺等領域對圖像去霧或透霧技術有著迫切需求。透霧能夠提高霧天圖像利用價值、改善圖像觀感體驗。透霧可以顯著改善場景可懂度、糾正顏色偏差,為機器視覺提供精確的目標信息,從而提高特征提取、濾波或成分分析等算法性能[1]。
圖像透霧有諸多方法,主要包括圖像增強法、圖像融合法和圖像復原法[2]。前兩種技術的效果有限或者圖像實時處理難度高。近年來,透霧方法大多集中在基于單幅霧天圖像的復原透霧領域。此類方法通常需要場景的景深信息或者一些關于降質圖像的先驗假設作為約束條件,從而將大氣成像模型求解由不適定性轉換為適定性。Fattal[3]從光學成像本質上實現了透霧處理,通過估算景物的反射率來推斷反射光線在空氣中傳播時的透射率;后來,其又提出了基于color-lines的高階馬爾可夫隨機場透霧算法,對暗通道的透射率圖利用高階馬爾可夫隨機場優化傳輸圖,恢復了更多的圖像細節,對天空等大片白色區域具有很好的適應性。但是以高階能量項來約束全局先驗,算法較耗時。He等提出了暗原色先驗單幅圖像透霧,是目前透霧效果較好的算法之一[4-5]。后續文獻的許多方法是對該方法的持續改進。暗通道先驗算法采用軟摳圖法進一步對透射率圖修復,其中的大規模稀疏矩陣運算,給透霧算法帶來了巨大的運算量、耗用了大量內存,使得算法具有較高的空時復雜度。研究人員又提出采用最小值濾波和導向濾波相結合、雙邊濾波等算法代替軟摳圖法修復透射率圖。雖然以上改進算法的復雜度都較原算法有所減小,但在處理數據量巨大的視頻序列圖像時仍難以滿足實時處理的要求[6]。
視頻圖像處理的嵌入式實施,以其易升級、掌握知識產權、抗惡劣環境等優勢,受到了工業界的普遍關注[7-9]。基于數字信號處理器(digital signal processor,DSP)的透霧方案更是被廣泛采納。Khodary[10]研究了德州儀器(Texas Instrument,TI)公司達芬奇DM6446下的視頻透霧,實現了3幀/s的處理結果,后續經深入優化實現了8幀/s的透霧速度。Liu[11]基于DM6467T實現了25幀/s的標清分辨率透霧處理,但是透霧效果還有待改善,且該平臺功耗大、體積大。
本文結合暗原色先驗原型算法,提出了一種改進的、適用于圖像序列的快速透霧技術,在保證不顯著影響圖像質量的前提下,大幅降低算法運算量。選擇TI公司面向低功耗的C6748 DSP嵌入式平臺,算法與平臺協同優化,采用系統級和模塊級的兩級優化策略,實現了純DSP平臺下視頻圖形陣列(video graphics array,VGA)分辨率,即640×480像素大小的視頻圖像實時透霧處理。
基于McCartney[12]在1977年提出的大氣光模型及其衰減模型,研究人員設計了在大氣散射理論下被廣泛采用的霧天成像模型:
I(x)=J(x)t(x)+A[1-t(x)]
(1)
式中:I為攝像頭采集到的含霧圖像;J為理想條件下的清晰無霧圖像;t(x)為透射率圖,表示場景中光線穿透霧的大小;A為大氣光成分,表征周圍環境光強弱;J(x)t(x)為直接衰減項,反映了場景反射的光線經過衰減后的能量;A[1-t(x)]為環境光與霧相互作用產生的大氣光能量成分,可用來表征場景顏色的偏差。
分析式(1)可知,由于t(x)和A均未知,則從I復原J的方程問題是不確定的,即圖像復原解不唯一。所以,期望求解得到一個“唯一解”的清晰圖像,就需要對該方程添加約束條件。研究人員經統計大量清晰和有霧圖像,得出了暗原色先驗規律,即對t(x)的三通道最小值和非天空下大氣光值先驗作為約束條件求解J(x),通過該逆問題計算得到無霧圖像。上述正則化過程可表示為:
(2)
式中:JC為清晰無霧圖像J的某一顏色通道;Ω(x)為以x像素點為中心的窗口;Jdark為J的暗通道,對于非天空部分,Jdark的值趨近于0。
基于C674x-DSP開展圖像視頻應用時,算法DSP優化是重點。為最大限度提高算法執行效率、降低CPU指令消耗:一方面,算法自身運算量應適中,即過于復雜的模塊需要被優化或替換;另一方面,應充分發揮CPU的并行優勢,即一個指令周期執行盡可能多的指令,如定點8條、浮點6條指令并行運行。算法與平臺的聯合優化可望達到DSP算法的實時運行。
根據DSP架構特點,DSP算法優化可從系統級優化和模塊級優化兩個方面來實施。系統級優化包括直接內存訪問(direct memory access,DMA)的雙緩沖,即片上內存與片外內存的數據乒乓搬移,以及在核心代碼中添加編譯指示指令。模塊級優化指算法核心函數的內聯指令優化、線性匯編優化。系統級優化的目的是使CPU在片上空間讀寫數據或讀取程序,以提高其訪問速度。模塊級優化的目的是使函數能夠軟件流水、實現單指令多數據(single instruction multiple data,SIMD)處理或單指令周期并行更多指令,以提高CPU指令周期的利用率。無論哪一級優化,均可通過集成開發環境(code composer studio,CCS)的-O2、-O3選項,開啟編譯器的優化功能。

(3)

(4)
2.1.1 均值濾
過于復雜的軟摳圖無法在DSP上實時處理。本研究經過多次的試驗與分析,采取了計算量低而效果沒有顯著降低的均值濾波替代軟摳圖濾波。以模板HR,r=2n+1(n≥0)為掩膜,對圖像矩陣自左向右、自上向下,逐點累積與加權。其中,窗口尺寸r越大,平滑作用越強;反之越弱。考慮到除法對DSP優化有一定限制,r的取值需合理設置。
(5)
2.1.2 優化大氣光值
大氣光值A∈(0,255)為常量。已有試驗表明,它的不同取值對圖像整體亮暗有顯著影響。從當前待透霧圖像直接估計得到合適的A值,顯然是較為合理的。但是,相鄰幀A的抖動會帶來對應透霧后圖像的亮度突變。為此,本文采取窗口內加權方法:
(6)
式中:A0由當前幀圖像計算獲得;A1~A3由前三幀圖像計算獲得。
上述四個值加權得到參與透霧處理的大氣光值A。當前幀透霧完畢后,依次更新A1~A3,為后續圖像透霧作準備。大氣光值加權取偶次降冪目的是:一方面便于DSP移位操作;另一方面體現了其他圖像幀越靠近當前幀,其大氣光值權重越大的特點。
2.2.1 單指令多數據
圖像處理算法中,純粹的內存讀寫操作,浪費了寶貴的CPU資源。在線性匯編優化中,單次讀寫多像素點可顯著提高CPU指令執行效率,如四字節讀寫LDW/STW、八字節讀寫LDDW/STDW指令。類似地,C語言環境下的內聯指令_amem4、_amem8實現讀寫操作。在算法的開始部分,通常執行讀取數據源;在算法的結束部分,通常執行存儲結果。算法中間即為處理核心,包括數據的解包(_unpklu4、_unpkhu4、_pack2)與組包(_packl4、_packh4)、飽和式組包(_spacku4、_spack2)、乘法運算(_mpysu4、_mpyu4、_dotp2)、求最大最小(_minu4、_maxu4)、加減運算(_add4、_sub2、_sub4)、移位與抽取(_shru2、_extu)等。上述指令的共性即單個指令操作了多個像素的相同運算。
2.2.2 軟件流水
通常,圖像算法中存在大量的循環處理,并且是消耗CPU指令的主要部分。要提高算法系統的執行速度,就必須提高CPU指令的并行性,即充分發掘循環體之間的指令級并行(instruction level parallelism,ILP)。軟件流水技術通過對循環重新建構,使得每次迭代執行的指令是屬于原循環不同迭代過程;通過編排循環指令,使循環體多次迭代并行執行。該技術主要應用于具有多個功能部件的并行處理器,如TI的C6000系列DSP。此類CPU配有八個功能單元,每個功能單元執行不同指令,因此可最多并行八條指令。通過編譯生成并行匯編文件(*.asm),根據其中的反饋信息綜合判斷編寫的線性匯編或者內聯指令的優化效果。其中包含軟件流水成功建立的提示信息“PIPED LOOP KERNEL”。
2.2.3 浮點除法運算優化
①計算透射率: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。
上述過程中,影響系統性能的關鍵是浮點變量tRow_t的除法運算。除法的函數調用方法使遍歷所有像素點的循環體無法構建軟件流水。通過分析C674x的指令體系可知,借鑒倒數運算可將除法轉化為乘法,即aljz=a_haze×_rcpsp((float)tRow_t)。其中,內聯指令_rcpsp用于計算浮點數tRow_t的倒數。該方法避免了函數調用,使軟件流水成為可能。另外,優化上述過程的操作還包括乘法_mpyu4ll、右移_shru2、鉗位_max2、減法_sub4、組包_spack2和_spacku4等指令。
2.2.4 均值濾波的快速優化實現
基于暗原色先驗圖像透霧算法中的軟摳圖或導向濾波均含有矩陣復雜運算,這對于嵌入式DSP來說難以實現實時處理。根據多次試驗驗證,采用具有模板快速實現的均值濾波來替換軟摳圖或導向濾波。其增強結果是可以接受的,透霧能力沒有顯著降低。從具體實現來說,模板HR,r=2n+1,n≥0與粗透射率圖卷積得到精細透射率圖。TI的圖像庫(image library,IMGLIB)提供了卷積優化模塊IMG_conv_7x7_i8_c8s,即n=3、r2=49。但該模塊在存儲最后結果前的操作為移位運算。所以本文設計了如式(7)的卷積模板,即移位大小shift為6。另外,在濾波前將粗透射率圖的四個圖像邊擴展n個像素點,以保證邊緣數據的正常處理。

(7)
以上介紹了基于C674x-DSP的實時透霧優化技術與實現,接下來針對上述的各種優化方法,在不同場景圖像下開展透霧試驗、性能評估與原因分析。
本文在TI的C6748 LCDK(L138/C6748 Develop Kit)開發平臺上驗證優化技術有效性。透霧因子w為0.85,平滑濾波模板見式(7),透射率最小值t_o為0.2。DSP的CPU主頻456 MHz,二級緩存L2空間都設置為普通內存模式。
為了評估優化前后的CPU占用情況,使用仿真器SEED-XDS560v2PLUS,剖析算法模塊的優化結果。在每個主要模塊的執行前后分別讀取系統時間,其時間差值即為消耗的CPU指令周期數量。用簡寫字母表示模塊名稱,Color表示顏色空間變換,Min表示計算RGB的最小通道,Filter表示平滑濾波,A_c表示計算大氣光值,Dehaze表示最后的透霧計算。表1給出了算法主要模塊優化前后CPU資源占用情況。

表1 算法主要模塊優化前后CPU資源占用情況
表1中的優化前(Before)表示沒有啟用CCS編譯器的-O3資源占用,優化后(After)表示開啟了該功能的資源占用,優化倍率(Ratio)表示兩者的CPU時鐘周期占用倍率。實際上,上述主要模塊均使用了內聯指令進行優化。若函數模塊沒有使用任何優化方法,優化前的指令消耗會更多。從表1可知,算法經過優化后,CPU占用平均降低了98%,單幀圖像透霧消耗CPU約6M指令周期,估算后可完全達到實時(25幀/s)視頻序列透霧。
暗通道數據的濾波性能決定了透射率圖精細程度,從而影響了最終的透霧效果。接下來,對不同程度的含霧圖像分別進行濾波和透霧試驗,以展示、分析本文算法的優化結果。
3.3.1 兩種濾波效果
為提高算法系統的處理速度,以達到實時透霧目的,本文對最耗時模塊——透射率圖優化作了研究。在不顯著降低系統效果前提下,將透射率圖的導向濾波精細化替換為均值濾波算法。圖1展示了針對濃霧和淡霧圖像透射率圖的導向濾波與均值濾波的處理結果對比。其中:左列為原始的透射率圖即暗通道信息,中列為透射率圖的導向濾波,右列為透射率圖的均值濾波。
分析圖1可知,導向濾波在濾除細小紋理的同時,較好地保持了幾何結構的邊緣。這是均值濾波所不能達到的。特別是圖1(e)邊緣比圖1(f)的邊緣保留得相對較好。但是,導向濾波會對局部的白色區域作平滑處理。這是由于其取局部均值操作所帶來的限制。根據含霧不同程度的圖像濾波結果:濃霧圖像透射率圖的兩種濾波結果差別較小,如圖1(b)、圖1(c)的濾波效果相近;而淡霧圖像透射率圖的兩種濾波結果差別較大,如圖1(e)、圖1(f)的濾波差異對比較明顯。
3.3.2 圖像透霧結果對比
利用上文均值濾波優化后的精細透射率圖,以及窗口加權優化后的大氣光值,根據透霧模型計算透霧圖像。
圖2、圖3分別展示了濃霧圖像和淡霧圖像用文獻[5]算法和本文算法的透霧結果。兩圖中的左列為有霧圖像,中列為文獻[5]透霧結果,右列為本文透霧結果。
為便于對比區分細節差別,對用矩形框標注的相應區域作了局部放大,以分析觀察不同方法的細節透霧能力。

圖1 濃霧和淡霧圖像透射率圖的兩種濾波效果對比圖

圖2 濃霧圖像的透霧結果對比圖

圖3 淡霧圖像的透霧結果對比圖
由圖2可知,對于濃霧的透霧來說,圖2(b)與圖2(c)的差別很小。由圖3可知,對于淡霧的透霧而言,圖3(b)與圖3(c)的差別較大。這種濃霧與淡霧的透霧效果差別,也印證了由圖1分析得出的濾波分析結論。本文的圖2(c)透霧相比文獻[5]方法的圖2(b)透霧結果并不遜色。尤其是局部區域的放大顯示中,圖2(b)與圖2(c)的涼亭頂部,比較來看差別都很小。對于淡霧圖像的透霧能力而言,本文的透霧結果圖像如圖3(c),圖像整體偏暗,對比度稍偏過;而圖3(b)整體更自然些,對比度適中。
本文在分析暗通道先驗算法圖像透霧原理基礎上,結合DSP的CPU架構特點和指令類型,實現了基于C674x-DSP的視頻圖像實時透霧。本文由均值濾波代替透霧算法中運算復雜的導向濾波模塊。優化過程中,采用DMA雙緩沖技術提高CPU的數據讀寫速度。使用SIMD操作提高CPU處理數據效率,充分使用核心循環模塊的軟件流水,極大地節約了CPU指令資源。浮點運算使用倒數計算指令替換除法函數調用,以保證軟件流水。均值濾波的2次冪移位提高透射率圖濾波速度。試驗結果證實,在C6748純DSP平臺上實現了VGA分辨率圖像25幀/s的實時透霧處理。未來將研究在保證處理速度基礎上改善濾波效果,以提高非濃霧圖像的透霧能力。