清晰化算法在DSP TIDM642上的實現,之前的部分工作摘要於此。
1 DSP平台的選擇
1.1 DM642 Evolution Module
選擇現有的DM642 Evolution Module(EVM)作為開發平台。
(1) DM642作為TI公司一款功能強大的經典芯片之一。主要性能如下:
- 高性能的定點信號處理器:指令執行周期可達1.39ns,時鍾頻率最高可達720MHz;完全兼容C64x系列軟件。
- 增強的超長指令字(VLIW) C64x核:6個32/40位的ALU;兩個乘法器支持每時鍾周期4個16×16bit乘法或8個8×8bit乘法;64個32位通用寄存器;
- L1/L2存儲結構;16KB L1P 程序Cache、16KB L1D 數據Cache;256KB統一編址的RAM/Cache;64位外部存儲器接口(EMIF)總線;1024M可編址外部地址空間。
(2) DM642 EVM是基於DM642芯片的開發板,它是一個可開發DM642所有功能並包含所有相關外部器件的工作系統。它包括:32MB SDRAM;4MB線形Flash存儲器;2個視頻解碼器;1個視頻編碼器;雙口RS-232串行口和線形驅動;32KB I2C EEPROM等常用器件。
因此,DM642 EVM是進行數字圖像處理較好的選擇。
2 系統總體設計方案
視頻實時系統分為視頻采集、視頻處理(去霧/夜視增強)和視頻顯示三個部分。處理過程如圖所示。具體工作原理是:攝像頭采集退化的模擬視頻信號,模擬視頻信號通過DM642 EVM上的解碼芯片SAA7115解碼成數字並行信號BT656碼流送DM642視頻端口(輸入),並以EDMA方式傳到SDRAM中存儲。DM642 CPU通過訪問SDRAM中的圖像,處理后送回SDRAM中的輸出緩沖區。DM642視頻端口(輸出)會以EDMA方式從SDRAM的輸出緩沖區取得數據后形成BT656碼流送出。DM642 EVM上的編碼芯片SAA7105編碼BT656碼流成模擬視頻信號輸出,清晰化后的視頻圖像可以在顯示器上顯示。
3 算法基本流程
4 算法難點
(1)浮點型數據的處理:由於在算法中涉及到除法、在去霧中透射率的也是(0,1]之間的小數。而DM642是定點DSP,直接使用浮點型數據進行運算,速度太慢;
(2)濾波核半徑較大時,算法復雜度也將是巨大的,算法在DSP上的運行效率也會十分低下。
(3)圖像處理的數據量大,如何充分利用DSP資源,提高程序運行效率,成為算法實現的一個難點。
5 優化方案
- 降低算法本身復雜度,如:
- 在導向濾波中求取均值、方差時,使用boxfilter的方法, 快速計算鄰域內像素和,使得算法具有O(N)的時間復雜度。
- 去霧過程是在RGB顏色空間進行的,因此,首先需要將視頻解碼器輸出的YUV格式的數據轉換成RGB格式。對於顏色空間的轉換,直接使用轉換公式至少需要4次乘法和6次加法。實際過程中對每個像素點都進行這樣的運算,計算量很大。可使用部分查表法,以查表代替乘法運算。
- C代碼的優化
- 程序中影響性能的主要代碼是循環,優化一個循環可以抽出這個循環放在單獨的文件,重新編寫、重新編譯和單獨運行。
- 對浮點型數據的處理,采用Q格式定標的方法,浮點小數以定點小數形式運算。
- 使用關鍵字restrict消除存儲器相關性,利於指令並行操作。
- 利用C64x的雙16位擴充功能,一個周期可進行兩個16位數據的運算。優化時,應該將連續的短整型數據流轉換成整型數據流操作。
- 使用內聯函數和循環展開。內聯函數(如_add2()等)直接與C64x匯編指令映射,循環體內加入內聯函數不影響程序流水執行;而循環的展開可以使CPU內的功能單元和寄存器得到充分利用,使循環體達到最佳流水狀態。
- 使用邏輯運算代替乘除運算。
- 把程序和經常要用的數據放入片內RAM。
- 通過EDMA技術搬運片內片外的數據。EDMA不占用CPU時間,可提高運行速度。
- 使用C64x編譯器提供的若干優化選項,如-o3程序級優化等。
- 使用TI提供的優化好的庫函數,如DSPLIB、IMGLIB等。
6 實現測試環境和效果
2014