matlab下的dct图像压缩。X=imread('c:\MATLAB7\toolbox\images\imdemos\5.JPG');
trueImage=double(X);
trueImage=trueImage/255;
figure;
imshow(trueImage);
title('原始图象');
%对图象进行归一化
%以下为对图象进行DCT变换%得到图象的DCT系数矩阵及DCT系数方差矩阵
dctm=dctmtx(8);
imageDCT=blkproc(i,[8 8],'P1*x*P2',dctm,dctm.');
DCTvar=im2col(imageDCT,[8 8],'distinct');
n=size(DCTvar,1);
DCTvar=(sum(DCTvar.*DCTvar)-(sum(DCTvar)/n).^2)/n;
[dum,order]=sort(DCTvar);
%以下为显示系数图象
%1表示保留的系数,表示丢弃的系数
cnum=64-cnum;
mask=ones(8,8);
mask(order(1:cnum))=zeros(1,cnum);
im8x8=zeros(9,9);
im8x8(1:8,1:8)=mask;
im128x128=kron(im8x8(1:8,1:8),ones(16));
figure;
imshow(im128x128);
title('DCT 系数');
%以下为重构及显示图象
dctm=dctmtx(8);
newImage=blkproc(imageDCT,[8 8],'P1*(x.*P2)*P3',dctm.',mas(1:8,1:8),dctm);
figure;
imshow(newImage);
title('重构图象');
%以下为显示误差图象
figure;
imshow(trueImage-newImage+0.45);
title('误差图象');
%以下为计算归一化图象的均方误差
error=(trueImage.^2-newImage.^2);
MSE=sum(error( )/prod(size(trueImage));
2021-06-18 09:19:03
472KB
图像压缩
1