dct变换实现图像压缩
本帖最后由 牛小贱 于 2014-5-16 13:25 编辑我这里有一段程序,是从网上下载的,利用dct变换实现图片压缩的,我想知道这段程序实现的结果是不是所要求的利用dct实现图像压缩?另外如果将图片换成.jpg后对图片会有部分消除是怎么回事啊?急于求解,希望懂的人帮助一下,谢谢啊!程序代码:I=imread('cameraman.tif')
I=im2double(I) %转换图像矩阵为双精度型。
T=dctmtx(8)%产生二维DCT变换矩阵
%计算二维DCT,矩阵T及其转置是DCT函数P1*X*P2的参数
a1=[16 11 10 16 24405161;
1212 14 19 26586055;
1413 16 24 40576956;
1417 22 29 51878062;
1822 37 56 68109 103 77;
2435 55 64 81104 113 92;
4964 78 87 103 121 120 101;
7292 95 98 112 100 103 99 ];
for i=1:8:200
forj=1:8:200
P=I(i:i+7,j:j+7);
K=T*P*T';
I2(i:i+7,j:j+7)=K;
K=K./a1;%量化
K(abs(K)<0.03)=0;
I3(i:i+7,j:j+7)=K;
end
end
figure;
imshow(I2);
title('DCT变换后的频域图像');%显示DCT变换后的频域图像
for i=1:8:200
forj=1:8:200
P=I3(i:i+7,j:j+7).*a1;%反量化
K=T'*P*T;
I4(i:i+7,j:j+7)=K;
end
end
figure;
imshow(I4);
title('复原图像');
imwrite(I4,'复原图像6.jpg');
B=blkproc(I,,'P1*x*P2',T,T') %二值掩模,用来压缩DCT系数,只留下DCT系数中左上角的10个
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
B2=blkproc(B,,'P1.*x',mask) %只保留DCT变换的10个系数
I2=blkproc(B2,,'P1*x*P2',T',T) %重构图像
figure
imshow(I)
title('原始图像');
figure
imshow(I2);
title('压缩图像');
figure
imshow(dct2(I));
figure
mesh(dct2(I))
colorbar('horiz')
页:
[1]