图像压缩编码码matlab实现——变换编码

%设置压缩比cr
cr = 0.5;
%读入并显示原始图像
I1 = imread('lena512.bmp');
figure(1);
imshow(I1);
%对图像进行FFT
I1 = double(I1);
fftcoe = blkproc(I1, [8 8], 'fft2(x)');
coevar = im2col(fftcoe, [8 8], 'distinct');
coe = coevar;
[y, ind] = sort(coevar);
[m, n] = size(coevar);
snum = 64 - 64*cr;
%舍去不重要的系数
for i = 1: n
    coe(ind(1: snum), i) = 0;
end
B2 = col2im(coe, [8 8], [512 512], 'distinct');
%对子图像块进行IFFT获得各个子图像的复原图像,并显示压缩图像
I2 = blkproc(B2, [8 8], 'ifft2(x)');
figure(2);
imshow(I2, [ ]);
%计算圴方误差
%erms = erms(I1, I2)

e = double(I1) - double(I2);
[m, n] = size(e);
ERMS = sqrt(sum(e(:).^2)/(m*n))

 

 

 

% 设置压缩比,cr=0.5为2:1压缩;cr=0.1250为8:1压缩
cr = 0.125;
initialimage = imread('lena512.bmp');
initialimage = double(initialimage)/255;
figure();
subplot(121);
imshow(initialimage);

%对图像进行DCT变换
t = dctmtx(8);
dctcoe = blkproc(initialimage, [8 8], 'P1*x*P2', t, t');

%将DCT变换后的矩阵转换成列,并按升序排列
coevar = im2col(dctcoe, [8 8], 'distinct');
coe = coevar;
[y, ind] = sort(coevar);

[m, n] = size(coevar);

%舍去不重要的系数
snum = 64-64 * cr;
for i = 1:n
    coe(ind(1:snum), i) = 0;
end

%把列变换为二维矩阵
b2 = col2im(coe, [8 8], [512 512], 'distinct');

%逆DCT变换
i2 = blkproc(b2, [8 8], 'P1*x*P2', t', t);
subplot(122);
imshow(i2);

e = double(initialimage)-double(i2);
[m, n] = size(e);
erms = sqrt(sum(e(:).^2)/(m*n))
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值