马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 牛小贱 于 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 24 40 51 61;
- 1212 14 19 26 58 60 55;
- 1413 16 24 40 57 69 56;
- 1417 22 29 51 87 80 62;
- 1822 37 56 68 109 103 77;
- 2435 55 64 81 104 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,[8,8],'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,[88],'P1.*x',mask) %只保留DCT变换的10个系数
- I2=blkproc(B2,[88],'P1*x*P2',T',T) %重构图像
- figure
- imshow(I)
- title('原始图像');
- figure
- imshow(I2);
- title('压缩图像');
- figure
- imshow(dct2(I));
- figure
- mesh(dct2(I))
- colorbar('horiz')
复制代码
|