劉雅莉
(1.西安電子科技大學,陜西西安,710071;2商洛學院計算機科學系,陜西商洛,726000)
隨著網(wǎng)絡(luò)技術(shù)和信息技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)中信息的需求量越來越大。這其中就包括有對信息傳輸?shù)男枨?,而信息傳輸中大部分又表現(xiàn)為圖像,所以圖像信息量的大小將直接影響到網(wǎng)絡(luò)傳輸?shù)乃俣取R虼?,為了保證圖像信息的存儲與傳輸,對圖像進行壓縮成為當前最迫切的需求。圖像壓縮就是在沒有明顯失真的前提下,盡量減少表示數(shù)字圖像時需要的數(shù)據(jù)量,從而節(jié)省圖像的存儲空間,減少傳輸信道的容量、縮短圖像加工處理的時間等。在所有的圖像壓縮編碼中JPEG是第一個被廣泛應用的適用于(包括灰度和彩色)靜止圖像壓縮算法的國際標準。在JPEG的壓縮算法中,一種是基于空間預測(DPCM)的無損壓縮算法,另一種是基于離散余弦變換(DCT)的有損壓縮算法。本文主要研究的是基于二維DCT的JPEG圖像壓縮算法及其在MATLAB中的仿真應用。
JPEG是一個適用范圍很廣的靜態(tài)圖像數(shù)據(jù)壓縮標準,不僅能夠用于灰度圖像還能用于彩色圖像。JPGE壓縮因其失真度較小,得到了廣泛的應用。圖1所示是JPEG壓縮編碼的處理框圖。
圖1 JPEG壓縮編碼處理框圖
由圖可知,整個壓縮編碼過程大致分為以下三個步驟:
1、使用正向離散余弦變換將空間域表示的圖像變換成頻率域表示的圖像。具體做法:將輸入圖像分解為8x8大小的數(shù)據(jù)塊,然后用正向二維DCT把每個塊轉(zhuǎn)變成64個DCT系數(shù)矩陣,其中最左上角的數(shù)值是直流(DC)系數(shù),其余的63個是交流(AC)系數(shù)。
2、對DCT系數(shù)進行量化。JPEG壓縮中進行量化使用的是均勻量化器,按照系數(shù)所在位置和每種顏色分量的色調(diào)值來確定量化步距。我們在這里使用標準的亮度量化表和色度量化表。
3、編碼。經(jīng)過DCT變換后,矩陣的左上角是低頻分量集中地,高頻位于其余部分,因此,要對量化后的系數(shù)重新編排,以增加連續(xù)“0”的個數(shù)。
解碼過程與之類似。對已編碼的DCT系數(shù)進行解碼,然后求逆量化,使用二維DCT反變換將其轉(zhuǎn)化為8x8圖像塊,最后將所有的塊組合成一個單一的圖像,這樣就完成了圖像的解壓過程。
DCT變換是將圖像信號從色彩域轉(zhuǎn)換到頻率域,其數(shù)學表達式為式(1)。
對于一個8x8的塊,有
對一幅原始圖像,我們選取它的最左上角8x8的矩陣,并將其每一個像素值轉(zhuǎn)換到-128到127的范圍內(nèi),得到矩陣M,然后作 DCT 變換。如式(5),其中為的轉(zhuǎn)置矩陣。
將原始圖像信息塊轉(zhuǎn)換成代表不同頻率分量的系數(shù)集,DCT后的64個DCT系數(shù)與DCT前的64個像素塊相對應,單獨一個圖像的全部DCT系數(shù)塊的頻譜幾乎都集中在最左上角的系數(shù)塊中。
量化實際上就是對DCT系數(shù)的一個優(yōu)化。具體做法如下:把經(jīng)過DCT變換的圖像的每個系數(shù)根據(jù)量化表除以各自對應的量化步長,四舍五入取整,得到量化系數(shù)。增加“0”值系數(shù)的數(shù)目以及減少非“0”系數(shù)的幅度是整個量化的目的。JPEG中使用的是YUV格式,Y代表亮度信息,UV代表色差信息,因此,為了進一步提高壓縮比,對UV采用粗量化,對Y采用細量化。量化公式為:
控制JPEG壓縮比的關(guān)鍵是量化表,在這一步驟中一些高頻量被除掉了,其中會有一個色彩過渡的過程呈現(xiàn)在所有圖片的點與點之間,在低頻率中包含了大量的圖像信息,而大量連續(xù)的零將會出現(xiàn)在高頻段。表1即JPEG亮度量化表。
表1 JPEG亮度量化表
圖像塊經(jīng)過DCT變換后得到的DC直流系數(shù)有兩個特點,一是AC系數(shù)的值比較大,二是相鄰8×8圖像塊的DC系數(shù)值變化不大。根據(jù)這個特點,JPEG算法使用了差分脈沖調(diào)制編碼(DPCM)技術(shù),對相鄰圖像塊之間量化DC系數(shù)進行編碼;使用游程長度編碼(RLE)對交流系數(shù)(AC)進行編碼。即充分利用相鄰兩圖像塊的特性,來再次簡化數(shù)據(jù)。對其他63個元素采用zig-zag(“Z”字形)行程編碼,以增加連續(xù)“0”的個數(shù)。
根據(jù)上面的分析過程,我們用MATLAB軟件進行了仿真驗證。程序如下:
close all;clear all;clc;
A=imread('D:MATLABworkPeppersRGB.bmp'); %讀入圖像
A=rgb2gray(A);
A=im2double(A);
T=dctmtx(8); %計算離散余弦變換矩陣
K=blkproc(A,[8 8],'P1*x*P2',T,T'); %對每個小方塊進行離散余弦變換
mask=[1 1 1 1 0 0 0 0 %只選擇左上角的10個系數(shù)
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
K2=blkproc(K,[8 8],'P1.*x',mask); %系數(shù)選擇
L=blkproc(K2,[8 8],'P1*x*P2',T',T); %對每個小方塊進行離散余弦反變換
figure;
subplot(1,2,1);imshow(A); %顯示原圖像
subplot(1,2,2);imshow(L); %顯示結(jié)果圖像
壓縮前后的圖像如圖2所示。
圖2 壓縮前后的圖像對比
由圖2我們可以看出,壓縮前后圖像在視覺效果上幾乎無明顯差別,原圖像大小為769KB,壓縮后圖像大小為258KB,其中psnrValue=31.4511??梢?,采用這種方法來實現(xiàn)壓縮既快捷又簡單。
數(shù)字圖像壓縮技術(shù)的好壞主要由壓縮比、壓縮后重構(gòu)圖像的質(zhì)量、算法實現(xiàn)的復雜度以及壓縮速度等方面評價。實驗結(jié)果表明,基于DCT的圖像壓縮算法實現(xiàn)簡單,重建圖像質(zhì)量高。同時DCT算法具有對稱性,可以利用逆DCT算法解壓縮圖像。因此,它在軟件和硬件中都容易實現(xiàn)。本文利用MATLAB來實現(xiàn)DCT圖像壓縮,減少了大量復雜的矩陣運算,方法簡單、速度快且誤差小。具有良好的實用價值。
[1]M Thomas.Cover,Joy A.Thomas.Elements of information Theory[M].Beijing Tsinghua University Press,2003:56-98
[2]羅晨.基于DCT的圖像壓縮及MATLAB實現(xiàn)[J].電子設(shè)計工程.2011,19(18)
[3]Ken Cabeen and Peter Gent.Image Compression and the Discrete Cosine Transform[ol].http://www.lokminglui.com/dct.pdf
[4]李秀敏等.基于MATLAB的DCT變換在JPEG圖像壓縮中的應用[J].電光與控制.2005,12(4)
[5]馬媛媛等.基于DCT的JPEG圖像壓縮的研究[J].計算機技術(shù)與發(fā)展.2011,21(8)