用matlab实现图像的DCT变换,在频域压缩后再反变换
I=imread('lenna.jpg');
imshow(I);
title('未压缩的原图')
A=im2double(I);
D = dctmtx(size(A,1));
dct = D*A*D';%整个图像的DCT变换
figure, imshow(dct);
title('DCT频谱');
D = dctmtx(8);%8x*的DCT变换矩阵
B=blkproc(A,[8 8],'P1*x*P2',D,D');�T变换
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',D',D);%反变换
figure,imshow(I2);
title('压缩后的图像');
原图像
DCT频谱
压缩后的图像