王文娟 陶 杰 刑 娜
中國人民解放軍軍械工程學院
首先介紹基于DCT 變換的JPEG 圖像壓縮編碼過程,然后利用MatLab2008a 編程軟件進行仿真實驗,給出詳細的編程過程。改變量化參數,可得到不同壓縮比以適應不同的應用場合。從實驗結果看出,JPEG 算法在實現較高的壓縮比情況下可保證較高的圖像質量。MatLab 高效的數值計算功能使圖像仿真編程簡單且誤差較小,從而提高實驗結果的可靠性。
隨著多媒體及網絡技術的發展,圖像數據作為一種十分重要的信息源已成為多媒體信息中最重要的組成部分。但是圖像的數據量大,不便于保密、存儲和傳輸,因此圖像壓縮編碼技術受到人們的廣泛重視。在眾多的圖像編碼標準中,JPEG(joint photographic experts group)標準以其良好的性能被廣泛應用于數字圖像壓縮領域。
本文在簡單介紹JPEG 圖像壓縮編碼原理基礎上,利用MatLab2008a 對標準灰度圖像進行壓縮和重建,最后通過分析實驗結果得出結論。
JPEG 標準是由國際標準化組織(ISO)和CCITT 的聯合圖片專家組(joint picture experts group,JPEG)針對靜止圖像壓縮而聯合制定的第一個國際標準。它包含兩種基本的壓縮編碼算法,第一種是以離散余弦變換(DCT)為基礎的有損壓縮算法,第二種以空間預測算法為基礎的無損壓縮算法。有損壓縮算法也稱為信息量壓縮算法,一般壓縮比比較高,能達到10:1、20:1,甚至40:1,而無損壓縮的壓縮比相對較低,一般只有2:1 到至4:1。以有損壓縮為例進行說明,其編碼、解碼步驟方框圖如圖1 所示。
(1)DCT 變換及系數量化
輸入一幅原始的灰度圖像,因為JPEG 是以圖像塊為基本單位進行的壓縮,所以在進行DCT 變換之前,首先將原始圖像分成8×8 像素塊。經過DCT 變換后,大部分自然信號的能量都被集中在離散余弦變換后的低頻部分,正是由于DCT 變換具有這種很強的“能量集中”特性,常用于圖像的有損數據壓縮。

圖1 JPEG 基本系統框圖
量化是造成DCT 編解碼信息損失的根源,作用是在一定的主觀保真度前提下,丟掉對視覺影響不大的信息,以達到壓縮目的。根據亮度量化表,經過DCT 變換后的系數除以各自對應的量化步長,得到量化系數。由于低頻分量集中在8×8 矩陣的左上角,因此量化表中的左上角的量化步長一般要比右下角的量化步長小。如表1 所示。位于右下角的量化系數多被截取為零值,舍棄這些零值,在重構圖像時并不會帶來畫面質量的明顯下降,由此節約存儲空間,而集中主要能量的左上角的量化系數被保留。

表1 亮度量化表
該部分編程如下:

(2)熵編碼
首先是將量化系數進行重新編排,目的是為了增加數據塊中量化系數“0”的游程長度,即連“0”系數的個數。方法是按照“Z”字形的樣式編排,如圖2 所示。每個8×8 的矩陣都變為1×64 的矢量,同時保證先低頻、后高頻的順序,則整個圖像對應的是一個64*數據塊總數大小的矩陣。矢量的第一個元素為直流DC 分量,其余63個為交流AC 分量,頻率依次升高。
DC 和AC 系數分別進行Huffman 編碼,由于相鄰數據塊的DC 分量相差不大,因此可將DC 分量先進行DPCM 編碼,再進行Huffman 編碼,進一步壓縮數據量。在編程中,還應注意AC全零的情況。該部分主要編程如下:

圖2 DCT 的“Z”形順序


(3)壓縮性能
根據DC、AC 系數進行Huffman 編碼后的兩個矢量,計算圖像壓縮編碼后的總的信息量,與編碼之前的信息量進行比較,從而計算編碼比特率和壓縮比特率。

解壓縮過程是壓縮的反過程,JPEG 圖像壓縮算法為有損算法,但其中一些步驟是可逆的。對壓縮后的數據,首先通過Huffman 解碼還原出非零向量,根據在各塊合并過程中的eob 結束標志重新恢復成塊矩陣,然后乘以亮度量化表中的量化步長,最后進行DCT 逆變換。從而得到原圖像矩陣。這種有損算法會給圖像造成一定失真,但基本不影響圖像的視覺效果(譯碼程序略)。程序最后計算峰值信噪比。

用MATLAB 程序對不同大小,8bit/pixel 的4 幅灰度測試圖像做JPEG 壓縮編解碼實驗,計算編碼比特率、壓縮比與峰值信噪比,實驗結果如表2 所示。
結合上面的圖像,對比原始圖像和重建圖像的顯示效果可以看出,雖然大部分的DCT 系數都被丟棄,導致重建的圖像存在一定程度失真,但是重建圖像仍清晰可辨且圖像視覺效果差異不大,可見壓縮的效果比較理想。另外,程序中加入的量化參數quality決定截去的系數和壓縮比,增加quality 的值,可增大壓縮比,使壓縮編碼后的圖像占用內存更小,因此該程序可適應于不同場合圖像質量的實際需求。

表2 壓縮的實驗結果

圖3 cameraman 與Lena 的原始圖像

圖4 cameraman 與Lena 的重建圖像
本文首先介紹了基于DCT 變換的JPEG 圖像壓縮編碼的基本原理,之后利用MatLab2008a 編程軟件對標準灰度圖像進行仿真,給出詳細的程序,給讀者以參考。程序中的量化參數quality,可根據實驗編程需要改變大小,以得到不同壓縮比的圖像,文章最后給出實驗結果。對于原始圖像和重建圖像,可以看出JPEG 算法在實現較高的壓縮比情況下可保證較高的圖像質量。MatLab 做圖像仿真實驗,編程簡單且誤差較小,大大提高實驗結果的精度和可靠性。基于以上優點,JPEG 算法在不同的圖像壓縮需求下,得到廣泛的應用。