用MATLAB 进行整数小波分解的程序,最好有程序详细介绍的,谢谢!

用MATLAB 进行整数小波分解的程序,最好有程序详细介绍的,谢谢!,第1张

举个例子,希望有所帮助。clcclearallcloseallX=rgb2gray(imread('lena.jpg'))x=Xx=double(x)line=250column=250J=6Tu=7smooth_area_num=20edge_area_num=40fori=1:linecoef1(i,:)=cwt(x(i,:),1,'bior4.4')coef2(i,:)=cwt(x(i,:),2,'bior4.4')coef3(i,:)=cwt(x(i,:),J,'bior4.4')endmax=0max_loc=0max_num=15fori=1:linej=1whilej0&coef3(i,j+1)0)%找到左位置jfork=j+1:column-1ifcoef3(i,k)*coef3(i,j)>=0%找到右位置kform=j:kifabs(coef3(i,m))>maxmax=abs(coef3(i,m))max_loc=mendendifmax>max_numform(i,max_loc)=1endj=kmax=0breakendend%forkifk==column-1j=column-1endelsej=j+1end%ifend%whileend%对列作小波变换x=x'fori=1:linecoef1(i,:)=cwt(x(i,:),1,'bior4.4')coef2(i,:)=cwt(x(i,:),2,'bior4.4')coef3(i,:)=cwt(x(i,:),J,'bior4.4')end%正值1,负值0的矩阵temp表示(突变点左位置)max=0max_loc=0fori=1:linej=1whilej0&coef3(i,j+1)0)%找到左位置jfork=j+1:column-1ifcoef3(i,k)*coef3(i,j)>=0%找到右位置kform=j:kifabs(coef3(i,m))>maxmax=abs(coef3(i,m))max_loc=mendendifmax>max_numform(max_loc,i)=1endj=kmax=0breakendend%forkifk==column-1j=column-1endelsej=j+1end%ifend%whileendfori=2:line-2forj=2:column-2%链长为1ifform(i,j-1)==0&form(i,j+1)==0&form(i-1,j-1)==0&form(i-1,j)==0&form(i-1,j+1)==0&form(i+1,j-1)==0&form(i+1,j)==0&form(i+1,j+1)==0form(i,j)=0%endifform(i,j)==1&form(i,j+1)==1&sum(sum(form(i-1:i+1,j-1:j+2)))==2form(i,j)=0form(i,j+1)=0endifform(i,j)==1&form(i+1,j)==1&sum(sum(form(i-1:i+2,j-1:j+1)))==2form(i,j)=0form(i+1,j)=0endifform(i,j)==1&form(i+1,j+1)==1&sum(sum(form(i:i+1,j:j+1)))==2ifsum(sum(form(i-1:i+2,j-1:j+2)))==3&(form(i-1,j+2)==1|form(i+2,j-1)==1)form(i,j)=0form(i+1,j+1)=0endifsum(sum(form(i-1:i+2,j-1:j+2)))==4&form(i-1,j+2)==1&form(i+2,j-1)==1form(i,j)=0form(i+1,j+1)=0endendifform(i,j+1)==1&form(i+1,j)==1&sum(sum(form(i:i+1,j:j+1)))==2ifsum(sum(form(i-1:i+2,j-1:j+2)))==3&(form(i-1,j-1)==1|form(i+2,j+2)==1)form(i,j+1)=0form(i+1,j)=0endifsum(sum(form(i-1:i+2,j-1:j+2)))==4&form(i-1,j-1)==1&form(i+2,j+2)==1form(i,j+1)=0form(i+1,j)=0endendendendmax=0fori=3:line-3forj=3:column-3s=sum(sum(form(i-2:i+2,j-2:j+2)))form=i-2:i+2forn=j-2:j+2ifs>=7&abs(coef3(m,n))<=s*3form(m,n)=0endendendendendfigureimshow(form,[])

因为我有一组多个讯号组成的阵列要进行小波分解重构请问MATLAB“dwt”指令如何进行计算列(Column )呢?

请问如何将多个讯号组成的矩阵进行直向(column)的小波分解高低频呢,如何在重构回来呢,恳请帮助谢谢

展开

我来答

共1个回答

showtime_97

来自电脑网络类芝麻团 推荐于 2016-06-03

这问题不是小波的问题,应该是matlab数组 *** 作的问题。

dwt是单层离散小波变换函数,例如一个2列的数据(),对其每列做DWT然后将小波系数的结果存为二维的数组,然后重构每一列。

clear all

x=[1,37,54,92,65,912,93,45,97,3]

s=size(x)

for i=1:s(2)

[cA(:,i),cD(:,i)] = dwt(x(:,i),'db1')%分解

X(:,i) = idwt(cA(:,i),cD(:,i),'db1')%重构

end

需要一点说明,x是9行2列,重构后X会变为10行2列,这是由于DWT使用滤波器的卷积运算造成的边缘效应的问题,还有原始数据的奇偶问题,可能会导致使用不同小波基出现重构数据与原始数据个数不同,但不会差太多,有时重复有时可能缺少,也就几个点的问题,你可以自行甄别一下,人工搞成一样的长度。

用Matlab。

Matlab中有Wavelet Toolbox工具箱。

程序很简单,例如:

s=load sumsin%读取信号sumsin

[cA,cD] = swt(s,6,'db1')%用db1小波对s进行6层静态离散小波分解

figure%新建图形窗口

plot(cA(2,:))%画出第二层的低频分量


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11125721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存