隨筆-57  評論-202  文章-17  trackbacks-0
          5.7 JPEG壓縮編碼

          5.7.1 JPEG算法概要

          JPEG(Joint Photographic Experts Group) 是一個由 ISO和IEC兩個組織機(jī)構(gòu)聯(lián)合組成的一個專家組,負(fù)責(zé)制定靜態(tài)的數(shù)字圖像數(shù)據(jù)壓縮編碼標(biāo)準(zhǔn),這個專家組開發(fā)的算法稱為JPEG算法,并且成為國際上通用的標(biāo)準(zhǔn),因此又稱為JPEG標(biāo)準(zhǔn)。JPEG是一個適用范圍很廣的靜態(tài)圖像數(shù)據(jù)壓縮標(biāo)準(zhǔn),既可用于灰度圖像又可用于彩色圖像。

          JPEG專家組開發(fā)了兩種基本的壓縮算法,一種是采用以離散余弦變換(Discrete Cosine Transform,DCT)為基礎(chǔ)的有損壓縮算法,另一種是采用以預(yù)測技術(shù)為基礎(chǔ)的無損壓縮算法。使用有損壓縮算法時,在壓縮比為25:1的情況下,壓縮后還原得到的圖像與原始圖像相比較,非圖像專家難于找出它們之間的區(qū)別,因此得到了廣泛的應(yīng)用。例如,在V-CD和DVD-Video電視圖像壓縮技術(shù)中,就使用JPEG的有損壓縮算法來取消空間方向上的冗余數(shù)據(jù)。為了在保證圖像質(zhì)量的前提下進(jìn)一步提高壓縮比,近年來JPEG專家組正在制定JPEG 2000(簡稱JP 2000)標(biāo)準(zhǔn),這個標(biāo)準(zhǔn)中將采用小波變換(wavelet)算法。

          JPEG壓縮是有損壓縮,它利用了人的視角系統(tǒng)的特性,使用量化和無損壓縮編碼相結(jié)合來去掉視角的冗余信息和數(shù)據(jù)本身的冗余信息。JPEG算法框圖如圖5-13所示,壓縮編碼大致分成三個步驟:

          1. 使用正向離散余弦變換(forward discrete cosine transform,F(xiàn)DCT)把空間域表示的圖變換成頻率域表示的圖。
          2. 使用加權(quán)函數(shù)對DCT系數(shù)進(jìn)行量化,這個加權(quán)函數(shù)對于人的視覺系統(tǒng)是最佳的。
          3. 使用霍夫曼可變字長編碼器對量化系數(shù)進(jìn)行編碼。

          譯碼或者叫做解壓縮的過程與壓縮編碼過程正好相反。

          JPEG算法與彩色空間無關(guān),因此“RGB到Y(jié)UV變換”和“YUV到RGB變換”不包含在JPEG算法中。JPEG算法處理的彩色圖像是單獨的彩色分量圖像,因此它可以壓縮來自不同彩色空間的數(shù)據(jù),如RGB, YCbCr和CMYK。

          圖5-13 JPEG壓縮編碼-解壓縮算法框圖

           

          5.7.2 JPEG算法的主要計算步驟

          JPEG壓縮編碼算法的主要計算步驟如下:

          1. 正向離散余弦變換(FDCT)。
          2. 量化(quantization)。
          3. Z字形編碼(zigzag scan)。
          4. 使用差分脈沖編碼調(diào)制(differential pulse code modulation,DPCM)對直流系數(shù)(DC)進(jìn)行編碼。
          5. 使用行程長度編碼(run-length encoding,RLE)對交流系數(shù)(AC)進(jìn)行編碼。
          6. 熵編碼(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/, 當(dāng)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ù)進(jìn)行量化。量化的目的是減小非“0”系數(shù)的幅度以及增加“0”值系數(shù)的數(shù)目。量化是圖像質(zhì)量下降的最主要原因。

          對于有損壓縮算法,JPEG算法使用如圖5-16所示的均勻量化器進(jìn)行量化,量化步距是按照系數(shù)所在的位置和每種顏色分量的色調(diào)值來確定。因為人眼對亮度信號比對色差信號更敏感,因此使用了兩種量化表:如表5-05所示的亮度量化值和表5-06所示的色差量化值。此外,由于人眼對低頻分量的圖像比對高頻分量的圖像更敏感,因此圖中的左上角的量化步距要比右下角的量化步距小。表5-05和表5-06中的數(shù)值對CCIR 601標(biāo)準(zhǔn)電視圖像已經(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)進(jìn)行編碼,

          DeltaDC(0, 0)k-DC(0, 0)k-1 ........ (5-5)

          5. 交流系數(shù)的編碼

          量化AC系數(shù)的特點是1 64矢量中包含有許多“0”系數(shù),并且許多“0”是連續(xù)的,因此使用非常簡單和直觀的游程長度編碼(RLE)對它們進(jìn)行編碼。

          JPEG使用了1個字節(jié)的高4位來表示連續(xù)“0”的個數(shù),而使用它的低4位來表示編碼下一個非“0”系數(shù)所需要的位數(shù),跟在它后面的是量化AC系數(shù)的數(shù)值。

          6. 熵編碼

          使用熵編碼還可以對DPCM編碼后的直流DC系數(shù)和RLE編碼后的交流AC系數(shù)作進(jìn)一步的壓縮。

          在JPEG有損壓縮算法中,使用霍夫曼編碼器來減少熵。使用霍夫曼編碼器的理由是可以使用很簡單的查表(lookup table)方法進(jìn)行編碼。壓縮數(shù)據(jù)符號時,霍夫曼編碼器對出現(xiàn)頻度比較高的符號分配比較短的代碼,而對出現(xiàn)頻度較低的符號分配比較長的代碼。這種可變長度的霍夫曼碼表可以事先進(jìn)行定義。

          [例5.1] 表5-07所示的是DC碼表符號舉例。如果DC的值(Value)為4,符號SSS用于表達(dá)實際值所需要的位數(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編碼的最后一個步驟是把各種標(biāo)記代碼和編碼后的圖像數(shù)據(jù)組成一幀一幀的數(shù)據(jù),這樣做的目的是為了便于傳輸、存儲和譯碼器進(jìn)行譯碼,這樣的組織的數(shù)據(jù)通常稱為JPEG位數(shù)據(jù)流(JPEG bitstream)。

          5.7.3 應(yīng)用JPEG算法舉例

          有關(guān)JPEG算法更詳細(xì)的信息和數(shù)據(jù),請參看JPEG標(biāo)準(zhǔn)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 小米 閱讀(8424) 評論(1)  編輯  收藏 所屬分類: 其它

          評論:
          # re: JPEG壓縮編碼 2008-06-03 11:54 | 沈童
          怎么圖片都不顯示啊
            回復(fù)  更多評論
            
          主站蜘蛛池模板: 措勤县| 青铜峡市| 廉江市| 漾濞| 河南省| 德令哈市| 新绛县| 四子王旗| 仙居县| 绩溪县| 丰镇市| 康保县| 林周县| 贵港市| 义马市| 商水县| 阿勒泰市| 普格县| 广宗县| 菏泽市| 永登县| 会昌县| 陕西省| 峡江县| 中江县| 延庆县| 南汇区| 陆河县| 山丹县| 长兴县| 沂源县| 清新县| 舞阳县| 绥阳县| 攀枝花市| 崇阳县| 浦城县| 乌审旗| 建昌县| 银川市| 武鸣县|