举个例子,希望有所帮助。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,:))%画出第二层的低频分量
评论列表(0条)