%载入原始图像
Sig=imread('3.bmp');
%设置压缩比
rat=0.8;
%设置系数保留个数
Sig=double(Sig)/256;
%显示原始图像
figure(1);
imshow(Sig);
title('原始图像');
%计算离散余弦变换 分块处理
T=dctmtx(8);
DCTcoe=blkproc(Sig,[8 8],'P1*x*P2',T,T');
%得到DCT系数矩阵
coeVar=im2col(DCTcoe,[8 8],'distinct');
coe=coeVar;
[Y,Ind]=sort(coeVar);
%求出DCT系数矩阵的大小
[m,n]=size(coeVar);
%按照压缩比保留系数
Snum=64-64*rat;
for i=1:n
coe(Ind(1:Snum),i)=0;
end
%重新排列系数
B2=col2im(coe,[8 8],[256 256],'distinct');
%进行离散余弦反变化
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
%显示压缩后的图像
figure(4);
imshow(I2);
title('压缩后的图像')