董智超
(西安電子科技大學(xué)電子工程學(xué)院,陜西西安 710071)
JPEG2000[1],即 ISO/ITU15444 是由國際標(biāo)準(zhǔn)化組織ISO和國際電信標(biāo)準(zhǔn)化聯(lián)盟ITU-T于2001年聯(lián)合頒布的新一代圖像壓縮國際標(biāo)準(zhǔn),可應(yīng)用于計(jì)算機(jī)和網(wǎng)絡(luò)環(huán)境,以及數(shù)碼相機(jī)、醫(yī)學(xué)圖像、傳真機(jī)等圖像設(shè)備的數(shù)字圖像壓縮編碼。
而DSP芯片的發(fā)展也越發(fā)成熟,各種高速度、低功耗、大容量的DSP不斷涌現(xiàn)?;谕ㄓ肈SP設(shè)計(jì)的算法平日除了成本低以外,還具有靈活性強(qiáng)、擴(kuò)展性好、可升級和易維護(hù)的優(yōu)點(diǎn),特別適用于新型產(chǎn)品的研究開發(fā)。因此,600 MHz主頻和4個8位視頻 ALU(Arithmetic Logic Unit)的Blackfin561 處理器[2]適合成為開發(fā)JPEG2000算法的平臺。
圖1所示為JPEG2000靜止圖像壓縮算法的編解碼流程圖。首先對原始圖像數(shù)據(jù)進(jìn)行離散小波變換,然后對變換后的小波系數(shù)進(jìn)行量化和對量化后的數(shù)據(jù)熵編碼,最后形成輸出碼流。解碼器是編碼器的逆過程,首先對碼流進(jìn)行熵解碼,然后解量化和小波反變換,最后生成重建圖像數(shù)據(jù)。各模塊的算法程參閱文獻(xiàn)[3~5]。
圖1 JPEG2000算法流程圖
(1)在原程序中,上下文建模和編碼通道的選擇都依賴于8鄰域或3×6鄰域的重要性狀態(tài)(變量Fc[][]表示)。以8鄰域?yàn)槔?,判?鄰域的重要性狀態(tài)[5]需要依次讀取8個值分別進(jìn)行判斷,不僅讀取數(shù)據(jù)花費(fèi)的時(shí)間多,而且條件判斷也較多。
于是提出了一種新方法:重要性狀態(tài)標(biāo)記。即當(dāng)在編碼掃描中發(fā)現(xiàn)某一個系數(shù)變?yōu)椤爸匾摹敝?,將它?個鄰域的相應(yīng)比特位標(biāo)記為1。標(biāo)記過程如圖2所示,neighbor_stat[][]為重要性標(biāo)記變量,當(dāng)前系數(shù)X[i][j]變?yōu)椤爸匾摹敝?,分別將 neighbor_sata[i-1][j-1]到 neighbor_stat[i+1][j+1]的0 ~7 比特位標(biāo)記為1。
圖2 重要性傳播標(biāo)記過程
反過來,對于一個重要性標(biāo)記變量neighbor_stat[i][j],它的8個比特位也包含了8個鄰域的重要性狀態(tài)信息(Fc[i-1][j-1]~Fc[i+1][j+1]),具體等價(jià)關(guān)系如表1所示。這樣,原來需要讀取8個數(shù)(Fc[i-1][j-1]~Fc[i+1][j+1]),現(xiàn)在只需讀取一個數(shù) neighbor_stat[i][j],即可得到 8 鄰域的重要性狀態(tài)信息。
表1 neighbor_stat[][]各比特位與 Fc[][]等價(jià)關(guān)系
經(jīng)過以上改進(jìn)后,重要性狀態(tài)相關(guān)的模塊性能明顯提升,較大縮短了編碼過程的執(zhí)行時(shí)間。
(2)漸進(jìn)過程優(yōu)化截?cái)嘀校o出兩種截?cái)喾绞?子帶截?cái)嗪妥訅K截?cái)?。子帶截?cái)嗉词窃诿總€小波子帶編碼結(jié)束后,進(jìn)行一次截止最低位平面的判斷;子塊截?cái)嗉词窃诿總€編碼子塊編碼結(jié)束后,進(jìn)行一次截止最低位平面的判斷。
通過實(shí)驗(yàn)發(fā)現(xiàn),對于不同壓縮率的圖像壓縮,選擇不同的截?cái)喾绞降男Ч兴煌?,低?8倍以下)壓縮時(shí),子塊截?cái)嗟男Ч赡芨?,而高倍壓縮(16倍以上)時(shí)子帶截?cái)嗟男Ч谩?/p>
Visual DSP提供了跟蹤(Trace)、時(shí)間統(tǒng)計(jì)(Profile)等功能,允許在整個程序空間中進(jìn)行評估。通過Profile功能可以發(fā)現(xiàn)DSP程序中的瓶頸現(xiàn)象和需要優(yōu)化的程序塊,并且在程序的執(zhí)行過程中能夠隨時(shí)查看寄存器/存儲器中數(shù)值的變化,以及源程序代碼的執(zhí)行過程。
2.2.1 編譯器優(yōu)化
通過使能編譯器中的優(yōu)化選項(xiàng)Project Option->Enable Optimization可以實(shí)現(xiàn)編譯器自動優(yōu)化,可以節(jié)約大量代碼移植和優(yōu)化的工作量。使能該選項(xiàng)后,Visual DSP++的編譯器能夠完成冗余代碼和數(shù)據(jù)去除、向量化、軟件流水、硬件循環(huán)和指令并行等優(yōu)化工作。
2.2.2 數(shù)據(jù)優(yōu)化
(1)使用了分配在固定段的二維數(shù)組來代替指針和動態(tài)內(nèi)存分配。利用數(shù)組,編譯器可以更加準(zhǔn)確地理解兩個連續(xù)數(shù)據(jù),而這往往是編譯器進(jìn)行積極優(yōu)化時(shí)難以克服的一個關(guān)卡。
(2)將除法轉(zhuǎn)換為乘法,將浮點(diǎn)運(yùn)算轉(zhuǎn)化為定點(diǎn)運(yùn)算[2]。Blackfin561是一款定點(diǎn)處理器,它本身并不支持float、double等浮點(diǎn)數(shù)據(jù)類型,只能通過仿真實(shí)現(xiàn),所以用BF561直接進(jìn)行浮點(diǎn)運(yùn)算是很費(fèi)時(shí)的。因此要通過浮點(diǎn)轉(zhuǎn)換定點(diǎn)來對定點(diǎn)數(shù)進(jìn)行操作,例如浮點(diǎn)的系數(shù)Coeff[0]=1.586 134 342,將其表示成2.14格式:Coeff[0]=1.586 134 342 ×214=0x6583。
(3)使用DMA實(shí)現(xiàn)外部存儲器數(shù)據(jù)到內(nèi)部存儲空間的搬移,并使用雙緩沖的形式實(shí)現(xiàn)對數(shù)據(jù)的乒乓操作。具體到算法中的塊,文中對小波變換和算術(shù)編碼的模塊使用。
2.2.3 循環(huán)優(yōu)化
雖然BF561有兩組零開銷循環(huán)寄存器,但只能支持兩重硬件循環(huán)。因此,只有嵌套最深的循環(huán)才會使用硬件循環(huán)。并且,只有循環(huán)體的執(zhí)行次數(shù)是確定值時(shí),才會使用硬件循環(huán)。
如果循環(huán)體內(nèi)有條件判斷,可能會出現(xiàn)大量控制流延遲。所以,將部分條件執(zhí)行的if語句放在循環(huán)體外單獨(dú)執(zhí)行。
JPEG2000在編碼塊的每個位平面,是按每4個系數(shù)為一列進(jìn)行掃描的。也就是說,循環(huán)次數(shù)不>4。在這種循環(huán)次數(shù)比較少的情況下,可以考慮把循環(huán)體展開。雖然展開循環(huán)后,代碼的緊湊性變差,但速度可以提高很多。
2.2.4 C程序匯編化和匯編優(yōu)化
ANSI-C畢竟不是一種專門的信號處理語言,它更適用于系統(tǒng)設(shè)計(jì),而不是數(shù)學(xué)運(yùn)算。而Visual DSP允許C與匯編混合編程,因此將一些關(guān)鍵的代碼區(qū)域按一定的規(guī)則[2]進(jìn)行匯編化,然后在C中調(diào)用。
BF561提供了10級的軟件流水[2],并提供語句的并行執(zhí)行功能。因此對匯編代碼的優(yōu)化主要體現(xiàn)在并行語句的增加和減少阻塞、降低延遲上。
此處將算術(shù)編碼器的主程序以及小波變換主程序用匯編實(shí)現(xiàn)并優(yōu)化,以512×512,2×2分片,16倍壓縮的Lena灰度圖像的處理為例,算術(shù)編碼器匯編化完成之后,EBCOT部分總時(shí)鐘周期較匯編化之前減少了約10%,而小波的匯編化則節(jié)約了小波變換部分39.5%的時(shí)鐘周期。
測試條件:512×512 LENA圖,分為4個256×256的拼接塊(2×2分片),16倍壓縮,3級小波變換,編碼塊大小32×32,編譯器優(yōu)化選項(xiàng)開到最大速度。
表2 優(yōu)化前后對比
介紹了JPEG2000壓縮算法的基本框架,然后提出了在Blackfin561處理器上實(shí)現(xiàn)的優(yōu)化方案,包括算法級優(yōu)化和代碼級優(yōu)化,并給出優(yōu)化結(jié)果。最終的優(yōu)化結(jié)果表明,提出的優(yōu)化方案在不降低圖像峰值信噪比的情況下大大縮短了編碼的時(shí)間,提高了算法效率。
[1]RABBANI M,JOSHI R.An overview of the JPEG2000 still image compression standard [J].Signal Processing:Image Communication,2002(1):48.
[2]胡棟.靜止圖像編碼的基本方法與國際標(biāo)準(zhǔn)[M].北京:北京郵電大學(xué)出版社,2006.
[3]Analog Devices,Inc.Visual DSP++assembler and preprocessor manual[M].USA:Analog Devices Conpration,2006.
[4]DAVID S T,MICHAEL W M.JPEG2000 圖像壓縮基礎(chǔ)、標(biāo)準(zhǔn)和實(shí)踐[M].魏江力,柏正堯,譯.北京:電子工業(yè)出版社,2004.
[5]ISO.JPEG2000 Image Coding System[S].USA:ISO/ITU -T FCD 15444-1,2000.