小波分解与重构代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
load leleccum;
s = leleccum(1:3920);
% 用db1小波函数对信号进行三尺度小波分解
[C,L]=wavedec(s,2,'db1');
figure(1);
plot(s);
title('leleccum原始信号');
% 提取尺度1的低频系数
cA1 = appcoef(C,L,'db1',1); %用小波分解框架[C.L]计算1层低频系数的近似值,小波基为db1
% 提取尺度2的低频系数
cA2 = appcoef(C,L,'db1',2);
figure(2);
subplot(2,1,1);
plot(cA1);
title('尺度1的低频系数');
subplot(2,1,2);
plot(cA2);
title('尺度2的低频系数');
% 提取尺度1的高频系数
cD1 = detcoef(C,L,1); %用小波分解框架[C.L]计算1层高频系数的近似值,小波基为db1
% 提取尺度2的高频系数
cD2 = detcoef(C,L,2);
figure(3);
subplot(2,1,1);
plot(cD1);
title('尺度1的高频系数');
subplot(2,1,2);
plot(cD2);
title('尺度2的高频系数');
我给你大概标注了一下,但是你的程序有问题,
% 小波图像压缩 - RGB 图像
clear all;
close all;
% 读取图像
im = input('输入图像');%输入图像名称,要加分号
X=imread(im);
% 输入要分解的小波层数和小波
n=input('输入要分解的小波层数');%输入所要分解的层数
wname = input('输入小波名称');%输入小波名称,也要加分号
x = double(X);
NbColors = 255;
map = gray(NbColors);
x = uint8(x);
%把RGB图像转换成灰度图
% x = double(X);
% xrgb = 0.2990*x(:,:,1) + 0.5870*x(:,:,2) + 0.1140*x(:,:,3);
% colors = 255;
% x = wcodemat(xrgb,colors);
% map = pink(colors);
% x = uint8(x);
% 对图像x进行n维小波分解
x=imread(’ D:\a.jpg’);
map=x;
n=3
wname='sym5';
[c,s] = wavedec2(x,n,wname);
% 使用默认参数选择各层不同的阈值
alpha = 1.5; m = 2.7*prod(s(1,:));
[thr,nkeep] = wdcbm2(c,s,alpha,m)
% 使用上面的阈值和硬阈值处理进行图像压缩
[xd,cxd,sxd,perf0,perfl2] = wdencmp('lvd',c,s,wname,n,thr,'h');
disp('压缩效率');
disp(perf0);
% 重构(下面这个地方有问题,你这里是原始图像小波变换后进行重构,xd才是小波阀值压缩后重构的图像,cxd,sxd,是c,s经过阀值处理后得到的小波分解结构,也就是说xd=waverec2(cxd,sxd,wname);这个wdencmp函数不需要另外进行重构,你下面那些关于重构的都没用,而下面压缩后的图像才是重构后的图像,)
R = waverec2(c,s,wname);
rc = uint8(R);
% 显示原始图像和压缩图像
subplot(221), image(x);
colormap(map);
title('原始图像')
subplot(222), image(xd);
colormap(map);
title('压缩后的图像')
% 显示结果
xlab1 = ['图像压缩后保留能量百分比',num2str(perfl2)];
xlab2 = ['小波阀值压缩后置零系数百分比 ',num2str(perf0), ' %']; xlabel([xlab1 xlab2]);
subplot(223), image(rc);
colormap(map);
title('重构图像');
%计算图像大小
disp('原始图像');
imwrite(x,'original.tif');%将图像x保存为original.tif,下同imfinfo('original.tif')%显示图片original.tif详细信息,下同
disp('压缩后的图像');
imwrite(xd,'compressed.tif');
imfinfo('compressed.tif')
disp('重构后的图像');
imwrite(rc,'decompressed.tif');
imfinfo('decompressed.tif')