图像的DCT变换的实现

标签:
杂谈 |
分类: 图像处理 |
用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('压缩后的图像');
原图像
http://s16/middle/716f76cb4a4f5e58f8b4f&690
DCT频谱
http://s12/middle/716f76cb4a4f5e9b6f1eb&690
压缩后的图像
http://s11/middle/716f76cb2e719b33c362a&690