JPEG圖像壓縮算法:
輸入圖像被分成8*8或16*16的小塊,然後對每壹小塊進行二維DCT(離散余弦變換)變換,變換後的系數量化、編碼並傳輸;
JPEG文件解碼量化了的DCT系數,對每壹塊計算二維逆DCT變換,最後把結果塊拼接成壹個完整的圖像。在DCT變換後舍棄那些不嚴重影響圖像重構的接近0的系數。
DCT變換的特點是變換後圖像大部分能量集中在左上角,因為左上放映原圖像低頻部分數據,右下反映原圖像高頻部分數據。而圖像的能量通常集中在低頻部分。
實例程序:
function Jpeg
I=imread('D:\MATLAB7\toolbox\images\imdemos\cameraman.tif');
%該圖片在安裝matlab的目錄中找,原圖為灰度圖象
I=im2double(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',mask);
%數據壓縮,丟棄右下角高頻數據
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
%進行DCT反變換,得到壓縮後的圖像
imshow(I)
title('原始圖像')
figure;
imshow(I2)
title('壓縮後的圖像')