整理小波分析实验二维离散小波变换Mallat快速算法.docx
《整理小波分析实验二维离散小波变换Mallat快速算法.docx》由会员分享,可在线阅读,更多相关《整理小波分析实验二维离散小波变换Mallat快速算法.docx(18页珍藏版)》请在冰豆网上搜索。
![整理小波分析实验二维离散小波变换Mallat快速算法.docx](https://file1.bdocx.com/fileroot1/2022-11/27/39ca815b-b98a-4f62-8564-2a3c87314ab8/39ca815b-b98a-4f62-8564-2a3c87314ab81.gif)
整理小波分析实验二维离散小波变换Mallat快速算法
小波分析实验:
实验2二维离散小波变换(Mallat快速算法)
实验目的:
在理解离散小波变换原理和Mallat快速算法的基础上,通过编程对图像进行二维离散小波变换,从而加深对二维小波分解和重构的理性和感性认识,并能提高编程能力,为今后的学习和工作奠定基础。
实验工具:
计算机,matlab6.5
附录:
(1)二维小波分解函数
%二维小波分解函数
functionY=mallatdec2(X,wname,level)
%输入:
X 载入的二维图像像数值;
% level 小波分解次(级)数设定值(如果设定值超过最高可分解次数,按最高分解次数分解)
% wname 小波名字waveletname
%输出:
Y 多极小波分解后的小波系数矩阵
[h,g]=wfilters(wname,'d'); %h,g分别为低通和高通滤波器
X=double(X);
t=1;
hh=size(X,2);
whilet<=level
%先进行行小波变换
for row=1:
hh
Y(row,1:
hh)=mdec1(X(row,1:
hh),h,g);
end
%再进行列小波变换
forcol=1:
hh
temp=mdec1(Y(1:
hh,col)',h,g);
Y(1:
hh,col)=temp';
end
t=t+1;
hh=hh/2;
X=Y;
end
%内部子函数,对一行(row)矢量进行一次小波变换,利用fft实现
functiony=mdec1(x,h,g)
%输入:
x行数组
% h为低通滤波器
% g为高通滤波器
%输出:
y进行一级小波分解后的系数
lenx=size(x,2);
lenh=size(h,2);
rh=h(end:
-1:
1);
rrh=[zeros(1,(lenx-lenh)),rh];
rrh=circshift(rrh',1)';
rg=g(end:
-1:
1);
rrg=[zeros(1,(lenx-lenh)),rg];
rrg=circshift(rrg',1)';
r1=dyaddown(ifft(fft(x).*fft(rrh,lenx)),1); %usepara1
r2=dyaddown(ifft(fft(x).*fft(rrg,lenx)),1);
y=[r1,r2];
(2)二维小波重构函数
%二维小波重构函数
functionY=mallatrec2(X,wname,level)
%输入:
X 载入的小波系数矩阵;
% level 小波分解次(级)数设定值(如果设定值超过最高可分解次数,按最高分解次数分解)
% wname 小波名字waveletname
%输出:
Y 重构图像矩阵
[h,g]=wfilters(wname,'d'); %h,g分别为重构低通滤波器和重构高通滤波器
hz=size(X,2);
h1=hz/(2^(level-1));
whileh1<=hz
%对列变换
forcol=1:
h1
temp=mrec1(X(1:
h1,col)',h,g)';
X(1:
h1,col)=temp;
end
%再对行变换
forrow=1:
h1
temp=mrec1(X(row,1:
h1),h,g);
X(row,1:
h1)=temp;
end
h1=h1*2;
end
Y=X;
%内部子函数,对一行小波系数进行重构
functiony=mrec1(x,h,g)
%输入:
x行数组
% h为低通滤波器
% g为高通滤波器
%输出:
y进行一级小波重构后值
lenx=size(x,2);
r3=dyadup(x(1,1:
lenx*0.5),0); %内插零usepara0
r4=dyadup(x(1,(lenx*0.5+1):
lenx),0); %usepara0
y=ifft(fft(r3,lenx).*fft(h,lenx))+ifft(fft(r4,lenx).*fft(g,lenx));
(3)测试函数(主函数)
%测试函数(主函数)
clc;clear;
X=imread('E:
\Libin的文档\Course\Course_wavelet\实验2要求\exp2\LENA.bmp');%路径
X=double(X);
A=mallatdec2(X,'sym2',3);
image(abs(A));
colormap(gray(255));
title('多尺度分解图像');
Y=mallatrec2(A,'sym2',3);
Y=real(Y);
figure
(2);
subplot(1,2,1);
image(X);
colormap(gray(255));
title('原始图像');
subplot(1,2,2);
image(Y);
colormap(gray(255));
title('重构图像');
csize=size(X);
sr=csize
(1);
sc=csize
(2);
mse=sum(sum((Y-X).^2,1))/(sr*sc);
psnr=10*log(255*255/mse)/log(10)
小波分析实验:
实验1连续小波变换
实验目的:
在理解连续小波变换原理的基础上,通过编程实现对一维信号进行连续小波变换,(实验中采用的是墨西哥帽小波),从而对连续小波变换增加了理性和感性的认识,并能提高编程能力,为今后的学习和工作奠定基础。
实验工具:
计算机,matlab6.5
程序附录:
(1)墨西哥帽小波函数,按照(***)式编程
%mexh.m
functionY=mexh(x)
ifabs(x)<=8
Y=exp(-x*x/2)*(1-x^2);
else
Y=0;
End
(2)实验程序,按照(**)式编程,详细过程请参考“本实验采取的一些小技巧”
%
clc;clear;
load('data.mat');
len=length(dat);
lna=70; %(尺度a)的长度
a=zeros(1,lna);
wfab=zeros(lna,len); %小波系数矩阵
mexhab=zeros(1,len); %离散化小波系数矩阵
fors=1:
lna %s表示尺度
fork=1:
len
mexhab(k)=mexh(k/s);
end
fort=1:
len %t表示位移
wfab(s,t)=(sum(mexhab.*dat))/sqrt(s); %将积分用求和代替
mexhab=[mexh(-1*t/s),mexhab(1:
len-1)]; %mexhab修改第一项并右移
end
end
figure
(1);
plot(dat);
title('原始数据图');
figure
(2); %小波系数谱
image(wfab);
colormap(pink(128));
title('小波系数图');
%surf(wfab);
%title('小波系数谱网格图');
%pwfab=wfab.*wfab; %%瞬态功率谱
%figure(3);
%subplot(1,2,1);
%surf(pwfab);
%title('瞬态功率谱网格图');
%subplot(1,2,2);
%contour(pwfab);
%title('瞬态功率谱等值线');
(3)test函数。
%test函数
clc;clear;
fori=1:
200
dat(i)=sin(2*pi*i*0.05); %正弦波函数
end
len=length(dat);
lna=40;
wfab=zeros(lna,len);
mexhab=zeros(1,len);
fors=1:
lna %s表示尺度
fork=1:
len
mexhab(k)=mexh(k/s);
end
fort=1:
len %t表示位移
wfab(s,t)=(sum(mexhab.*dat))/sqrt(s); %将积分用求和代替
mexhab=[mexh(-1*t/s),mexhab(1:
len-1)]; %mexhab修改第一项并右移
end
end
figure
(1);
plot(dat);
title('orignaldat');
figure
(2); %小波系数谱
image(wfab);
colormap(pink(128));
title('正弦波的小波系数图');
(4)用fft实现cwt
%按照圆周卷积定理,原周卷积和线性卷积的关系L>=M+N-1
%按照圆周卷积的定义,相关和线性卷积的关系(原始算法和线性卷积的关系)
%注意画图理解
clc;clear;
t1=cputime;
load('data.mat');
len=length(dat);
lna=70; %a(尺度)的长度
a=zeros(1,lna); %a表示尺度
b=zeros(1,len); %b表示位移
wfab=zeros(lna,len); %小波系数矩阵
mexhab=zeros(1,2*len-1);
data=[zeros(1,len-1),dat];
Ydata=fft(data,4*len);
fors=1:
lna
fork=1:
2*len-1
mexhab(k)=mexh((k-len)/s);
end
temp=ifft(Ydata.*fft(mexhab,4*len),4*len);
wfab(s,:
)=real(temp(2*len-1:
3*len-2))/sqrt(s);%为什么要取实部而不是取模,我也不是很清楚,可是有种感觉
end
figure
(1);
plot(dat);
title('原始数据图');
figure
(2); %小波系数谱
image(wfab);
colormap(pink(128));
title('小波系数谱');
cputime-t1
4)fft快速计算cwt
%按照圆周卷积的定义,
%注意画图理解
clc;clear;
t1=cputime;
load('data.mat');
len=length(dat);
lna=70; %a(尺度)的长度
a=5;
data=[dat,zeros(1,len)];
(4)环境保护验收。
Ydata=fft(dat,2*len);
fors=1:
lna
mexhab=zeros(1,2*len);
规划环境影响评价技术导则由国务院环境保护主管部门会同国务院有关部门制定;规划环境影响评价技术规范由国务院有关部门根据规划环境影响评价技术导则制定,并抄送国务院环境保护主管部门备案。
k=[-a*s:
1:
a*s];
mexhab(k+len)=mexh2(k./s);
temp=ifft(Ydata.*fft(mexhab,2*len),2*len);
B.可能造成重大环境影响的建设项目,应当编制环境影响报告书 wfab(s,:
)=real(temp(len+1:
2*len))/sqrt(s);%要取实部而不是取模,呵呵
end
(一)安全预评价依据figure
(1);
2.量化环境影响后果plot(dat);
(6)评价结论。
title('原始数据图');
figure
(2); %小波系数谱
第1页image(wfab);
colormap(pink(128));
title('小波系数谱');
6.提出安全对策措施建议cputime-t1
大纲要求5)保存为mexh2.m
(1)基础资料、数据的真实性;
functionY=mexh2(x)
Y=exp(-x.*x/2).*(1-x.^2);