JPEG圖像壓縮算法;
將輸入圖像分成8*8或16*16的小塊,然後對每個小塊進行二維DCT(離散余弦變換)變換,對變換後的系數進行量化、編碼和傳輸;
JPEG文件解碼量化的DCT系數,計算每個塊的二維逆DCT變換,最後將得到的塊拼接成壹個完整的圖像。在DCT變換之後,那些接近0的、不嚴重影響圖像重建的系數被丟棄。
DCT變換的特點是變換後圖像的大部分能量集中在左上角,因為左下角顯示的是原圖像的低頻數據,右下角反映的是原圖像的高頻數據。圖像的能量通常集中在低頻部分。
示例程序:
函數Jpeg
I = im read(' D:\ MATLAB 7 \ toolbox \ images \ im demos \ camera tor . TIF ');
%這張圖是在matlab安裝的目錄下找到的。原圖是灰度圖像。
I = im2 double(I);%圖像存儲類型轉換
t = dctmtx(8);%離散余弦變換矩陣
B=blkproc(I,[8 8],' P1*x*P2 ',T,T ');
% DCT變換原始圖像。
mask =[1 1 1 1 0 0 0 0
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];
B2=blkproc(B,[8 8],' P1。*x ',掩碼);
%數據壓縮,丟棄右下角的高頻數據
I2=blkproc(B2,[8 8],' P1*x*P2 ',T ',T);
%進行DCT逆變換,得到壓縮圖像。
imshow(壹)
標題(“原始圖像”)
圖;
imshow(I2)
標題(“壓縮圖像”)