clear X = imread('wgxy.jpg'); I = rgb2gray(X); imshow(I); I=double(I); subplot(231); imshow(I,[]); title('原始图像'); axis square; disp('压缩前图像大小字节'); whos('I'); [c,s] = wavedec2(I,3,'bior3.7'); ca1 = appcoef2(c,s,'bior3.7',1); ch1 = detcoef2('h',c,s,1); cv1 = detcoef2('v',c,s,1); cd1 = detcoef2('d',c,s,1); a1 = wrcoef2('a',c,s,'bior3.7',1); h1 = wrcoef2('h',c,s,'bior3.7',1); v1 = wrcoef2('v',c,s,'bior3.7',1); d1 = wrcoef2('d',c,s,'bior3.7',1); c1=[a1,h1;v1,d1]; subplot(232); imshow(c1,[]); axis square; title('分解后低频和高频信息'); ca1 = appcoef2(c,s,'bior3.7',1); ca1 = wcodemat(ca1,500,'mat',0); a11 = wrcoef2('a',c,s,'bior3.7',1); subplot(233); imshow(a11,[]); axis square; title('第一次压缩图像'); disp('第一次压缩图像字节大小'); whos('ca1'); subplot(234); ca2 = appcoef2(c,s,'bior3.7',2); ca2 = wcodemat(ca2,500,'mat',0); a22 = wrcoef2('a',c,s,'bior3.7',2); imshow(a22,[]); axis square; title('第二次压缩图像'); disp('第二次压缩图像字节大小'); whos('ca2'); subplot(235); ca3 = appcoef2(c,s,'bior3.7',3); ca3 = wcodemat(ca3,500,'mat',0); a33 = wrcoef2('a',c,s,'bior3.7',3); imshow(a33,[]); axis square; title('第三次压缩图像'); disp('第三次压缩图像字节大小'); whos('ca3');分别把三次压缩图像依次还原
时间: 2024-01-15 17:02:59 浏览: 108
好的,这是一个基于MATLAB的图像压缩程序。以下是代码解释和还原部分的代码:
代码解释:
1. 读取图像并将其转换为灰度图像。
2. 将图像转换为 double 类型。
3. 对图像进行三级小波分解,使用 bior3.7小波。
4. 提取出分解系数中的低频和高频信息。
5. 对低频信息进行压缩,并将其还原为图像。
6. 对高频信息进行三次压缩,并将每次压缩后的图像还原。
7. 绘制压缩前的原始图像、分解后的低频和高频信息图像以及每次压缩后的图像。
8. 显示每个压缩图像的字节大小。
还原部分的代码:
% 还原第一次压缩图像
ca1 = waverec2(ca1, s, 'bior3.7');
subplot(236);
imshow(ca1, []);
axis square;
title('第一次压缩图像还原');
% 还原第二次压缩图像
ca2 = waverec2([ca1(:); ch1(:); cv1(:); cd1(:)], s, 'bior3.7');
ca2 = reshape(ca2, size(ca1, 1) * 2, size(ca1, 2) * 2);
subplot(231);
imshow(ca2, []);
axis square;
title('第二次压缩图像还原');
% 还原第三次压缩图像
ca3 = waverec2([ca2(:); ch1(:); cv1(:); cd1(:)], s, 'bior3.7');
ca3 = reshape(ca3, size(ca2, 1) * 2, size(ca2, 2) * 2);
subplot(232);
imshow(ca3, []);
axis square;
title('第三次压缩图像还原');
阅读全文