小波分解与重构代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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')

相关文档
最新文档