多核處理器構(gòu)架的高速JPEG解碼算法
作者:電子科技大學(xué) 章承科 摘 要:實現(xiàn)基于多核處理器構(gòu)架的jpeg解碼算法;通過將jpeg算法并行化,在多個處理器核上并行處理,并針對多核處理囂構(gòu)架進行內(nèi)存讀取等方面的優(yōu)化,可極大地提高jpeg解碼算法的解碼速度。實測表明,在4核集成的多核處理器上,jpeg圖像的平均解碼周期為單核處理器上的28%左右。 jpeg(joint photographlc experts group)是一個適用范圍很廣的靜態(tài)圖像數(shù)據(jù)壓縮標準,目前廣泛應(yīng)用于照相機、打印機等方面的圖像處理。在這些應(yīng)用中,設(shè)計出一個高速高效的jpeg***已經(jīng)成為一個重要的研究方向。隨著對嵌入式系統(tǒng)實時性、高性能和可擴展性要求的提高,多核(multi—core)嵌入式處理器的應(yīng)用場合日益增多。 1 jpeg解碼算法原理 jpeg壓縮是一種有損壓縮。它利用人的視角系統(tǒng)特性,使用量化和無損壓縮編碼相結(jié)合的方式去掉視角的冗余信息和數(shù)據(jù)本身的冗余信息來達到壓縮的目的。jpeg算法可分為基本jpeg(baseline system)和擴展jpeg(extended system)。其中baseline system應(yīng)用尤其廣泛。本文主要討論baseline system的解碼。jpeg解碼算法框圖如圖1所示。 (1)顏色空間變換 jpeg算法本身與顏色空間無關(guān),因此“rgb到y(tǒng)uv變換”和“yuv到rgb變換”不包含在jpeg算法中。但由于作為輸出的位圖數(shù)據(jù)一般要求rgb的表示,所以將顏色空間變換也表示在算法框圖中。 (2)jpeg的編解碼單元 在jpeg中,對于圖像的編解碼是分塊進行的。整個圖像被劃分為若干個8×8的數(shù)據(jù)塊,稱為最小編碼單元(mcu),每一個塊對應(yīng)于原圖像的一個8×8的像素陣列; 各行的編解碼順序是從上到下,行內(nèi)的編解碼順序是從左到右。 值得注意的是,由于一幅圖像的高和寬不一定是mcu尺寸的整數(shù)倍,因此需要對圖像的最右邊一列或其最下邊一行進行填充,擴展其高或?qū)?,使得可以將整個圖像劃分為整數(shù)個mcu;而在解碼輸出時,這些復(fù)制的行列是要被拋棄的。 (3)熵*** 在jpeg的熵編碼時,首先利用空間相關(guān)性對各塊的直流值采用差分編碼,即對相鄰塊之間的直流差值編碼,以達到壓縮碼長的目的。然后對于交流部分以zigzag方式掃描塊中的元素,對塊內(nèi)元素采用先游程編碼后哈夫曼編碼的混合編碼方式,得到一維二進制塊碼流。熵編碼過程是由直流部分的差分編碼和交流部分的zigzag掃描、游程編碼、哈夫曼編碼組成。而相應(yīng)的熵解碼過程是編碼的逆過程,在解碼端接收到的是由變長碼(vlc)和變長整數(shù)(vli)組成的數(shù)據(jù)流。為了從此數(shù)據(jù)流中恢復(fù)編碼前的dct系數(shù),必須根據(jù)哈夫曼編碼的原理及其各級碼表生成的細節(jié),生成哈夫曼解碼表,再根據(jù)解碼算法來恢復(fù)dct的直流和交流系數(shù)。 (4)反量化 在jpeg解碼端要利用發(fā)送過來的量化表對量化值進行譯碼。jpeg文件里一般含有兩個量化表:一個亮度分量的量化表,一個色度分量的量化表。反量化就是對熵解碼出來的系數(shù)矩陣乘上相應(yīng)的量化矩陣: 其中,c(u,v)代表熵解碼輸出,q(u,v)代表相應(yīng)的量化矩陣。 (5)idct。變換 jpeg解碼算法能否滿足實時應(yīng)用,關(guān)鍵在于8×8的二維idct的計算速度。在編碼階段,正向離散余弦變換(fdct)把空間域表示的圖變換成頻率域表示的圖;相應(yīng)地在解碼階段,逆向離散余弦變換(idct)將頻率域表示的圖變換為空間域表示的圖。 在idct的實現(xiàn)上,目前有多種算法。傳統(tǒng)的方法是行-列法,即先對每行(列)進行一維idct計算,再對每列(行)進行一維idct計算。還有多項式變換法和三角函數(shù)公式法,這兩種方法的加法次數(shù)與行-列法相當,乘法次數(shù)僅為