摘 要: 提出一種針對基于暗原色先驗去霧算法的優化方法,分為算法級優化和基于DSP的優化。算法優化中主要采用降采樣處理,以及針對YUV格式轉化的優化;基于DSP優化中采用針對TI C674x系列的優化方法,如編譯器優化、浮點轉定點、查表法、DMA(直接內存存取)的使用以及線性匯編等。最終針對1080P的YUV格式的交通視頻可以達到實時去霧處理,并且有較好的去霧效果。
關鍵詞: 實時;去霧;DSP;優化
0 引言
隨著工業的快速發展,空氣污染越來越嚴重,尤其是霧霾對人類造成了嚴重的影響。霧霾天氣造成能見度低下,嚴重影響駕駛安全和交通監控的性能,所以開發一種基于嵌入式平臺能夠實時去霧的設備很有必要。
本文針對基于暗原色先驗的去霧算法進行優化,主要分為算法上的優化和基于DSP的優化,最終針對1080P YUV格式的交通視頻,能夠在C674x系列DSP上達到實時去霧的效果,即處理速度在40 ms/幀以內。
1 算法級優化
參考文獻[1]中提出的基于暗原色先驗的單幅圖像去霧方法開辟了圖像去霧的一個新的領域。其中使用軟摳圖的方法對透射率進行精細化,有非常好的視覺效果。但是軟摳圖復雜度非常高,要想針對高清視頻實現實時處理很難實現。后來作者又在參考文獻[2]中提出導向濾波代替[1]的軟摳圖,處理效果相當,速度提高100倍左右。即使速度提高了很多,針對1080P的視頻要在C674x系列DSP上達到實時處理還有很大的差距。本文主要就是針對上述去霧方法在算法上進行一些優化。
1.1 降采樣處理
本文研究的去霧方法是針對1080P(1 920×1 080)的高清視頻,想達到實時處理,每幀的處理時間需要小于等于40 ms。使用基于暗原色先驗的去霧方法處理1 920×1 080大小的圖像,算法復雜度較高,在DSP上達到實時處理非常困難。本文使用12倍降采樣,每12×12的窗口取一個像素點,轉換成160×90大小的圖像。算法的處理都是針對降采樣之后的圖像進行的,求得160×90大小的透射率圖,最后直接重構成1 920×1 080大小的無霧圖像。
1.2 圖像格式轉換優化
參考文獻[1]中是針對RGB格式圖像進行去霧處理的,本文針對的是YUV格式的圖像,所以必須進行格式轉換。針對YUV數據進行無霧重構處理需要分為以下3個步驟:
(1)YUV格式有霧圖像轉換成RGB格式有霧圖像:
(2)RGB格式的有霧圖像重構成RGB格式的無霧圖像R′G′B′:
其中,Ab、Ag、Ar表示該幀圖像3個通道的大氣光值。
(3)RGB格式的無霧圖像R′G′B′轉換成無霧的YUV格式無霧圖像Y′U′V′:
本文提出一種針對YUV格式去霧處理的優化計算方法,省略中間轉換過程,直接對YUV格式有霧圖像重構成YUV的無霧圖像。先計算出:
由于一幀圖像中的Ab、Ag、Ar是相同的,上面的計算每幀只需要計算一次,大大簡化了計算過程。然后重構無霧的YUV圖像:
本文提出的針對YUV直接重構的方法在時間上和空間上都有較大的優化效果,時間較之前節省了一半,內存較之前節省了12 MB左右。
2 基于DSP的程序級優化
第1節中是在算法級上進行的優化,想要在DSP上表現出更好的性能,必須針對DSP做進一步優化。本文中的程序級優化是針對TI C674x系列DSP,參考TI提供的技術文檔[3-6]進行循序漸進的優化。本章選取其中最關鍵的幾種優化方法,主要分為編譯器優化、浮點改定點、查表法、使用DMA、線性匯編等。
2.1 編譯器優化
選擇-O優化選項。-O優化選項分為3個等級,等級越高優化效果越好。本文中為了盡可能地加快處理速度,選擇-O3優化選項。
打開-mt編譯器優化選項。通過這個開關,編譯器就可以更加合理、大膽地使用軟件流水線,從而可以極大地提高代碼效率。
去掉-g調試選項。-g選項在調試程序時必須選擇,但是-g選項在一定程度上影響程序的執行速度,最后生成可執行文件時關閉-g選項。
2.2 浮點運算修改
DSP針對浮點運算速度非常慢,所以在精度要求不是很高的前提下,浮點運算很有必要改成定點運算。定點運算又可以轉換成DSP擅長的整型和移位運算,在DSP中兩個short型相乘在一個指令周期內可以完成。
2.3 用查表法代替除法
DSP中沒有除法指令,如果計算中有除法的存在,會阻礙DSP的軟件流水,無法實現指令的并行處理。所以在DSP中應盡量避免除法運算的使用,使用其他運算進行替代。查表法是一種以空間換取時間的方法,開辟一定的內存存儲建表,把所有的可能取值都放在表內。
2.4 DMA的使用
本文針對的是1080P高清視頻,每一幀的數據量達到幾MB,無法直接存儲在DSP片上存儲器L2 RAM(最大256 KB)中,必須放在DDR中。存儲在DDR中的數據就會出現一個問題,讀取和寫入光靠CPU自己搬移會非常慢,并且搬移數據時阻礙了CPU的計算功能,這樣就很有必要使用DMA控制器。
首先DMA控制器從DDR中搬移需要處理的數據至L2 RAM上;CPU直接從L2 RAM中讀取需要處理的數據;處理結果保存在L2 RAM中;DMA控制器再把處理結果搬移到DDR上對應的存儲位置。具體的DMA數據搬移路徑如圖1所示。
2.5 C語言改成線性匯編
通過前面的優化,能得到一個較好的優化效果,但是距離1080P的實時要求還是有一定的差距,所以需要做最后的優化,即線性匯編。
線性匯編的一個優點就是可以不需要自己手動進行資源的配置,并且可以定義變量名,直接對變量名進行操作,而編譯器在編譯時自動將上面的變量或者參數定義為相對應的寄存器。而且在線性匯編中,程序員不需要寫出延遲(NOP)的配置,這些工作編譯器都是在編譯時自己安排的。
3 實驗結果與分析
3.1 處理結果
經過上面優化,在DSP硬件平臺上針對交通視頻進行實際測試,處理結果如圖2所示。
從圖2不難發現,經過上述優化之后,針對交通視頻仍然有較好的去霧效果。
3.2 優化結果
優化之前移植到DSP上直接測試,針對1080P的YUV格式視頻,每幀需要耗時10 s以上。經過上述算法級優化和DSP程序級優化之后,針對1080P的YUV格式視頻,在DSP上運行可以達到40ms/幀的速度,實現了實時處理的要求。
4 結論
本文針對基于暗原色先驗的去霧算法進行優化,分為算法級優化和DSP程序級優化。最終通過在實際硬件平臺上的測試,針對1080 PYUV格式的交通視頻能達到實時去霧的效果,并且有較好的去霧效果。本文的優化方法不單單局限在本算法中,可以應用到其他圖像算法需要移植到DSP上的場合。本文中的優化方法雖然使得處理速度達到40 ms/幀,但是在今后的工作中需要進一步優化,縮短處理時間,為其他的算法節約出時間。
參考文獻
[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.