exDCT.m
上传用户:hwtw888
上传日期:2016-03-15
资源大小:177k
文件大小:1k
源码类别:

压缩解压

开发平台:

Matlab

  1. % 设置压缩比,cr=0.5为2:1压缩;cr=0.1250为8:1压缩
  2. cr = 0.125;
  3. initialimage = imread('lena512.bmp');
  4. initialimage = double(initialimage)/255;
  5. figure();
  6. subplot(121);
  7. imshow(initialimage);
  8. %对图像进行DCT变换
  9. t = dctmtx(8);
  10. dctcoe = blkproc(initialimage, [8 8], 'P1*x*P2', t, t');
  11. %将DCT变换后的矩阵转换成列,并按升序排列
  12. coevar = im2col(dctcoe, [8 8], 'distinct');
  13. coe = coevar;
  14. [y, ind] = sort(coevar);
  15. [m, n] = size(coevar);
  16. %舍去不重要的系数
  17. snum = 64-64 * cr;
  18. for i = 1:n
  19.     coe(ind(1:snum), i) = 0;
  20. end
  21. %把列变换为二维矩阵
  22. b2 = col2im(coe, [8 8], [512 512], 'distinct');
  23. %逆DCT变换
  24. i2 = blkproc(b2, [8 8], 'P1*x*P2', t', t);
  25. subplot(122);
  26. imshow(i2);
  27. e = double(initialimage)-double(i2);
  28. [m, n] = size(e);
  29. erms = sqrt(sum(e(:).^2)/(m*n))