【數字圖像處理】JPEG聯合圖像專家組負責靜止圖像編碼

編碼原理:
在這裏插入圖片描述
具體過程:

  1. 將原始圖像分爲8*8的小塊, 每個block裏有64pixels:
    在這裏插入圖片描述
  2. 將圖像中每個88的block進行DCT變換:
    數據壓縮中有很多變換,比如KLT(Karhunen-Loeve Transform),這裏我們用的是DCT離散餘弦變換。和FFT一樣,DCT也是將信號從時域到頻域的變換,不同的是DCT中變換結果沒有複數,全是實數。每8
    8個original pixels都變成了另外88個數字,變換後的每一個數都是由original 64 data通過basis function組合而得的,如下圖所示爲DCT譜中6個元素的由來。
    在這裏插入圖片描述
    將低頻部分集中在每個8
    8塊的左上角,高頻部分在右下角,所謂JPEG的有損壓縮,損的是量化過程中的高頻部分。爲什麼呢?因爲有這樣一個前提:低頻部分比高頻部分要重要得多,romove 50%的高頻信息可能對於編碼信息只損失了5%。
    在這裏插入圖片描述
  3. 量化:

所謂量化就是用像素值÷量化表對應值所得的結果。由於量化表左上角的值較小,右上角的值較大,這樣就起到了保持低頻分量,抑制高頻分量的目的(人的視覺特性對低頻成分更加敏感)。JPEG使用的顏色是YUV格式。我們提到過,Y分量代表了亮度信息,UV分量代表了色差信息。相比而言,Y分量更重要一些(人的視覺特性對亮度信息更加敏感)。我們可以對Y採用細量化,對UV採用粗量化,可進一步提高壓縮比。所以上面所說的量化表通常有兩張,一張是針對Y的;一張是針對UV的。

通過量化可以reducing the number of bits and eliminating some of the components,達到通低頻減高頻的效果,如下圖所示就是兩張量化表的例子.
在這裏插入圖片描述
比如左邊那個量化表,最右下角的高頻÷16,這樣原先DCT後[-127,127]的範圍就變成了[-7,7],固然減少了碼字(從8位減至4位)。

  1. 編碼:

編碼信息分兩類,一類是每個88格子F中的[0,0]位置上元素,這是DC(直流分量),代表88個子塊的平均值,JPEG中對F[0,0]單獨編碼,由於兩個相鄰的8×8子塊的DC係數相差很小,所以對它們採用差分編碼DPCM,可以提高壓縮比,也就是說對相鄰的子塊DC係數的差值進行編碼。

另一類是8×8塊的其它63個子塊,即交流(AC)係數,採用行程編碼(遊程編碼Run-length encode,RLE)。這裏出現一個問題:這63個係數應該按照怎麼樣的順序排列?爲了保證低頻分量先出現,高頻分量後出現,以增加行程中連續“0”的個數,這63個元素採用了“之”字型(Zig-Zag)的排列方法,如下圖所示。
“之”字型排列
JPEG過程的最後步驟是編碼量化了的圖像。JPEG的編碼階段由壓縮圖像的三個不同步驟組成。
(1)第一步是將(0,0)處的直流係數由絕對值變爲相對值,因爲圖像中相鄰的塊表現出了高度的相關。用與前一個直流元素的差來編碼直流元素,就回產生一個非常小的數值。
(2)第二步是將圖像係數安排成"zig-zag"序列。
(3)最後一步是用兩種不同的機制編碼。第一個機制是0值的行程編碼。第二個是JPEG所稱作的熵編碼(Entropy Coding),這是根據現實者的選擇,用霍夫曼代碼或算術編碼送出係數代碼的一步。
---------熵編碼
講直流元素轉換成與上一個之差之後,接下來將DCT塊重新排序成Zig-Zag序列,再後,JPEG用一個熵編碼機制送出元素,輸出帶有建立在其中的RLE,它是編碼機制的主要部分,基本上,熵編碼輸出包括三個單詞的序列,不斷重複直到塊結束,三個單詞如下:

  1. 行程長度-DCT輸出矩陣中,當前元素之前的連續0的個數
  2. 位計數-後面跟着的幅度值所用的位數
  3. 幅度-DCT係數的幅度
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章