5.7 JPEG壓縮編碼
5.7.1 JPEG算法概要
JPEG(Joint Photographic Experts Group) 是一個由 ISO和IEC兩個組織機構(gòu)聯(lián)合組成的一個專家組,負責(zé)制定靜態(tài)的數(shù)字圖像數(shù)據(jù)壓縮編碼標準,這個專家組開發(fā)的算法稱為JPEG算法,并且成為國際上通用的標準,因此又稱為JPEG標準。JPEG是一個適用范圍很廣的靜態(tài)圖像數(shù)據(jù)壓縮標準,既可用于灰度圖像又可用于彩色圖像。
JPEG專家組開發(fā)了兩種基本的壓縮算法,一種是采用以離散余弦變換(Discrete Cosine Transform,DCT)為基礎(chǔ)的有損壓縮算法,另一種是采用以預(yù)測技術(shù)為基礎(chǔ)的無損壓縮算法。使用有損壓縮算法時,在壓縮比為25:1的情況下,壓縮后還原得到的圖像與原始圖像相比較,非圖像專家難于找出它們之間的區(qū)別,因此得到了廣泛的應(yīng)用。例如,在V-CD和DVD-Video電視圖像壓縮技術(shù)中,就使用JPEG的有損壓縮算法來取消空間方向上的冗余數(shù)據(jù)。為了在保證圖像質(zhì)量的前提下進一步提高壓縮比,近年來JPEG專家組正在制定JPEG 2000(簡稱JP 2000)標準,這個標準中將采用小波變換(wavelet)算法。
JPEG壓縮是有損壓縮,它利用了人的視角系統(tǒng)的特性,使用量化和無損壓縮編碼相結(jié)合來去掉視角的冗余信息和數(shù)據(jù)本身的冗余信息。JPEG算法框圖如圖5-13所示,壓縮編碼大致分成三個步驟:
- 使用正向離散余弦變換(forward discrete cosine transform,F(xiàn)DCT)把空間域表示的圖變換成頻率域表示的圖。
- 使用加權(quán)函數(shù)對DCT系數(shù)進行量化,這個加權(quán)函數(shù)對于人的視覺系統(tǒng)是最佳的。
- 使用霍夫曼可變字長編碼器對量化系數(shù)進行編碼。
譯碼或者叫做解壓縮的過程與壓縮編碼過程正好相反。
JPEG算法與彩色空間無關(guān),因此“RGB到Y(jié)UV變換”和“YUV到RGB變換”不包含在JPEG算法中。JPEG算法處理的彩色圖像是單獨的彩色分量圖像,因此它可以壓縮來自不同彩色空間的數(shù)據(jù),如RGB, YCbCr和CMYK。

圖5-13 JPEG壓縮編碼-解壓縮算法框圖
5.7.2 JPEG算法的主要計算步驟
JPEG壓縮編碼算法的主要計算步驟如下:
- 正向離散余弦變換(FDCT)。
- 量化(quantization)。
- Z字形編碼(zigzag scan)。
- 使用差分脈沖編碼調(diào)制(differential pulse code modulation,DPCM)對直流系數(shù)(DC)進行編碼。
- 使用行程長度編碼(run-length encoding,RLE)對交流系數(shù)(AC)進行編碼。
- 熵編碼(entropy coding)。
1. 正向離散余弦變換
下面對正向離散余弦變換(FDCT)變換作幾點說明。
(1) 對每個單獨的彩色圖像分量,把整個分量圖像分成8×8的圖像塊,如圖5-14所示,并作為兩維離散余弦變換DCT的輸入。通過DCT變換,把能量集中在少數(shù)幾個系數(shù)上。

圖5-14 離散余弦變換
(2) DCT變換使用下式計算,
...... (5-1)
它的逆變換使用下式計算,
...... (5-2)
上面兩式中,
C(u), C(v) = 1/
, 當u, v = 0;
C(u), C(v) = 1, 其他。
f(i, j)經(jīng)DCT變換之后,F(0,0)是直流系數(shù),其他為交流系數(shù)。
(3) 在計算兩維的DCT變換時,可使用下面的計算式把兩維的DCT變換變成一維的DCT變換,
............ (5-3)
............. (5-4)

圖5-15 兩維DCT變換方法
實際的計算方法可參看[6]
2. 量化
量化是對經(jīng)過FDCT變換后的頻率系數(shù)進行量化。量化的目的是減小非“0”系數(shù)的幅度以及增加“0”值系數(shù)的數(shù)目。量化是圖像質(zhì)量下降的最主要原因。
對于有損壓縮算法,JPEG算法使用如圖5-16所示的均勻量化器進行量化,量化步距是按照系數(shù)所在的位置和每種顏色分量的色調(diào)值來確定。因為人眼對亮度信號比對色差信號更敏感,因此使用了兩種量化表:如表5-05所示的亮度量化值和表5-06所示的色差量化值。此外,由于人眼對低頻分量的圖像比對高頻分量的圖像更敏感,因此圖中的左上角的量化步距要比右下角的量化步距小。表5-05和表5-06中的數(shù)值對CCIR 601標準電視圖像已經(jīng)是最佳的。如果不使用這兩種表,你也可以把自己的量化表替換它們。

