小波分析实验二维离散小波变换Mallat快速算法.docx

上传人:b****5 文档编号:6914375 上传时间:2023-01-12 格式:DOCX 页数:18 大小:609.97KB
下载 相关 举报
小波分析实验二维离散小波变换Mallat快速算法.docx_第1页
第1页 / 共18页
小波分析实验二维离散小波变换Mallat快速算法.docx_第2页
第2页 / 共18页
小波分析实验二维离散小波变换Mallat快速算法.docx_第3页
第3页 / 共18页
小波分析实验二维离散小波变换Mallat快速算法.docx_第4页
第4页 / 共18页
小波分析实验二维离散小波变换Mallat快速算法.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

小波分析实验二维离散小波变换Mallat快速算法.docx

《小波分析实验二维离散小波变换Mallat快速算法.docx》由会员分享,可在线阅读,更多相关《小波分析实验二维离散小波变换Mallat快速算法.docx(18页珍藏版)》请在冰豆网上搜索。

小波分析实验二维离散小波变换Mallat快速算法.docx

小波分析实验二维离散小波变换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)];

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);

  wfab(s,:

)=real(temp(len+1:

2*len))/sqrt(s);%要取实部而不是取模,呵呵

end

figure

(1);

plot(dat);

title('原始数据图');

figure

(2); %小波系数谱

image(wfab);

colormap(pink(128));

title('小波系数谱');

cputime-t1

 

5)保存为mexh2.m

 

functionY=mexh2(x)

Y=exp(-x.*x/2).*(1-x.^2);

(本资料素材和资料部分来自网络,仅供参考。

请预览后才下载,期待您的好评与关注!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1