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