在新的圖像壓縮標(biāo)準(zhǔn)JPEG2000中,采用9/7、5/3提升小波變換作為編碼算法,其中5/3小波變換是一種可逆的整數(shù)變換,可以實(shí)現(xiàn)無(wú)損或有損的圖像壓縮。在通用的DSP芯片上實(shí)現(xiàn)該算法具有很好的可擴(kuò)展性、可升級(jí)性與易維護(hù)性。用這種方式靈活性強(qiáng),完全能滿足各種處理需求。
1 提升算法
提升算法[1]是由Sweldens等在Mallat算法的基礎(chǔ)上提出的,也稱為第二代小波變換。與Mallat算法相比,提升算法不依賴傅立葉變換,降低了計(jì)算量和復(fù)雜度,運(yùn)行效率相應(yīng)提高。由于具有整數(shù)變換及耗費(fèi)存儲(chǔ)單元少的特點(diǎn),提升算法很適合于在定點(diǎn)DSP上實(shí)現(xiàn)。
小波提升算法的基本思想是通過(guò)基本小波逐步構(gòu)建出一個(gè)具有更加良好性質(zhì)的新小波。其實(shí)現(xiàn)步驟為分解(split)、預(yù)測(cè)(predict)和更新(update)。
首先按照對(duì)原信號(hào)進(jìn)行對(duì)稱延拓得到新的x(n)。
分解是將數(shù)據(jù)分為偶數(shù)序列x(2n)和奇數(shù)序列x(2n+1)二個(gè)部分;
預(yù)測(cè)是用分解的偶數(shù)序列預(yù)測(cè)奇數(shù)序列,得到的預(yù)測(cè)誤差為變換的高頻分量:H(n)=x(2n+1)-{[x(2n)+x(2n+2)]>>1}
更新是由預(yù)測(cè)誤差更新偶數(shù)序列,得到變換的低頻分量: L(n)=x(2n)+{[H(n)+H(n-1)+2]>>2}
計(jì)算過(guò)程如圖1所示。
本文引用地址:http://cafeforensic.com/article/150361.htm
在這種方法中,SDRAM中的一個(gè)數(shù)據(jù)塊首先傳輸?shù)絃2中,然后取到L1D中進(jìn)行水平方向的提升,再對(duì)該塊進(jìn)行垂直方向的提升。這樣,由于垂直提升所需的數(shù)據(jù)都在L1D中,避免了此處數(shù)據(jù)緩存缺失的產(chǎn)生,使總的缺失數(shù)大大降低。
2.3 數(shù)據(jù)傳輸
(1)SDRAM與L2間的數(shù)據(jù)傳輸
由于EDMA[6][7]數(shù)據(jù)傳輸與CPU運(yùn)行相互獨(dú)立,因此在L2中開辟兩塊緩存:EDMA在CPU處理InBuffA的同時(shí)將下一塊數(shù)據(jù)傳輸?shù)絀nBuffB,解決了CPU讀取低速設(shè)備SDRAM引起的時(shí)延,如圖3所示。
邊界延拓主要是用于計(jì)算高頻系數(shù)。分析發(fā)現(xiàn),水平提升時(shí),當(dāng)前數(shù)據(jù)塊每一行的最后一個(gè)高頻系數(shù)與下一個(gè)塊在該行的第一個(gè)高頻系數(shù)相同。所以只要把當(dāng)前塊的這些系數(shù)保存起來(lái),在對(duì)下一塊進(jìn)行水平提升時(shí)第一個(gè)高頻系數(shù)就不需要再進(jìn)行計(jì)算,因此也就不需要再對(duì)其左邊界進(jìn)行延拓了。垂直方向的提升也是同樣的道理。在程序中添加兩個(gè)數(shù)組,分別用于存放當(dāng)前塊的每一行與每一列的最后一個(gè)高頻系數(shù)。采用這種方法就可以降低程序的復(fù)雜度,提高執(zhí)行效率,減少缺失的發(fā)生。
像素?cái)U(kuò)展函數(shù)pix_pand[9]是采用TI的IMGLIB算法庫(kù)。水平提升與垂直提升函數(shù)均由作者用線性匯編語(yǔ)言編寫,充分利用64x系列DSP的半字處理指令,采用半字打包技術(shù),最大限度地提高程序的執(zhí)行效率。
水平提升時(shí),將每行的數(shù)據(jù)重新排序,變成如圖5所示的結(jié)構(gòu)。
表2列出了幾種方法的計(jì)算性能。由于本文采用了多種優(yōu)化技術(shù),運(yùn)算速度提高了4~10倍。試驗(yàn)證明這些方法十分有效。
評(píng)論