JPEG(Joint Photographlc Experts Group)是一個(gè)適用范圍很廣的靜態(tài)圖像數(shù)據(jù)壓縮標(biāo)準(zhǔn),目前廣泛應(yīng)用于照相機(jī)、打印機(jī)等方面的圖像處理。在這些應(yīng)用中,設(shè)計(jì)出一個(gè)高速高效的JPEG解碼器已經(jīng)成為一個(gè)重要的研究方向。隨著對嵌入式系統(tǒng)實(shí)時(shí)性、高性能和可擴(kuò)展性要求的提高,多核(multi—core)嵌入式處理器的應(yīng)用場合日益增多。
1 JPEG解碼算法原理
JPEG壓縮是一種有損壓縮。它利用人的視角系統(tǒng)特性,使用量化和無損壓縮編碼相結(jié)合的方式去掉視角的冗余信息和數(shù)據(jù)本身的冗余信息來達(dá)到壓縮的目的。JPEG算法可分為基本JPEG(Baseline system)和擴(kuò)展JPEG(Extended system)。其中Baseline system應(yīng)用尤其廣泛。本文主要討論Baseline system的解碼。JPEG解碼算法框圖如圖1所示。
(1)顏色空間變換
JPEG算法本身與顏色空間無關(guān),因此“RGB到Y(jié)UV變換”和“YUV到RGB變換”不包含在JPEG算法中。但由于作為輸出的位圖數(shù)據(jù)一般要求RGB的表示,所以將顏色空間變換也表示在算法框圖中。
(2)JPEG的編解碼單元
在JPEG中,對于圖像的編解碼是分塊進(jìn)行的。整個(gè)圖像被劃分為若干個(gè)8×8的數(shù)據(jù)塊,稱為最小編碼單元(MCU),每一個(gè)塊對應(yīng)于原圖像的一個(gè)8×8的像素陣列; 各行的編解碼順序是從上到下,行內(nèi)的編解碼順序是從左到右。
值得注意的是,由于一幅圖像的高和寬不一定是MCU尺寸的整數(shù)倍,因此需要對圖像的最右邊一列或其最下邊一行進(jìn)行填充,擴(kuò)展其高或?qū)?使得可以將整個(gè)圖像劃分為整數(shù)個(gè)MCU;而在解碼輸出時(shí),這些復(fù)制的行列是要被拋棄的。
(3)熵解碼器
在JPEG的熵編碼時(shí),首先利用空間相關(guān)性對各塊的直流值采用差分編碼,即對相鄰塊之間的直流差值編碼,以達(dá)到壓縮碼長的目的。然后對于交流部分以ZigZag方式掃描塊中的元素,對塊內(nèi)元素采用先游程編碼后哈夫曼編碼的混合編碼方式,得到一維二進(jìn)制塊碼流。熵編碼過程是由直流部分的差分編碼和交流部分的ZigZag掃描、游程編碼、哈夫曼編碼組成。而相應(yīng)的熵解碼過程是編碼的逆過程,在解碼端接收到的是由變長碼(VLC)和變長整數(shù)(VLI)組成的數(shù)據(jù)流。為了從此數(shù)據(jù)流中恢復(fù)編碼前的DCT系數(shù),必須根據(jù)哈夫曼編碼的原理及其各級碼表生成的細(xì)節(jié),生成哈夫曼解碼表,再根據(jù)解碼算法來恢復(fù)DCT的直流和交流系數(shù)。
(4)反量化
在JPEG解碼端要利用發(fā)送過來的量化表對量化值進(jìn)行譯碼。JPEG文件里一般含有兩個(gè)量化表:一個(gè)亮度分量的量化表,一個(gè)色度分量的量化表。反量化就是對熵解碼出來的系數(shù)矩陣乘上相應(yīng)的量化矩陣:
其中,C(u,v)代表熵解碼輸出,Q(u,v)代表相應(yīng)的量化矩陣。
(5)IDCT。變換
JPEG解碼算法能否滿足實(shí)時(shí)應(yīng)用,關(guān)鍵在于8×8的二維IDCT的計(jì)算速度。在編碼階段,正向離散余弦變換(FDCT)把空間域表示的圖變換成頻率域表示的圖;相應(yīng)
地在解碼階段,逆向離散余弦變換(IDCT)將頻率域表示的圖變換為空間域表示的圖。
在IDCT的實(shí)現(xiàn)上,目前有多種算法。傳統(tǒng)的方法是行-列法,即先對每行(列)進(jìn)行一維IDCT計(jì)算,再對每列(行)進(jìn)行一維IDCT計(jì)算。還有多項(xiàng)式變換法和三角函數(shù)公式法,這兩種方法的加法次數(shù)與行-列法相當(dāng),乘法次數(shù)僅為行-列法的一半。但這兩種方法的問題在于實(shí)現(xiàn)方法復(fù)雜,對于目標(biāo)平臺(VLIW)來說,這樣的結(jié)構(gòu)難以提高指令的并行性,并且對于目標(biāo)平臺來說,乘法指令的執(zhí)行時(shí)間與加法指令相當(dāng),因此減少了行-列法實(shí)現(xiàn)的代價(jià)。
2 多核處理器構(gòu)架
FRl000是Fujitsu公司生產(chǎn)的主要應(yīng)用于嵌入式系統(tǒng)的多核處理器。FRl000將4個(gè)處理器核(processorelement)集成在1枚芯片上,各個(gè)處理器核之間共享內(nèi)存和其他外部設(shè)備。4個(gè)處理器核分別叫作PM(