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