圖5-16 均勻量化器
表5-05 亮度量化值表 表5-06 色度量化值

3. Z字形編排
量化后的系數(shù)要重新編排,目的是為了增加連續(xù)的“0”系數(shù)的個數(shù),就是“0”的游程長度,方法是按照Z字形的式樣編排,如圖5-17所示。這樣就把一個8 ′ 8的矩陣變成一個1 ′ 64的矢量,頻率較低的系數(shù)放在矢量的頂部。
圖5-17 量化DCT系數(shù)的編排
0 |
1 |
5 |
6 |
14 |
15 |
27 |
28 |
2 |
4 |
7 |
13 |
16 |
26 |
29 |
42 |
3 |
8 |
12 |
17 |
25 |
30 |
41 |
43 |
9 |
11 |
18 |
24 |
31 |
40 |
44 |
53 |
10 |
19 |
23 |
32 |
39 |
45 |
52 |
54 |
20 |
22 |
33 |
38 |
46 |
51 |
55 |
60 |
21 |
34 |
37 |
47 |
50 |
56 |
59 |
61 |
35 |
36 |
48 |
49 |
57 |
58 |
62 |
63 |
圖5-18 量化DCT系數(shù)的序號
4. 直流系數(shù)的編碼
8 ′ 8圖像塊經(jīng)過DCT變換之后得到的DC直流系數(shù)有兩個特點,一是系數(shù)的數(shù)值比較大,二是相鄰8 ′ 8圖像塊的DC系數(shù)值變化不大。根據(jù)這個特點,JPEG算法使用了差分脈沖調(diào)制編碼(DPCM)技術(shù),對相鄰圖像塊之間量化DC系數(shù)的差值(Delta)進行編碼,
Delta=DC(0, 0)k-DC(0, 0)k-1 ........ (5-5)
5. 交流系數(shù)的編碼
量化AC系數(shù)的特點是1 ′ 64矢量中包含有許多“0”系數(shù),并且許多“0”是連續(xù)的,因此使用非常簡單和直觀的游程長度編碼(RLE)對它們進行編碼。
JPEG使用了1個字節(jié)的高4位來表示連續(xù)“0”的個數(shù),而使用它的低4位來表示編碼下一個非“0”系數(shù)所需要的位數(shù),跟在它后面的是量化AC系數(shù)的數(shù)值。
6. 熵編碼
使用熵編碼還可以對DPCM編碼后的直流DC系數(shù)和RLE編碼后的交流AC系數(shù)作進一步的壓縮。
在JPEG有損壓縮算法中,使用霍夫曼編碼器來減少熵。使用霍夫曼編碼器的理由是可以使用很簡單的查表(lookup table)方法進行編碼。壓縮數(shù)據(jù)符號時,霍夫曼編碼器對出現(xiàn)頻度比較高的符號分配比較短的代碼,而對出現(xiàn)頻度較低的符號分配比較長的代碼。這種可變長度的霍夫曼碼表可以事先進行定義。
[例5.1] 表5-07所示的是DC碼表符號舉例。如果DC的值(Value)為4,符號SSS用于表達實際值所需要的位數(shù),實際位數(shù)就等于3。
表5-07 DC碼表符號舉例
Value |
SSS |
0 |
0 |
-1, 1 |
1 |
-3,-2, 2,3 |
2 |
-7..-4, 4..7 |
3 |
7. 組成位數(shù)據(jù)流
JPEG編碼的最后一個步驟是把各種標記代碼和編碼后的圖像數(shù)據(jù)組成一幀一幀的數(shù)據(jù),這樣做的目的是為了便于傳輸、存儲和譯碼器進行譯碼,這樣的組織的數(shù)據(jù)通常稱為JPEG位數(shù)據(jù)流(JPEG bitstream)。
5.7.3 應(yīng)用JPEG算法舉例
有關(guān)JPEG算法更詳細的信息和數(shù)據(jù),請參看JPEG標準ISO/IEC 10918。下面是使用JPEG算法對一個8×8圖像塊計算得到的結(jié)果。在這個例子中,計算正向離散余弦變換(FDCT)之前對源圖像中的每個樣本數(shù)據(jù)減去了128,在逆向離散余弦變換之后對重構(gòu)圖像中的每個樣本數(shù)據(jù)加了128。




圖5-19 JPEG壓縮編碼舉例
posted on 2005-06-22 16:49
小米 閱讀(8420)
評論(1) 編輯 收藏 所屬分類:
其它