摘 要: 提出一種針對基于暗原色先驗去霧算法的優(yōu)化方法,分為算法級優(yōu)化和基于DSP的優(yōu)化。算法優(yōu)化中主要采用降采樣處理,以及針對YUV格式轉(zhuǎn)化的優(yōu)化;基于DSP優(yōu)化中采用針對TI C674x系列的優(yōu)化方法,如編譯器優(yōu)化、浮點轉(zhuǎn)定點、查表法、DMA(直接內(nèi)存存取)的使用以及線性匯編等。最終針對1080P的YUV格式的交通視頻可以達到實時去霧處理,并且有較好的去霧效果。
關(guān)鍵詞: 實時;去霧;DSP;優(yōu)化
0 引言
隨著工業(yè)的快速發(fā)展,空氣污染越來越嚴重,尤其是霧霾對人類造成了嚴重的影響。霧霾天氣造成能見度低下,嚴重影響駕駛安全和交通監(jiān)控的性能,所以開發(fā)一種基于嵌入式平臺能夠?qū)崟r去霧的設(shè)備很有必要。
本文針對基于暗原色先驗的去霧算法進行優(yōu)化,主要分為算法上的優(yōu)化和基于DSP的優(yōu)化,最終針對1080P YUV格式的交通視頻,能夠在C674x系列DSP上達到實時去霧的效果,即處理速度在40 ms/幀以內(nèi)。
1 算法級優(yōu)化
參考文獻[1]中提出的基于暗原色先驗的單幅圖像去霧方法開辟了圖像去霧的一個新的領(lǐng)域。其中使用軟摳圖的方法對透射率進行精細化,有非常好的視覺效果。但是軟摳圖復(fù)雜度非常高,要想針對高清視頻實現(xiàn)實時處理很難實現(xiàn)。后來作者又在參考文獻[2]中提出導(dǎo)向濾波代替[1]的軟摳圖,處理效果相當,速度提高100倍左右。即使速度提高了很多,針對1080P的視頻要在C674x系列DSP上達到實時處理還有很大的差距。本文主要就是針對上述去霧方法在算法上進行一些優(yōu)化。
1.1 降采樣處理
本文研究的去霧方法是針對1080P(1 920×1 080)的高清視頻,想達到實時處理,每幀的處理時間需要小于等于40 ms。使用基于暗原色先驗的去霧方法處理1 920×1 080大小的圖像,算法復(fù)雜度較高,在DSP上達到實時處理非常困難。本文使用12倍降采樣,每12×12的窗口取一個像素點,轉(zhuǎn)換成160×90大小的圖像。算法的處理都是針對降采樣之后的圖像進行的,求得160×90大小的透射率圖,最后直接重構(gòu)成1 920×1 080大小的無霧圖像。
1.2 圖像格式轉(zhuǎn)換優(yōu)化
參考文獻[1]中是針對RGB格式圖像進行去霧處理的,本文針對的是YUV格式的圖像,所以必須進行格式轉(zhuǎn)換。針對YUV數(shù)據(jù)進行無霧重構(gòu)處理需要分為以下3個步驟:
(1)YUV格式有霧圖像轉(zhuǎn)換成RGB格式有霧圖像:
(2)RGB格式的有霧圖像重構(gòu)成RGB格式的無霧圖像R′G′B′:
其中,Ab、Ag、Ar表示該幀圖像3個通道的大氣光值。
(3)RGB格式的無霧圖像R′G′B′轉(zhuǎn)換成無霧的YUV格式無霧圖像Y′U′V′:
本文提出一種針對YUV格式去霧處理的優(yōu)化計算方法,省略中間轉(zhuǎn)換過程,直接對YUV格式有霧圖像重構(gòu)成YUV的無霧圖像。先計算出:
由于一幀圖像中的Ab、Ag、Ar是相同的,上面的計算每幀只需要計算一次,大大簡化了計算過程。然后重構(gòu)無霧的YUV圖像:
本文提出的針對YUV直接重構(gòu)的方法在時間上和空間上都有較大的優(yōu)化效果,時間較之前節(jié)省了一半,內(nèi)存較之前節(jié)省了12 MB左右。
2 基于DSP的程序級優(yōu)化
第1節(jié)中是在算法級上進行的優(yōu)化,想要在DSP上表現(xiàn)出更好的性能,必須針對DSP做進一步優(yōu)化。本文中的程序級優(yōu)化是針對TI C674x系列DSP,參考TI提供的技術(shù)文檔[3-6]進行循序漸進的優(yōu)化。本章選取其中最關(guān)鍵的幾種優(yōu)化方法,主要分為編譯器優(yōu)化、浮點改定點、查表法、使用DMA、線性匯編等。
2.1 編譯器優(yōu)化
選擇-O優(yōu)化選項。-O優(yōu)化選項分為3個等級,等級越高優(yōu)化效果越好。本文中為了盡可能地加快處理速度,選擇-O3優(yōu)化選項。
打開-mt編譯器優(yōu)化選項。通過這個開關(guān),編譯器就可以更加合理、大膽地使用軟件流水線,從而可以極大地提高代碼效率。
去掉-g調(diào)試選項。-g選項在調(diào)試程序時必須選擇,但是-g選項在一定程度上影響程序的執(zhí)行速度,最后生成可執(zhí)行文件時關(guān)閉-g選項。
2.2 浮點運算修改
DSP針對浮點運算速度非常慢,所以在精度要求不是很高的前提下,浮點運算很有必要改成定點運算。定點運算又可以轉(zhuǎn)換成DSP擅長的整型和移位運算,在DSP中兩個short型相乘在一個指令周期內(nèi)可以完成。
2.3 用查表法代替除法
DSP中沒有除法指令,如果計算中有除法的存在,會阻礙DSP的軟件流水,無法實現(xiàn)指令的并行處理。所以在DSP中應(yīng)盡量避免除法運算的使用,使用其他運算進行替代。查表法是一種以空間換取時間的方法,開辟一定的內(nèi)存存儲建表,把所有的可能取值都放在表內(nèi)。
2.4 DMA的使用
本文針對的是1080P高清視頻,每一幀的數(shù)據(jù)量達到幾MB,無法直接存儲在DSP片上存儲器L2 RAM(最大256 KB)中,必須放在DDR中。存儲在DDR中的數(shù)據(jù)就會出現(xiàn)一個問題,讀取和寫入光靠CPU自己搬移會非常慢,并且搬移數(shù)據(jù)時阻礙了CPU的計算功能,這樣就很有必要使用DMA控制器。
首先DMA控制器從DDR中搬移需要處理的數(shù)據(jù)至L2 RAM上;CPU直接從L2 RAM中讀取需要處理的數(shù)據(jù);處理結(jié)果保存在L2 RAM中;DMA控制器再把處理結(jié)果搬移到DDR上對應(yīng)的存儲位置。具體的DMA數(shù)據(jù)搬移路徑如圖1所示。
2.5 C語言改成線性匯編
通過前面的優(yōu)化,能得到一個較好的優(yōu)化效果,但是距離1080P的實時要求還是有一定的差距,所以需要做最后的優(yōu)化,即線性匯編。
線性匯編的一個優(yōu)點就是可以不需要自己手動進行資源的配置,并且可以定義變量名,直接對變量名進行操作,而編譯器在編譯時自動將上面的變量或者參數(shù)定義為相對應(yīng)的寄存器。而且在線性匯編中,程序員不需要寫出延遲(NOP)的配置,這些工作編譯器都是在編譯時自己安排的。
3 實驗結(jié)果與分析
3.1 處理結(jié)果
經(jīng)過上面優(yōu)化,在DSP硬件平臺上針對交通視頻進行實際測試,處理結(jié)果如圖2所示。
從圖2不難發(fā)現(xiàn),經(jīng)過上述優(yōu)化之后,針對交通視頻仍然有較好的去霧效果。
3.2 優(yōu)化結(jié)果
優(yōu)化之前移植到DSP上直接測試,針對1080P的YUV格式視頻,每幀需要耗時10 s以上。經(jīng)過上述算法級優(yōu)化和DSP程序級優(yōu)化之后,針對1080P的YUV格式視頻,在DSP上運行可以達到40ms/幀的速度,實現(xiàn)了實時處理的要求。
4 結(jié)論
本文針對基于暗原色先驗的去霧算法進行優(yōu)化,分為算法級優(yōu)化和DSP程序級優(yōu)化。最終通過在實際硬件平臺上的測試,針對1080 PYUV格式的交通視頻能達到實時去霧的效果,并且有較好的去霧效果。本文的優(yōu)化方法不單單局限在本算法中,可以應(yīng)用到其他圖像算法需要移植到DSP上的場合。本文中的優(yōu)化方法雖然使得處理速度達到40 ms/幀,但是在今后的工作中需要進一步優(yōu)化,縮短處理時間,為其他的算法節(jié)約出時間。
參考文獻
[1] He Kaiming, Sun Jian, Tang Xiaoou. Single image haze removal using dark channel prior[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2011, 33(12): 2341-2353.
[2] He Kaiming, Sun Jian, Tang Xiaoou. Guided image filtering[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013, 35(6): 1397-1409.
[3] Texas Instruments. TMS320C674x DSP CPU and instruction Set[EB/OL].(2012-03-14)[2015-05-20]. http://www.ti.com/litv/pdtysprufe8b.
[4] Texas Instruments. TMS320C6000 DSP enhanced direct memory access (EDMA) controller reference guide[EB/OL]. (2003-xx-xx)[2015-05-20]. http://www.ti.com/litv/pdf/spru234c.
[5] Texas Instruments. TMS320C6000 optimizing compiler user′s guide[EB/OL]. (2000-xx-xx) [2015-05-20]. http://www.ti.com/litv/pdf/spru187u.
[6] Texas Instruments. TMS320C6000 programmer′s guide[EB/OL].(2003-xx-xx)[2015-05-20]. http://www.ti.com/litv/pdf/spru198k.