洛祺 发表于 2014-5-16 11:33

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]
查看完整版本: dct变换实现图像压缩