请问怎么用matlab实现小波变换,我要处理的数据不是图像数据,而是一个很大的二维矩阵中的数据? 15
展开全部
兄弟,你在这儿可能是得不到答案的,我看你比较真诚,给你说一下。
不知道你matlab这个软件熟不熟,关于算法特别是软件编程的的东西,你只有自己去操作领会,才懂。
我这儿有一个我读研时候的程序,你看看,看得懂就看,原始数据用的地震数据(你可以用自己的txt或者dat数据进去试一下),需要加载seismic工具包,用的是二维两参数小波做连续小波变换。二维数据大的话必须用窗口做再一点一点的平移窗口,窗口点数必须是2的n次方乘2的n次方,还要处理边界,不是一句两句讲的懂。
网上的程序你也可以下载下来看看,很有帮助。
addpath D:\MATLAB\work\SeisLab\S4M\Geophysics_2.01
addpath D:\MATLAB\work
%--------》初始化《---------------------------------------
clear all
clc
clf
%----------》读取数据《------------
f2=altreadsegy('a3.sgy');
Tr=length(f2(1,:));
T=length(f2(:,1));
f3=f2(:,32);
b=zeros(T,Tr);
%-----------------》拓展f(x,t)的边界《-------------
f1=zeros(T+112,Tr+112);
for i=1:1:T+112
for j=1:1:Tr+112
if i<=T&&j<=Tr
f1(i,j)=f2(i,j);
else
f1(i,j)=0;
end
end
end
%-----------------》计算瞬时相位《---------------------
for m=1:(128-16):T
for n=1:(128-16):Tr
for x=1:128
for t=1:128
f(x,t)=f1(m+x-1,n+t-1);
end
end
%-------------》对每一道作Hilbet变换,并取瞬时相位余弦,进行二维小波变换《------------------
F=hilbert(f);
ip=cos(angle(F));
Ph=fft2(ip);
sz=zeros(128,128);
for h=1:40;
seta=pi-(pi/3+h*pi/120);
a=0.02;
for k=1:128;
for j=1:128;
x=a*((k-64)*cos(seta)-(j-64)*sin(seta));
t=a*((k-64)*sin(seta)+(j-64)*cos(seta));
g(k,j)=0.25*exp(-0.5*(5*x^2+(t-1)^2));
end
end
mh=Ph.*g;
st=ifft2(mh);
sz1=abs(real(st));
for k=1:128;
for j=1:128;
if sz1(k,j)>=sz(k,j)
sz(k,j)=sz1(k,j);
else
sz(k,j)=sz(k,j);
end
end
end
end
b(m+7:m+119,n+7:n+119)=sz1(8:120,8:120);
end
end
s_cplot(b(8:T-8,8:Tr-8));
shading interp;
f=fopen('ay.txt','w');
fwrite(f,f3,'float32');
fclose(f);
不知道你matlab这个软件熟不熟,关于算法特别是软件编程的的东西,你只有自己去操作领会,才懂。
我这儿有一个我读研时候的程序,你看看,看得懂就看,原始数据用的地震数据(你可以用自己的txt或者dat数据进去试一下),需要加载seismic工具包,用的是二维两参数小波做连续小波变换。二维数据大的话必须用窗口做再一点一点的平移窗口,窗口点数必须是2的n次方乘2的n次方,还要处理边界,不是一句两句讲的懂。
网上的程序你也可以下载下来看看,很有帮助。
addpath D:\MATLAB\work\SeisLab\S4M\Geophysics_2.01
addpath D:\MATLAB\work
%--------》初始化《---------------------------------------
clear all
clc
clf
%----------》读取数据《------------
f2=altreadsegy('a3.sgy');
Tr=length(f2(1,:));
T=length(f2(:,1));
f3=f2(:,32);
b=zeros(T,Tr);
%-----------------》拓展f(x,t)的边界《-------------
f1=zeros(T+112,Tr+112);
for i=1:1:T+112
for j=1:1:Tr+112
if i<=T&&j<=Tr
f1(i,j)=f2(i,j);
else
f1(i,j)=0;
end
end
end
%-----------------》计算瞬时相位《---------------------
for m=1:(128-16):T
for n=1:(128-16):Tr
for x=1:128
for t=1:128
f(x,t)=f1(m+x-1,n+t-1);
end
end
%-------------》对每一道作Hilbet变换,并取瞬时相位余弦,进行二维小波变换《------------------
F=hilbert(f);
ip=cos(angle(F));
Ph=fft2(ip);
sz=zeros(128,128);
for h=1:40;
seta=pi-(pi/3+h*pi/120);
a=0.02;
for k=1:128;
for j=1:128;
x=a*((k-64)*cos(seta)-(j-64)*sin(seta));
t=a*((k-64)*sin(seta)+(j-64)*cos(seta));
g(k,j)=0.25*exp(-0.5*(5*x^2+(t-1)^2));
end
end
mh=Ph.*g;
st=ifft2(mh);
sz1=abs(real(st));
for k=1:128;
for j=1:128;
if sz1(k,j)>=sz(k,j)
sz(k,j)=sz1(k,j);
else
sz(k,j)=sz(k,j);
end
end
end
end
b(m+7:m+119,n+7:n+119)=sz1(8:120,8:120);
end
end
s_cplot(b(8:T-8,8:Tr-8));
shading interp;
f=fopen('ay.txt','w');
fwrite(f,f3,'float32');
fclose(f);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询