圖3 位平面編碼三個通道系數編碼數量變化示意圖
通過對壓縮性能研究發現,在壓縮比較小時本文改進算法比標準算法的壓縮性能約低0.4db左右,在壓縮比較大時兩者的壓縮性能相一致,保留了JPEG2000優異的壓縮性能;從編解碼時間來看,在有損壓縮編碼執行時間上,本文所給出的改進算法比標準算法時間縮短8%到12%,解碼時間縮短2%到5%,提高了編碼效率,達到了改進的目的。
3 JPEG2000標準中改進算法的DSP實現
3.1 DSP硬件開發平臺
本文使用評估板是北京聞亭公司的TDS642,板上的DSP芯片是TMX DM642,BGA548封裝,內部工作時鐘為600M,外部總線時鐘為100M,計算能力高達4.8億指令每秒。
該平臺提供了豐富的外圍接口。板上有兩個復合視頻(PAL/NTSC/SECAMS)輸入和1個復合視頻輸出端口;立體聲輸入/出或單一麥克風輸入端口;提供兩個UART、以太網接口、子板接口、PC104接口和JTAG接口[6][7]。板上還提供了4M Bytes的Flash存儲器,位于DM642的CE1地址空間,寬度為8bits,FPGA擴展了3根地址線,把Flash分成8頁,Flash 的第0頁的前半頁存放用戶的自啟動程序,后半頁存放FPGA程序,第1頁尾用戶存放數據空間,第2頁至第8頁用于存放用戶程序。
3.2 核心算法的DSP實現
(1)算法總體框架。本文算法基于DM642EVM實現時主要分為兩個大的模塊(如圖4),第一部分為DWT變換模塊,它將輸入圖像數據變換為一系列的小波系數;第二部分為EBCOT算法模塊,將量化后的的小波系數編碼生成壓縮碼流。硬件開發平臺結構框圖如圖5所示。
圖4 算法框架圖
圖5 算法硬件開發平臺結構框圖
(2)內存分配。對于圖像數據的處理,往往涉及到大量的復雜的數據尋址計算,對于復雜的尋址計算,其耗費CPU的計算量可能比實際數據操作的計算量還大。所以要加快CPU對數據的訪問速度,不但要求存儲器本身的速度快,而且還需要一個合理的數據結構來簡化CPU對地址的計算。另外,DM642對數據的訪問技術,如Cache、EDMA和寬bit數據直接讀寫等,都是基于存儲地址的連續性。基于以上考慮,本文在內存分配及定位時,依據以下大的原則:第一,在滿足精度要求的情況下,使用較短的數據類型;第二、大的數據塊,如原始圖像、重構圖像存儲在片外SDRAM;第三、關鍵數據、小的數據塊,比如運算時的系數、系統堆棧、三個通道掃描都需要頻繁的訪問數據區和上下文標志區等,存放到片內存儲器;第四、對L2級配置足夠的Cache以便CPU對數據的快速讀寫;第五、對于具有運算相關性的數據,應在內存中按序連續排放。當涉及到片內外數據塊的搬移操作時,可由DM642的EDMA單元去完成,它可與CPU并行工作,不占用CPU的計算周期[8]。
(3)圖像數據的讀寫。由于本文工作主要完成針對圖像的壓縮功能,不涉及圖像采集,所以在圖像數據的輸入輸出上做了適當的處理。考慮到CCS的Simulator完全支持C/C++語言,因此原始圖像數據的輸入采用C語言中的頭文件形式,小波變換模塊,EBCOT算法模塊采用存放在PC機的數據文件形式。本文主要采用頭文件和二進制數據文件的形式,將圖像的非文件頭部分的所有數據通過“fprintf(fp,“%3d,”,image_in [i][j])”語句寫到.h文件中。
(4)DWT的實現。由于DM642為定點處理器,不適合于浮點運算,所以本文選擇LeGall(5,3)整數濾波器完成JPEG2000中的小波變換。在進行小波變換時,首先定義兩個與圖像塊大小相等的存儲緩沖器,一個是圖像片數據的輸入緩存Buf,一個是用來臨時存放圖像片數據經小波變換后的結果緩存TempBuf。每經過一級小波變換,圖像片數據都要先后兩次經過integer(5,3)的低通和高通濾波。TempBuf中保存的高通濾波數據經integer(5,3)濾波器處理后,得到HL子帶和HH子帶的小波變換系數。最后將變換結果存放到輸入緩存Buf中。若要進行下一級分解,只需對Buf中LL子帶進行同樣處理