小波特征提取算法matlab代码
小波分析中MATLAB阈值获取函数及其应用附程序代码
![小波分析中MATLAB阈值获取函数及其应用附程序代码](https://img.taocdn.com/s3/m/d2beb2a36137ee06eef91813.png)
小波分析中M A T L A B阈值获取函数及其应用附程序代码-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN1、小波分析中MATLAB阈值获取函数MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm,下面对它们的用法进行简单的说明。
一、ddencmp的调用格式有以下三种:(1)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,IN2,X)(2)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,'wp',X)(3)[THR,SORH,KEEPAPP,CRIT]=ddencmp(IN1,'wv',X)函数ddencmp用于获取信号在消噪或压缩过程中的默认阈值。
输入参数X 为一维或二维信号;IN1取值为'den'或'cmp','den'表示进行去噪,'cmp'表示进行压缩;IN2取值为'wv'或'wp',wv表示选择小波,wp表示选择小波包。
返回值THR是返回的阈值;SORH是软阈值或硬阈值选择参数;KEEPAPP表示保存低频信号;CRIT是熵名(只在选择小波包时使用)。
例题1:clear allclcload noisbump;x=noisbump;[c,l]=wavedec(x,5,'sym6'); %对小波进行5层分解[thr,sorh,keepapp]=ddencmp('den','wv',x)xd=wdencmp('gbl',c,l,'sym6',5,thr,sorh,keepapp);%显示降噪信号subplot(211),plot(x),title('x','fontsize',10);subplot(212),plot(xd),title('xd','fontsize',10);xxdthr =;sorh =s;keepapp=1.Err=二、函数wbmpen的调用格式如下:THR=wbmpen(C,L,SIGMA,ALPHA);THR=wbmpen(C,L,SIGMA,ALPHA)返回去噪的全局阈值THR。
关于小波分析的matlab程序
![关于小波分析的matlab程序](https://img.taocdn.com/s3/m/ff5bb6810b1c59eef9c7b45c.png)
关于小波分析的matlab程序(个人收集关于小波分析的matlab程序)小波滤波器构造和消噪程序 (2)小波谱分析mallat算法经典程序 (16)小波包变换分析信号的MATLAB程序 (20)利用小波变换实现对电能质量检测的算法实现 (31)基于小波变换的图象去噪Normalshrink算法 (35)小波滤波器构造和消噪程序1.重构% mallet_wavelet.m% 此函数用于研究Mallet算法及滤波器设计% 此函数仅用于消噪a=pi/8; %角度赋初值b=pi/8;%低通重构FIR滤波器h0(n)冲激响应赋值h0=cos(a)*cos(b);h1=sin(a)*cos(b);h2=-sin(a)*sin(b);h3=cos(a)*sin(b);low_construct=[h0,h1,h2,h3];L_fre=4; %滤波器长度low_decompose=low_construct(end:-1:1); %确定h0(-n),低通分解滤波器for i_high=1:L_fre; %确定h1(n)=(-1)^n,高通重建滤波器if(mod(i_high,2)==0);coefficient=-1;elsecoefficient=1;endhigh_construct(1,i_high)=low_decompose(1,i_hi gh)*coefficient;endhigh_decompose=high_construct(end:-1:1); %高通分解滤波器h1(-n)L_signal=100; %信号长度n=1:L_signal; %信号赋值f=10;t=0.001;y=10*cos(2*pi*50*n*t).*exp(-20*n*t);figure(1);plot(y);title('原信号');check1=sum(high_decompose); %h0(n)性质校验check2=sum(low_decompose);check3=norm(high_decompose);check4=norm(low_decompose);l_fre=conv(y,low_decompose); %卷积l_fre_down=dyaddown(l_fre); %抽取,得低频细节h_fre=conv(y,high_decompose);h_fre_down=dyaddown(h_fre); %信号高频细节figure(2);subplot(2,1,1)plot(l_fre_down);title('小波分解的低频系数');subplot(2,1,2);plot(h_fre_down);title('小波分解的高频系数');l_fre_pull=dyadup(l_fre_down); %0差值h_fre_pull=dyadup(h_fre_down);l_fre_denoise=conv(low_construct,l_fre_pull); h_fre_denoise=conv(high_construct,h_fre_pull);l_fre_keep=wkeep(l_fre_denoise,L_signal); %取结果的中心部分,消除卷积影响h_fre_keep=wkeep(h_fre_denoise,L_signal);sig_denoise=l_fre_keep+h_fre_keep; %信号重构compare=sig_denoise-y; %与原信号比较figure(3);subplot(3,1,1)plot(y);ylabel('y'); %原信号subplot(3,1,2);plot(sig_denoise);ylabel('sig\_denoise'); %重构信号subplot(3,1,3);plot(compare);ylabel('compare'); %原信号与消噪后信号的比较2.消噪、% 此函数用于研究Mallet算法及滤波器设计% 此函数用于消噪处理%角度赋值%此处赋值使滤波器系数恰为db9%分解的高频系数采用db9较好,即它的消失矩较大%分解的有用信号小波高频系数基本趋于零%对于噪声信号高频分解系数很大,便于阈值消噪处理[l,h]=wfilters('db10','d');low_construct=l;L_fre=20; %滤波器长度low_decompose=low_construct(end:-1:1); %确定h0(-n),低通分解滤波器for i_high=1:L_fre; %确定h1(n)=(-1)^n,高通重建滤波器if(mod(i_high,2)==0);coefficient=-1;elsecoefficient=1;endhigh_construct(1,i_high)=low_decompose(1,i_hi gh)*coefficient;endhigh_decompose=high_construct(end:-1:1); %高通分解滤波器h1(-n)L_signal=100; %信号长度n=1:L_signal; %原始信号赋值f=10;t=0.001;y=10*cos(2*pi*50*n*t).*exp(-30*n*t); zero1=zeros(1,60); %信号加噪声信号产生zero2=zeros(1,30);noise=[zero1,3*(randn(1,10)-0.5),zero2]; y_noise=y+noise;figure(1);subplot(2,1,1);plot(y);title('原信号');subplot(2,1,2);plot(y_noise);title('受噪声污染的信号');check1=sum(high_decompose); %h0(n),性质校验check2=sum(low_decompose);check3=norm(high_decompose);check4=norm(low_decompose);l_fre=conv(y_noise,low_decompose); %卷积l_fre_down=dyaddown(l_fre); %抽取,得低频细节h_fre=conv(y_noise,high_decompose);h_fre_down=dyaddown(h_fre); %信号高频细节figure(2);subplot(2,1,1)plot(l_fre_down);title('小波分解的低频系数');subplot(2,1,2);plot(h_fre_down);title('小波分解的高频系数');% 消噪处理for i_decrease=31:44;if abs(h_fre_down(1,i_decrease))>=0.000001 h_fre_down(1,i_decrease)=(10^-7);endendl_fre_pull=dyadup(l_fre_down); %0差值h_fre_pull=dyadup(h_fre_down);l_fre_denoise=conv(low_construct,l_fre_pull); h_fre_denoise=conv(high_construct,h_fre_pull);l_fre_keep=wkeep(l_fre_denoise,L_signal); %取结果的中心部分,消除卷积影响h_fre_keep=wkeep(h_fre_denoise,L_signal);sig_denoise=l_fre_keep+h_fre_keep; %消噪后信号重构%平滑处理for j=1:2for i=60:70;sig_denoise(i)=sig_denoise(i-2)+sig_denoise(i+2)/ 2;end;end;compare=sig_denoise-y; %与原信号比较figure(3);subplot(3,1,1)plot(y);ylabel('y'); %原信号subplot(3,1,2);plot(sig_denoise);ylabel('sig\_denoise'); %消噪后信号subplot(3,1,3);plot(compare);ylabel('compare'); %原信号与消噪后信号的比较小波谱分析mallat算法经典程序clc;clear;%% 1.正弦波定义f1=50; % 频率1f2=100; % 频率2fs=2*(f1+f2); % 采样频率Ts=1/fs; % 采样间隔N=120; % 采样点数n=1:N;y=sin(2*pi*f1*n*Ts)+sin(2*pi*f2*n*Ts); % 正弦波混合figure(1)plot(y);title('两个正弦信号')figure(2)stem(abs(fft(y)));title('两信号频谱')%% 2.小波滤波器谱分析h=wfilters('db30','l'); % 低通g=wfilters('db30','h'); % 高通h=[h,zeros(1,N-length(h))]; % 补零(圆周卷积,且增大分辨率变于观察)g=[g,zeros(1,N-length(g))]; % 补零(圆周卷积,且增大分辨率变于观察)figure(3);stem(abs(fft(h)));title('低通滤波器图')figure(4);stem(abs(fft(g)));title('高通滤波器图')%% 3.MALLET分解算法(圆周卷积的快速傅里叶变换实现)sig1=ifft(fft(y).*fft(h)); % 低通(低频分量) sig2=ifft(fft(y).*fft(g)); % 高通(高频分量) figure(5); % 信号图subplot(2,1,1)plot(real(sig1));title('分解信号1')subplot(2,1,2)plot(real(sig2));title('分解信号2')figure(6); % 频谱图subplot(2,1,1)stem(abs(fft(sig1)));title('分解信号1频谱')subplot(2,1,2)stem(abs(fft(sig2)));title('分解信号2频谱')%% 4.MALLET重构算法sig1=dyaddown(sig1); % 2抽取sig2=dyaddown(sig2); % 2抽取sig1=dyadup(sig1); % 2插值sig2=dyadup(sig2); % 2插值sig1=sig1(1,[1:N]); % 去掉最后一个零sig2=sig2(1,[1:N]); % 去掉最后一个零hr=h(end:-1:1); % 重构低通gr=g(end:-1:1); % 重构高通hr=circshift(hr',1)'; % 位置调整圆周右移一位gr=circshift(gr',1)'; % 位置调整圆周右移一位sig1=ifft(fft(hr).*fft(sig1)); % 低频sig2=ifft(fft(gr).*fft(sig2)); % 高频sig=sig1+sig2; % 源信号%% 5.比较figure(7);subplot(2,1,1)plot(real(sig1));title('重构低频信号');subplot(2,1,2)plot(real(sig2));title('重构高频信号');figure(8);subplot(2,1,1)stem(abs(fft(sig1)));title('重构低频信号频谱');subplot(2,1,2)stem(abs(fft(sig2)));title('重构高频信号频谱');figure(9)plot(real(sig),'r','linewidth',2);hold on;plot(y);legend('重构信号','原始信号')title('重构信号与原始信号比较')小波包变换分析信号的MATLAB程序%t=0.001:0.001:1;t=1:1000;s1=sin(2*pi*50*t*0.001)+sin(2*pi*120*t*0.001)+ rand(1,length(t));for t=1:500;s2(t)=sin(2*pi*50*t*0.001)+sin(2*pi*120*t*0.00 1)+rand(1,length(t));endfor t=501:1000;s2(t)=sin(2*pi*200*t*0.001)+sin(2*pi*120*t*0.001)+rand(1,length(t));endsubplot(9,2,1)plot(s1)title('原始信号')ylabel('S1')subplot(9,2,2)plot(s2)title('故障信号')ylabel('S2')wpt=wpdec(s1,3,'db1','shannon');%plot(wpt);s130=wprcoef(wpt,[3,0]);s131=wprcoef(wpt,[3,1]);s132=wprcoef(wpt,[3,2]);s133=wprcoef(wpt,[3,3]);s134=wprcoef(wpt,[3,4]);s135=wprcoef(wpt,[3,5]);s136=wprcoef(wpt,[3,6]);s137=wprcoef(wpt,[3,7]);s10=norm(s130);s11=norm(s131);s12=norm(s132);s13=norm(s133);s14=norm(s134);s15=norm(s135);s16=norm(s136);s17=norm(s137);st10=std(s130);st11=std(s131);st12=std(s132);st13=std(s133);st14=std(s134);st15=std(s135);st16=std(s136);st17=std(s137);disp('正常信号的特征向量');snorm1=[s10,s11,s12,s13,s14,s15,s16,s17] std1=[st10,st11,st12,st13,st14,st15,st16,st17]subplot(9,2,3);plot(s130);ylabel('S130');subplot(9,2,5);plot(s131);ylabel('S131');subplot(9,2,7);plot(s132);ylabel('S132');subplot(9,2,9);plot(s133);ylabel('S133');subplot(9,2,11);plot(s134);ylabel('S134');subplot(9,2,13);plot(s135);ylabel('S135');subplot(9,2,15);plot(s136);ylabel('S136');subplot(9,2,17);plot(s137);ylabel('S137');wpt=wpdec(s2,3,'db1','shannon');%plot(wpt);s230=wprcoef(wpt,[3,0]); s231=wprcoef(wpt,[3,1]); s232=wprcoef(wpt,[3,2]); s233=wprcoef(wpt,[3,3]); s234=wprcoef(wpt,[3,4]); s235=wprcoef(wpt,[3,5]); s236=wprcoef(wpt,[3,6]); s237=wprcoef(wpt,[3,7]);s20=norm(s230);s21=norm(s231);s22=norm(s232);s23=norm(s233);s24=norm(s234);s25=norm(s235);s26=norm(s236);s27=norm(s237);st20=std(s230);st21=std(s231);st22=std(s232);st23=std(s233);st24=std(s234);st25=std(s235);st26=std(s236);st27=std(s237);disp('故障信号的特征向量');snorm2=[s20,s21,s22,s23,s24,s25,s26,s27] std2=[st20,st21,st22,st23,st24,st25,st26,st27]subplot(9,2,4);plot(s230);ylabel('S230');subplot(9,2,6);plot(s231);ylabel('S231');subplot(9,2,8);plot(s232);ylabel('S232');subplot(9,2,10);plot(s233);ylabel('S233');subplot(9,2,12);plot(s234);ylabel('S234');subplot(9,2,14);plot(s235); ylabel('S235');subplot(9,2,16);plot(s236); ylabel('S236');subplot(9,2,18);plot(s237); ylabel('S237');%fftfigurey1=fft(s1,1024);py1=y1.*conj(y1)/1024;y2=fft(s2,1024);py2=y2.*conj(y2)/1024;y130=fft(s130,1024);py130=y130.*conj(y130)/1024; y131=fft(s131,1024);py131=y131.*conj(y131)/1024; y132=fft(s132,1024);py132=y132.*conj(y132)/1024; y133=fft(s133,1024);py133=y133.*conj(y133)/1024; y134=fft(s134,1024);py134=y134.*conj(y134)/1024; y135=fft(s135,1024);py135=y135.*conj(y135)/1024; y136=fft(s136,1024);py136=y136.*conj(y136)/1024; y137=fft(s137,1024);py137=y137.*conj(y137)/1024;y230=fft(s230,1024);py230=y230.*conj(y230)/1024; y231=fft(s231,1024);py231=y231.*conj(y231)/1024; y232=fft(s232,1024);py232=y232.*conj(y232)/1024; y233=fft(s233,1024);py233=y233.*conj(y233)/1024; y234=fft(s234,1024);py234=y234.*conj(y234)/1024; y235=fft(s235,1024);py235=y235.*conj(y235)/1024;y236=fft(s236,1024);py236=y236.*conj(y236)/1024; y237=fft(s237,1024);py237=y237.*conj(y237)/1024;f=1000*(0:511)/1024;subplot(1,2,1);plot(f,py1(1:512));ylabel('P1');title('原始信号的功率谱') subplot(1,2,2);plot(f,py2(1:512));ylabel('P2');title('故障信号的功率谱') figuresubplot(4,2,1);plot(f,py130(1:512));ylabel('P130');title('S130的功率谱') subplot(4,2,2);plot(f,py131(1:512)); ylabel('P131');title('S131的功率谱') subplot(4,2,3);plot(f,py132(1:512)); ylabel('P132'); subplot(4,2,4);plot(f,py133(1:512)); ylabel('P133'); subplot(4,2,5);plot(f,py134(1:512)); ylabel('P134'); subplot(4,2,6);plot(f,py135(1:512)); ylabel('P135'); subplot(4,2,7);plot(f,py136(1:512)); ylabel('P136'); subplot(4,2,8);plot(f,py137(1:512)); ylabel('P137'); figuresubplot(4,2,1);plot(f,py230(1:512)); ylabel('P230');title('S230的功率谱') subplot(4,2,2);plot(f,py231(1:512)); ylabel('P231');title('S231的功率谱') subplot(4,2,3);plot(f,py232(1:512)); ylabel('P232'); subplot(4,2,4);plot(f,py233(1:512)); ylabel('P233'); subplot(4,2,5);plot(f,py234(1:512)); ylabel('P234'); subplot(4,2,6);plot(f,py235(1:512)); ylabel('P235'); subplot(4,2,7);plot(f,py236(1:512));ylabel('P236');subplot(4,2,8);plot(f,py237(1:512));ylabel('P237');figure%plottree(wpt)利用小波变换实现对电能质量检测的算法实现N=10000;s=zeros(1,N);for n=1:Nif n<0.4*N||n>0.8*Ns(n)=31.1*sin(2*pi*50/10000*n);elses(n)=22.5*sin(2*pi*50/10000*n);endendl=length(s);[c,l]=wavedec(s,6,'db5'); %用db5小波分解信号到第六层subplot(8,1,1);plot(s);title('用db5小波分解六层:s=a6+d6+d5+d4+d3+d2+d1');Ylabel('s');%对分解结构【c,l】中第六层低频部分进行重构a6=wrcoef('a',c,l,'db5',6);subplot(8,1,2);plot(a6);Ylabel('a6');%对分解结构【c,l】中各层高频部分进行重构for i=1:6decmp=wrcoef('d',c,l,'db5',7-i);subplot(8,1,i+2);plot(decmp);Ylabel(['d',num2str(7-i)]);end%----------------------------------------------------------- rec=zeros(1,300);rect=zeros(1,300);ke=1;u=0;d1=wrcoef('d',c,l,'db5',1);figure(2);plot(d1);si=0;N1=0;N0=0;sce=0;for n=20:N-30rect(ke)=s(n);ke=ke+1;if(ke>=301)if(si==2)rec=rect;u=2;end;si=0;ke=1;end;if(d1(n)>0.01) % the condition of abnormal append.N1=n;if(N0==0)N0=n;si=si+1;end;if(N1>N0+30)Nlen=N1-N0;Tab=Nlen/10000;end;end;if(si==1)fork=N0:N0+99 %testin g of 1/4 period signals tosce=sce+s(k)*s(k)/10000;end;re=sqrt(sce*200) %re indicate the pike value of .sce=0;si=si+1;end;end;NlenN0n=1:300;figure(3)plot(n,rec);基于小波变换的图象去噪Normalshrink算法function[T_img,Sub_T]=threshold_2_N(img,levels)% reference :image denoising using wavelet thresholding[xx,yy]=size(img);HH=img((xx/2+1):xx,(yy/2+1):yy);delt_2=(std(HH(:)))^2;%(median(abs(HH(:)))/0. 6745)^2;%T_img=img;for i=1:levelstemp_x=xx/2^i;temp_y=yy/2^i;% belt=1.0*(log(temp_x/(2*levels)))^0.5;belt=1.0*(log(temp_x/(2*levels)))^0.5; %2.5 0.8%HLHL=img(1:temp_x,(temp_y+1):2*temp_y);delt_y=std(HL(:));T_1=belt*delt_2/delt_y;%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%T_HL=sign(HL).*max(0,abs(HL)-T_1);%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%T_img(1:temp_x,(temp_y+1):2*temp_y)=T_HL;Sub_T(3*(i-1)+1)=T_1;%LHLH=img((temp_x+1):2*temp_x,1:temp_y);delt_y=std(LH(:));T_2=belt*delt_2/delt_y;%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%T_LH=sign(LH).*max(0,abs(LH)-T_2);%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%T_img((temp_x+1):2*temp_x,1:temp_y)=T_LH;Sub_T(3*(i-1)+2)=T_2;%HHHH=img((temp_x+1):2*temp_x,(temp_y+1):2*te mp_y);delt_y=std(HH(:));T_3=belt*delt_2/delt_y;%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%T_HH=sign(HH).*max(0,abs(HH)-T_3);%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%T_img((temp_x+1):2*temp_x,(temp_y+1):2*tem p_y)=T_HH;Sub_T(3*(i-1)+3)=T_3;end。
MATLAB小波变换指令及其功能介绍(超级有用).
![MATLAB小波变换指令及其功能介绍(超级有用).](https://img.taocdn.com/s3/m/a5a00b95a216147916112820.png)
MATLAB 小波变换指令及其功能介绍1 一维小波变换的 Matlab 实现(1 dwt函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname'[cA,cD]=dwt(X,Lo_D,Hi_D别可以实现一维、二维和 N 维 DFT说明:[cA,cD]=dwt(X,'wname' 使用指定的小波基函数 'wname' 对信号X 进行分解,cA 、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2 idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname'X=idwt(cA,cD,Lo_R,Hi_RX=idwt(cA,cD,'wname',L函数 fft、fft2 和 fftn 分 X=idwt(cA,cD,Lo_R,Hi_R,L说明:X=idwt(cA,cD,'wname' 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R 用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L 和 X=idwt(cA,cD,Lo_R,Hi_R,L 指定返回信号 X 中心附近的 L 个点。
2 二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能--------------------------------------------------- dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号 upcoef2 由多层小波分解重构近似分量或细节分量 detcoef2 提取二维信号小波分解的细节分量 appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换 -----------------------------------------------------------(1 wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOLY=wcodemat(X,NB,OPTY=wcodemat(X,NBY=wcodemat(X说明:Y=wcodemat(X,NB,OPT,ABSOL 返回数据矩阵 X 的编码矩阵 Y ;NB 伪编码的最大值,即编码范围为 0~NB ,缺省值 NB=16; OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分 ABSOL 是函数的控制参数(缺省值为 '1'),即: ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X1. 离散傅立叶变换的 Matlab实现(2 dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname'[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D说明:[cA,cH,cV,cD]=dwt2(X,'wname'使用指定的小波基函数 'wname' 对二维信号 X 进行二维离散小波变幻;cA ,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D 使用指定的分解低通和高通滤波器 Lo_D 和Hi_D 分解信号 X 。
3次b样条小波变换matlab
![3次b样条小波变换matlab](https://img.taocdn.com/s3/m/55e9a607ff4733687e21af45b307e87100f6f86e.png)
b样条小波变换是一种信号处理技术,可用于信号压缩、去噪和特征提取。
本文将探讨在MATLAB环境下进行3次b样条小波变换的具体步骤和应用。
一、 b样条小波变换简介1.1 b样条小波变换的定义b样条小波是一种基于多项式的小波函数,它具有平稳性和紧支撑性。
b样条小波变换是利用b样条小波作为基函数进行信号分析和处理的一种方法。
1.2 b样条小波变换的优点b样条小波变换具有较好的时间-频率局部化特性,能够有效地捕捉信号的局部特征。
b样条小波变换能够实现信号的稀疏表示,对于信号压缩和去噪有很好的效果。
1.3 b样条小波变换的应用b样条小波变换在图像处理、音频处理、医学信号分析等领域有着广泛的应用。
在实际工程中,b样条小波变换被用于特征提取、噪声抑制、模式识别等方面。
二、 MATLAB中进行3次b样条小波变换的方法2.1 准备工作在进行3次b样条小波变换前,首先需要在MATLAB环境下安装相应的小波变换工具包,比如Wavelet Toolbox。
在安装好工具包后,就可以使用MATLAB提供的小波变换函数进行信号处理了。
2.2 3次b样条小波变换的实现在MATLAB中,可以通过使用cwtft和icwtft函数来进行3次b样条小波变换。
cwtft函数可以用于进行连续小波变换,而icwtft函数则可以用于进行小波逆变换,恢复原始信号。
2.3 3次b样条小波变换的参数设置在使用cwtft函数进行3次b样条小波变换时,需要设置相应的小波基函数和尺度参数。
通过调整小波基函数和尺度参数,可以实现对不同频率和尺度的信号成分进行分析。
2.4 3次b样条小波变换的示例代码以下是一个在MATLAB中进行3次b样条小波变换的简单示例代码:```matlab生成一个测试信号t = 0:0.01:2*pi;x = sin(t);进行3次b样条小波变换scales = 1:1:100;wavelet = 'bior3.1';cwtft(x,'scales',scales,'wavelet',wavelet);通过cwtft函数得到小波系数```三、 3次b样条小波变换的应用示例3.1 信号压缩通过3次b样条小波变换,可以得到信号在不同尺度和频率下的小波系数。
小波-matlab-代码
![小波-matlab-代码](https://img.taocdn.com/s3/m/b66ff340a98271fe910ef98b.png)
小波matlab 代码[x,map]=imread('MUCS_新建文件夹_32603.ptl_208.bmp');subplot(1,2,1);imshow(x);[c,s]=wavedec2(x,3,'sym4');Csize=size(c);for i=1:Csize(2)if(c(i)>100) %低频分量----s中第一维的长度c(i)=1*c(i);elsec(i)=0.9*c(i); %高频分量endendx1=waverec2(c,s,'sym4');im=uint8(x1);subplot(1,2,2);imshow(im);[c,s]=wavedec2(X,2,'bior3.7');%对图像用小波进行层分解cal=appcoef2(c,s,'bior3.7',1);%提取小波分解结构中的一层的低频系数和高频系数ch1=detcoef2('h',c,s,1);%水平方向cv1=detcoef2('v',c,s,1);%垂直方向cd1=detcoef2('d',c,s,1);%斜线方向a1=wrcoef2('a',c,s,'bior3.7',1);%各频率成份重构[c,s]=wavedec2(X,1,'sym4');a1=appcoef2(c,s,'sym4',1);%小波分解结构中的一层的低频系数,下面是3个高频系数a1=2*a1;h1=detcoef2('h',c,s,1);v1=detcoef2('v',c,s,1);d1=detcoef2('d',c,s,1);h1=0.5*h1;v1=0.5*v1;d1=0.5*d1;y=idwt2(a1,h1,v1,d1,'sym4');load wbarb;X1=X;map1=map;subplot(2,2,1);image(X1);colormap(map1);title('图像wbarb');load woman;X2=X;map2=map;subplot(2,2,2);image(X2);colormap(map2);title('图像woman');%===================================== %对上述二图像进行分解[c1,l1]=wavedec2(X1,2,'sym4');[c2,l2]=wavedec2(X2,2,'sym4');%对分解系数进行融合c=c1+c2;%===================================== %应用融合系数进行图像重构并显示XX=waverec2(c,l1,'sym4');subplot(2,2,3);image(XX);title('融合图像1');Csize1=size(c1);%=====================================%对图像进行增强处理for i=1:Csize1(2)c1(i)=1.2*c1(i);endCsize2=size(c2);for j=1:Csize2(2)c2(j)=0.8*c2(j);end%===================================== %通过减小融合系数以减小图像的亮度c=0.5*(c1+c2);%===================================== %对融合系数进行图像重构XXX=waverec2(c,l2,'sym4');%===================================== %显示重构结果subplot(2,2,4);image(XXX);title('融合图像2');%本程序实现下述功能:首先读入原始图像,并对它使用db3小波进行2层分解,%然后对分解系数进行处理突出所需,弱化不需要的部分%装载并显示原始图像clear all;clc;load flujet;subplot(1,2,1);image(X);colormap(map);title('原始图像');%=====================================%对图像X用小波db3进行2层分解[c,l]=wavedec2(X,2,'db3');Csize=size(c);%=====================================%对分解系数作处理以突出所需部分并弱化不需要部分for i=1:Csize(2)if(c(i)>300) %低频分量c(i)=2*c(i);elsec(i)=0.5*c(i); %高频分量endend%===================================== %重构图像并显示X1=waverec2(c,l,'db3');subplot(1,2,2);image(X1);colormap(map);title('增强图像');[c,s]=wavedec2(x,2,'sym4');Csize=size(c);for i=1:Csize(2)if(c(i)>169) %低频分量----s中第一维的长度c(i)=2*c(i);elsec(i)=0.3*c(i); %高频分量endendx1=waverec2(c,s,'sym4');im=uint8(x1);imshow(im);二维小波变换的Matlab 实现y j v z w %o u n\ { K*Y二维小波变换的函数a r T Q3Y r -------------------------------------------------5B Y0x!Z9a9] 函数名函数功能h$H9q ` \ ---------------------------------------------------'d3d t Be'x6gdwt2 二维离散小波变换!t2B!I9L5S;q:r X wavedec2 二维信号的多层小波分解!D o4B @2U Y,o!H#M l idwt2 二维离散小波反变换o l!R H N_ G4M waverec2 二维信号的多层小波重构z H!f6~)}-P _wrcoef2 由多层小波分解重构某一层的分解信号0E,\ |.o | D T2@2b2K$Uupcoef2 由多层小波分解重构近似分量或细节分量*^ Y4? T3R x(k3v detcoef2 提取二维信号小波分解的细节分量2~ U W L8V appcoef2 提取二维信号小波分解的近似分量0q l N7p a @ i Y C ] c b upwlev2 二维小波分解的单层重构2y W_ ] h-i~ m(~ dwtpet2 二维周期小波变换4Y/aN&G q ] E B"H)Widwtper2 二维周期小波反变换7h"| Iv e -------------------------------------------------------------9O d7D ` b y&lX { I g u s I `(1) wcodemat 函数` T f ?-[ c*e$M c d 功能:对数据矩阵进行伪彩色编码|4X C i5R$x6g 格式:Y=wcodemat(X,NB,OPT,ABSOL)'k#e C a I%HY=wcodemat(X,NB,OPT) i)E)p _!O-k j J ^Y=wcodemat(X,NB)A2z,q D'u'z*_.~/U Y=wcodemat(X)Z5D"^ e5i |L'^4` 说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为0~NB,缺省值NB=16;@ N6C Y p Y E OPT 指定了编码的方式(缺省值为'mat'),即:r(o ? L j(y e f NOPT='row' ,按行编码-y q i H { o5e OPT='col' ,按列编码8X N*\.Z/c @ OPT='mat' ,按整个矩阵编码e j!l W b L ABSOL 是函数的控制参数(缺省值为'1'),即:i x"^:| ~5{ABSOL=0 时,返回编码矩阵2z x;^ l$q | _ Z ABSOL=1 时,返回数据矩阵的绝对值ABS(X)V l U1e r g3x'O%I9z&c,A ]!T%y d s \.s (2) dwt2 函数D J ~0D/m S:O S"I 功能:二维离散小波变换 B c t _)h O X I格式:[cA,cH,cV,cD]=dwt2(X,'wname')3A N _ W F[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)m(E j"[ _ @ 说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分.g(R @ E E Y'n 量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器Lo_D 和Hi_D 分j4F2} ~ Q e W 解信号X 。
matlab特征提取代码(Matlabfeatureextractioncode)
![matlab特征提取代码(Matlabfeatureextractioncode)](https://img.taocdn.com/s3/m/97cda95b2a160b4e767f5acfa1c7aa00b52a9df9.png)
matlab特征提取代码(Matlab feature extraction code)我= 1:26F = strcat(想:\ bishe \”,num2str(我));图像= strcat(F,“.jpg”);PS = imread(图像);PS = imresize(PS,[ 300300 ],'bilinear’);%归一化大小PS = rgb2gray(PS);[ M ],N =大小(PS);%测量图像尺寸参数GP =零(1256);%预创建存放灰度出现概率的向量K = 0:255GP(K + 1)=长度(找到(PS = = k))/(m×n);%计算每级灰度出现的概率,将其存入GP中相应位置结束%直方图均衡化S1 =零(1256);我为1:256J = 1:我S1(我)= GP(J)+ S1(我);%计算SK结束结束S2 =圆((S1×256)+ 0.5);%将SK归到相近级的灰度%图像均衡化F=PS;我= 0:255F(找到(PS = =我))= S2(i + 1);%将各个像素归一化后的灰度值赋给这个像素结束图,imshow(f);%边缘检测F =边缘(F,'canny ',0.25);imshow(f);%二值法锐化图像F =双(F);【X,Y ] =梯度(F);G = SQRT(X * X + Y Y);我发现(G>=0.5);G(我)= 256;J =找到(g<0.5);G(j)= 0;imshow(G);标题(“二值法锐化图像”);%中值滤波G = medfilt2(G);G =抖动(G);imshow(G);%提取面积,矩形度,圆形度,拉伸度特征% G = im2bw(G);【X,Y ] =大小(G);BW = bwperim(G,8);%检测边缘跟踪,用于计算周长检测垂直方向连读的周长像素点% %P1 = 0;P2 = 0;纽约= 0;%记录垂直方向连续周长像素点的个数我= 1 xJ = 1:Y如果(BW(i,j)> 0)P2 = J;如果((p2-p1)= = 1)%判断是否为垂直方向连续的周长像素点纽约纽约+ 1;结束P1 = P2;结束结束结束%检测水平方向连读的周长像素点P1 = 0;P2 = 0;NX = 0;%记录水平方向连续周长像素点的个数J = 1:Y我= 1 x如果(BW(i,j)> 0)P2 =我;如果((p2-p1)= = 1)%判断是否为水平方向连续的周长像素点NX = NX + 1;结束P1 = P2;结束结束结束Sn =金额(金额(BW));%计算周长像素点的总数ND = Sn NX纽约;%计算奇数码的链码数目H=max (sum (g));% calculated the target heightW=max (sum (G')); g% by image matrix transpose, calculating widthL=sqrt (2) *Nd+Nx+Ny%; calculate the perimeter%==== form eigenvalue calculation ===%A=bwarea (g);% calculated the target areaR=A/ (H*W);% rectangular degreeE=min (H, W) /max (H, W);% calculated lengthTemp1=[A, R, E];% extraction of invariant feature[M, N]=size (g);[x, y]=meshgrid (1:N, 1:M);X=x (:);Y=y (:);G=g (:);M.m00=sum (g);If (m.m00==0)M.m00=eps;EndM.m10=sum (x.*g);M.m01=sum (y.*g);M.m11=sum (x.*y.*g); M.m20=sum (x.^2.*g); M.m02=sum (y.^2.*g); M.m30=sum (x.^3.*g); M.m03=sum (y.^3.*g); M.m12=sum (x.*y.^2.*g); M.m21=sum (x.^2.*y.*g); Xbar=m.m10/m.m00;Ybar=m.m01/m.m00;E.eta11= (m.m11-ybar*m.m10) /m.m00^2;E.eta20= (m.m20-xbar*m.m10) /m.m00^2;E.eta02= (m.m02-ybar*m.m01) /m.m00^2;E.eta30= (m.m30-3*xbar*m.m20+2*xbar^2*m.m10) /m.m00^2.5;E.eta03= (m.m03-3*ybar*m.m02+2*ybar^2*m.m01) /m.m00^2.5;E.eta21= (m.m21-2*xbar*m.m11-ybar*m.m20+2*xbar^2*m.m01) /m.m00^2.5;E.eta12= (m.m12-2*ybar*m.m11-xbar*m.m02+2*ybar^2*m.m10) /m.m00^2.5;Phi (1) =e.eta20+e.eta02;Phi (2) = (e.eta20-e.eta02) ^2+4*e.eta11^2;Phi (3) = (e.eta30-3*e.eta12) ^2+ (3*e.eta21-e.eta03) ^2;Phi (4) = (e.eta30+e.eta12) ^2+ (e.eta21+e.eta03) ^2;Phi (5) = (e.eta30-3*e.eta12) * (e.eta30+e.eta12) * ((e.eta30+e.eta12) ^2-3* (e.eta21+e.eta03) ^2+(3*e.eta21-e.eta03) * (e.eta21+e.eta03) * (3*(e.eta30+e.eta12) ^2- (e.eta21+e.eta03) ^2));Phi (6) = (e.eta20-e.eta02) * ((e.eta30+e.eta12) ^2-(e.eta21+e.eta03) ^2) +4*e.eta11* (e.eta30+e.eta12) *(e.eta21+e.eta03);Phi (7) = (3*e.eta21-e.eta03) * (e.eta30+e.eta12) *((e.eta30+e.eta12) ^2-3* (e.eta21+e.eta03) ^2) +(3*e.eta12-e.eta30) * (e.eta21+e.eta03) * (3*(e.eta30+e.eta12) ^2- (e.eta21+e.eta03) ^2);Temp2 = ABS (log (PHI));% contains seven characteristic values Temp=[temp1, temp2]End。
特征选择、特征提取MATLAB算法实现(模式识别)
![特征选择、特征提取MATLAB算法实现(模式识别)](https://img.taocdn.com/s3/m/97a6e1f69a89680203d8ce2f0066f5335a816701.png)
特征选择、特征提取MATLAB算法实现(模式识别)6特征选择6.1问题对“threethreelarge.m”数据,采⽤任意⼀种特征选择算法,选择2个特征6.2思路采⽤简单特征选择法(simple feature selection approach),⾸先计算每⼀个特征的分类能⼒值,再选择出其中最⼤分类能⼒的l个特征。
6.3结果eigs=8.92340.00000.0767SelectedFeature=13也就是说,选取x和z坐标作为特征。
6.4代码%特征选择代码,见FSthrthrlrg.m⽂件m1=[0,0,0];m2=[0,0,0];m3=[0,0,0];m=[0,0,0];for i=1:200m1(1)=m1(1)+(x1(i,1)-m1(1))/i;m1(2)=m1(2)+(x1(i,2)-m1(2))/i;m1(3)=m1(3)+(x1(i,3)-m1(3))/i;end;for i=1:190m2(1)=m2(1)+(x2(i,1)-m2(1))/i;m2(2)=m2(2)+(x2(i,2)-m2(2))/i;m2(3)=m2(3)+(x2(i,3)-m2(3))/i;end;for i=1:210m3(1)=m3(1)+(x3(i,1)-m3(1))/i;m3(2)=m3(2)+(x3(i,2)-m3(2))/i;m3(3)=m3(3)+(x3(i,3)-m3(3))/i;end;m(1)=(m1(1)+m2(1)+m3(1))/3;m(2)=(m1(2)+m2(2)+m3(2))/3;m(3)=(m1(3)+m2(3)+m3(3))/3;sw1=zeros(3,3);sw2=zeros(3,3);sw3=zeros(3,3);sw=zeros(3,3);sb=zeros(3,3);for i=1:200sw1=sw1+([x1(i,1),x1(i,2),x1(i,3)]-m1)'*([x1(i,1),x1(i,2),x1(i,3)]-m1);end;for i=1:190sw2=sw2+([x2(i,1),x2(i,2),x2(i,3)]-m2)'*([x2(i,1),x2(i,2),x2(i,3)]-m2);end;for i=1:210sw3=sw3+([x3(i,1),x3(i,2),x3(i,3)]-m3)'*([x3(i,1),x3(i,2),x3(i,3)]-m3);end;N1=200;N2=190;N3=210;N=N1+N2+N3;p1=N1/N;p2=N2/N;p3=N3/N;sw1=sw1/N1;sw2=sw2/N2;sw3=sw3/N3;sw=p1*sw1+p2*sw2+p3*sw3;sb=p1*(m1-m)'*(m1-m)+p2*(m2-m)'*(m2-m)+p3*(m3-m)'*(m3-m);s=inv(sw)*sb;j1=trace(s)eigs=eig(s)';eigsIndex=[1,2,3];%冒泡法排序,注意的是特征值顺序变化的同时要与相对应的下标同步for i=1:3for j=i:3if(eigs(i)eigstemp=eigs(i);eigs(i)=eigs(j);eigs(j)=eigstemp;eigsIndextemp=eigsIndex(i);eigsIndex(i)=eigsIndex(j);eigsIndex(j)=eigsIndextemp;end;end;end;%降序排列后的特征值,直接选取前L个特征SelectedFeature=[eigsIndex(1),eigsIndex(2)]%FSthrthrlrg.m程序结束6.5讨论从实验结果中我们可以看到y特征的分类能⼒最⼩,这⼀点可以从实验数据中得到验证——三类数据在y⽅向的分布⼏乎是相同的(见下图)。
MATLAB小波变换指令及其功能介绍(超级有用)(可编辑修改word版)
![MATLAB小波变换指令及其功能介绍(超级有用)(可编辑修改word版)](https://img.taocdn.com/s3/m/4dce532433687e21af45a9e0.png)
MATLAB 小波变换指令及其功能介绍1一维小波变换的 Matlab 实现(1)dwt 函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维DFT说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname'对信号 X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2)idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数 fft、fft2 和 fftn 分X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
2二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换(1)wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分ABSOL 是函数的控制参数(缺省值为 '1'),即: ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab 实现(2)dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
matlab小波包变换能量提取
![matlab小波包变换能量提取](https://img.taocdn.com/s3/m/7b7fe737ba68a98271fe910ef12d2af90242a890.png)
matlab小波包变换能量提取小波包变换是一种信号分析方法,可以将信号分解成不同频率的子信号。
在信号处理领域,能量提取是一项重要的任务,可以用来对信号的特征进行分析和识别。
本文将介绍如何使用Matlab进行小波包变换能量提取的方法。
我们需要了解小波包变换的基本原理。
小波包变换是一种多尺度分析方法,它通过将信号分解成不同频率的子信号来揭示信号的特征。
在小波包变换中,我们可以选择不同的小波基函数和不同的分解层数来得到不同频率的子信号。
然后,我们可以计算每个子信号的能量,以获取信号的特征信息。
在Matlab中,我们可以使用wavelet包来进行小波包变换能量提取。
首先,我们需要加载wavelet包,并选择一个适合的小波基函数和分解层数。
常用的小波基函数有haar、db、sym等,可以根据具体的应用场景选择合适的小波基函数。
分解层数的选择通常取决于信号的特征频率和带宽。
加载wavelet包后,我们可以使用wavedec函数对信号进行小波包分解。
该函数的输入参数包括信号、小波基函数、分解层数等。
分解后,我们可以使用wrcoef函数计算每个子信号的能量。
wrcoef函数的输入参数包括小波系数、小波基函数、分解层数等。
通过计算每个子信号的能量,我们可以得到信号的能量分布。
除了能量分布,我们还可以计算信号的总能量。
总能量可以通过对所有子信号的能量求和得到。
通过比较不同信号的总能量,我们可以分析信号之间的差异和相似性。
总能量也可以用来判断信号的强度和重要性。
在实际应用中,小波包变换能量提取可以应用于许多领域。
例如,在语音识别中,可以使用小波包变换能量提取来提取语音信号的特征,从而实现语音识别。
在图像处理中,可以使用小波包变换能量提取来提取图像的纹理特征,从而实现图像分类和识别。
在振动信号分析中,可以使用小波包变换能量提取来提取机械故障的特征,从而实现故障诊断和预测。
小波包变换能量提取是一种有效的信号分析方法,可以用来提取信号的特征信息。
小波脊线提取 matlab
![小波脊线提取 matlab](https://img.taocdn.com/s3/m/048d72f11b37f111f18583d049649b6649d70978.png)
小波脊线提取 matlab
小波变换是一种信号处理技术,用于分析信号的频率成分。
小波脊线提取是指在小波变换的基础上,通过寻找小波变换系数的局部极大值来识别信号中的脊线(ridge)。
在MATLAB中,可以使用小波变换工具箱来实现小波脊线提取。
首先,你需要确保安装了MATLAB的小波变换工具箱。
然后,你可以按照以下步骤在MATLAB中进行小波脊线提取:
1. 导入你的信号数据到MATLAB中。
2. 使用小波变换函数(如`cwt`)对信号进行小波变换。
你可以选择合适的小波基函数和尺度参数来进行变换。
3. 对小波变换后的系数进行局部极大值的寻找。
可以使用MATLAB中的函数(如`findpeaks`)来寻找局部极大值点。
4. 将找到的局部极大值点连接起来,形成脊线。
5. 可以根据应用的需要,对脊线进行进一步的处理和分析,比
如提取特征等。
需要注意的是,小波脊线提取是一个相对复杂的过程,需要根
据具体的信号和应用场景来选择合适的参数和方法。
此外,MATLAB
提供了丰富的工具和函数来辅助小波脊线提取的实现,你可以查阅MATLAB的文档和示例来获取更多帮助。
总之,小波脊线提取是小波变换在信号处理中的重要应用之一,通过MATLAB的小波变换工具箱,你可以比较方便地实现小波脊线提取,并对信号进行进一步的分析和处理。
希望这些信息能对你有所
帮助。
小波矩特征提取代码
![小波矩特征提取代码](https://img.taocdn.com/s3/m/27f92ef9fab069dc5022019f.png)
小波矩特征提取matlab代码分类:Image Recognition Matlab 2010-12-10 10:00 122人阅读评论(0) 收藏举报这是我上研究生时写的小波矩特征提取代码:%新归一化方法小波矩特征提取----------------------------------------------------------F=imread('a1.bmp');F=im2bw(F);F=imresize(F,[128 128]);%求取最上点for i=1:128for j=1:128if (F(i,j)==1)ytop=i;xtop=j;break;endendif(F(i,j)==1)break;endend%求取最下点for i=1:128for j=1:128if (F(129-i,j)==1)ybottom=129-i;xbottom=j;break;endendif(F(129-i,j)==1)break;endend%求取最左点for i=1:128for j=1:128if (F(j,i)==1)yleft=j;xleft=i;break;endendif(F(j,i)==1)break;endend%求取最右点for i=1:128for j=1:128if (F(j,129-i)==1)yright=j;xright=129-i;break;endendif(F(j,129-i)==1)break;endend%求取中心点x0=(xright-xleft)/2+xleft;y0=(ybottom-ytop)/2+ytop;x0=round(x0);y0=round(y0);%图像平移F=double(F);[M,N]=size(F);F1=zeros(M,N);M0=M/2;N0=N/2;for i=1:Mfor j=1:Nif F(i,j)==1F1(i+M0-y0,j+N0-x0)=1;endendend%figure,imshow(F1);%图像缩放max=0;for i=1:128for j=1:128if(F(i,j)==1)d=sqrt((i-y0)^2+(j-x0)^2);if(max<d)max=d;endendendend%max=round(max);a=200.0/(max*2);F2=imresize(F1,a);%figure,imshow(F2);%将所有图像均复制到500*500的图像的大小[M,N]=size(F2);m0=M/2;m0=round(m0);n0=N/2;n0=round(n0);f3=zeros(500,500);y1=round((500-M)/2);x1=round((500-N)/2);for i=1:Mfor j=1:Nif(F2(i,j)==1)f3(y1+i,x1+j)=1;endendend%figure,imshow(f3);%图像从笛卡儿坐标转换为极坐标------------------------------------------------------------ %角度间隔为2*pi/(128*128),128个像素长设为图像的单位圆半径%f1矩阵里面放着对应极半径和角度的值f1=zeros(128,16384);%直角坐标与极坐标建立起一一对应的关系for i=1:128for j=1:16384a=j*2*pi/16384.0;r=i;y=round(r*sin(a));x=round(r*cos(a));if (f3(250+x,250+y)==1)f1(i,j)=1;endendendF3=zeros(512,512);%将极坐标转换后的图像显示出来for i=1:128for j=1:16384if f1(i,j)==1a=j*2*pi/16384.0;x=round(i*cos(a));y=round(i*sin(a));F3(256+x,256+y)=1;endendendF3(256,256)=1;%figure,imshow(F3);%小波矩特征提取------------------------------------------------------------------- %进行角度积分得到Sq(r)------------------N=16384;Sq=zeros(128,4);for r=1:128for q=1:4for m=1:NSq(r,q)=(f1(r,m)*exp(-j*2.0*pi*(m-1)*(q-1)/N))+Sq(r,q);endSq(r,q)=1.0/N*Sq(r,q);endend%小波矩特征提取-------------------------x=3;a=0.697066;f0=0.409177;w=sqrt(0.561145);F1=zeros(3,9,4);tt=4*a^(x+1)/sqrt(2*pi*(x+1))*w;for q=1:4for m=1:3rr=2^m+1;for n=1:rrfor r=1:128%pp=2*(2^(m-1)*(r-1)/128.0-(n-1))-1;pp=2*(2^(m-1)*r/128.0-(n-1))-1;cc=cos(2*pi*f0*pp)*exp(-1.0*pp^2/(2*(w^2)*(x+1)));fan=2^((m-1)/2)*tt*cc;%Fmnq(m,n,q)=abs(Sq(r,q)*fan*(r-1)/128)+Fmnq(m,n,q);F1(m,n,q)=abs(Sq(r,q)*fan*r)+F1(m,n,q);endendendend。
matlab小波特征提取 -回复
![matlab小波特征提取 -回复](https://img.taocdn.com/s3/m/dabbc61776232f60ddccda38376baf1ffd4fe348.png)
matlab小波特征提取-回复Matlab小波特征提取在信号处理和机器学习中,特征提取是一个重要的步骤。
它允许我们从原始数据中提取有用的信息,并用于模式分析、分类、聚类等任务。
小波变换是一种常用的信号分析工具,可以提供时间—频率表示,因此广泛应用于特征提取任务中。
在本文中,我们将一步一步介绍如何利用Matlab进行小波特征提取。
第一步:加载信号数据我们首先需要加载我们要进行特征提取的信号数据。
假设我们有一个名为"signal.txt"的文本文件,其中包含我们要处理的信号数据。
我们可以使用Matlab的load函数来加载数据:matlabdata = load('signal.txt');现在,我们将信号数据存储在名为"data"的变量中,以便后续处理。
第二步:选择小波函数小波变换的一个关键方面是选择适当的小波函数。
Matlab提供了许多常见的小波函数,如haar、db、sym等。
我们可以使用wavemenu函数来浏览和选择适合我们问题的小波函数:matlabwavelet = wavemenu;此命令将打开一个小波选择菜单,您可以在其中选择合适的小波函数。
选择完毕后,Matlab将返回所选小波函数的名称。
第三步:进行小波变换一旦我们选择了适合的小波函数,我们可以使用wavedec函数进行小波变换。
这个函数使用指定的小波函数对信号进行分解,并返回小波系数和尺度:matlab[coefficients, scale] = wavedec(data, levels, wavelet);在上述代码中,"data"是我们加载的信号数据,"levels"是指定的分解级别,"wavelet"是我们选择的小波函数。
函数将返回小波系数和尺度作为输出。
第四步:提取特征在得到小波系数之后,我们可以从中提取特征。
matlab 特征提取 降维
![matlab 特征提取 降维](https://img.taocdn.com/s3/m/eaac38a94bfe04a1b0717fd5360cba1aa9118c77.png)
matlab 特征提取降维特征提取和降维是机器学习和模式识别中非常重要的一步,它们可以帮助我们从复杂的数据中提取出最具代表性的特征,并减少数据维度,提高算法的性能和效率。
在Matlab中,有许多功能强大的工具箱和函数可以用于特征提取和降维,本文将详细介绍其原理和应用。
1.特征提取特征提取是将原始数据转换为一组有意义且易于理解的特征的过程。
在机器学习和模式识别任务中,这些特征通常是数据中最有区分性和相关性的部分。
下面是一些常用的特征提取方法:1.1统计特征统计特征是从数据的统计分布中提取的。
例如,平均值、方差、标准差等都可以作为数据的统计特征。
在Matlab中,可以使用`mean`、`var`、`std`等函数来计算这些统计特征。
1.2傅里叶变换特征傅里叶变换是将信号从时域转换到频域的过程。
通过对信号进行傅里叶变换,可以提取出信号的频率特征。
在Matlab中,可以使用`fft`函数进行傅里叶变换,然后提取频域中的特征。
1.3小波变换特征小波变换是将信号从时域转换到时频域的过程。
它可以提供信号的时间和频率信息。
在Matlab中,可以使用`cwt`函数进行小波变换,然后提取时频域的特征。
1.4图像特征对于图像数据,可以使用各种图像处理算法来提取特征。
例如,边缘检测、角点检测、纹理分析等都可以作为图像的特征。
在Matlab 中,可以使用`edge`、`corner`、`texturefilt`等函数来提取这些图像特征。
1.5神经网络特征神经网络是一种强大的模式识别工具,可以通过学习数据的潜在规律来提取特征。
在Matlab中,可以使用`trainAutoencoder`和`encode`函数来训练和使用自编码器来提取数据的特征。
2.降维降维是将高维数据映射到低维空间的过程,可以减少数据的维度并保留最有代表性的特征。
常用的降维方法有以下几种:2.1主成分分析(PCA)PCA是一种经典的线性降维方法,通过找到原始数据中方差最大的方向来进行降维。
MATLAB小波变换指令及其功能介绍(超级有用)解读
![MATLAB小波变换指令及其功能介绍(超级有用)解读](https://img.taocdn.com/s3/m/48fc994c5bcfa1c7aa00b52acfc789eb172d9eb7.png)
MATLAB小波变换指令及其功能介绍(超级有用)解读MATLAB小波变换指令及其功能介绍1 一维小波变换的 Matlab 实现(1) dwt函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维DFT 说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数'wname'对信号X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。
(2) idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数 fft、fft2 和 fftn 分X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。
'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和Hi_R 经小波反变换重构原始信号 X 。
X=idwt(cA,cD,'wname',L) 和X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。
2 二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能---------------------------------------------------dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换----------------------------------------------------------- (1) wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分ABSOL 是函数的控制参数(缺省值为 '1'),即:ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab实现(2) dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。
matlab小波特征提取 -回复
![matlab小波特征提取 -回复](https://img.taocdn.com/s3/m/daaa3cb07d1cfad6195f312b3169a4517723e5d8.png)
matlab小波特征提取-回复Matlab小波特征提取小波变换是一种在信号处理中常用的技术,可以将信号在时域和频域之间进行转换。
在Matlab中,小波变换可以通过使用Wavelet Toolbox 来实现,该工具箱提供了一系列小波函数和工具,可以方便地进行小波分析和特征提取。
本文将详细介绍在Matlab中使用小波变换进行特征提取的方法和步骤。
我们将通过以下四个步骤来实现:1. 导入信号数据2. 选择合适的小波函数3. 进行小波分解4. 提取小波特征Step 1: 导入信号数据在Matlab中,我们可以使用`load`函数将信号数据从文件中导入到工作空间。
例如,如果信号数据保存在名为`signal_data.mat`的MAT文件中,我们可以使用以下代码将其导入:matlabload('signal_data.mat');导入信号数据后,我们可以使用`plot`函数来可视化信号,以便更好地了解其特征。
Step 2: 选择合适的小波函数在小波变换中,我们需要选择适合信号类型的小波函数。
Matlab的Wavelet Toolbox提供了一系列小波函数,如Daubechies、Haar、Coiflets等。
你可以根据你的信号类型和特征要求选择适当的小波函数。
例如,如果你的信号是离散的,并且你希望在分析中具有较好的低频和高频分辨率,那么Daubechies小波函数是一个不错的选择。
Step 3: 进行小波分解一旦你选择了适当的小波函数,就可以使用`wavedec`函数进行小波分解。
`wavedec`函数接受一个信号向量和小波函数作为输入,并返回小波系数和逼近系数。
matlab[coefficients, approximations] = wavedec(signal, level,'wname');其中,`signal`是输入信号,`level`是小波分解的层数,`wname`是选择的小波函数名称。
小波函数及Matlab常用指令
![小波函数及Matlab常用指令](https://img.taocdn.com/s3/m/7439b850974bcf84b9d528ea81c758f5f61f29ed.png)
小波包分析能够更全面地揭示信号的细节特征,对于非平稳信号的处理效果尤为突出。此 外,小波包分析还可以根据实际需求选择合适的小波基函数,从而更好地满足信号处理的 需求。
小波包分析的应用
小波包分析在信号处理、图像处理、语音识别等领域有着广泛的应用。例如,在信号处理 中,小波包分析可以用于信号去噪、特征提取、故障诊断等;在图像处理中,小波包分析 可以用于图像压缩、图像增强、图像恢复等。
信号的小波重构是将小波分解后的系数重新组合成原始信号的 过程。
02
在Matlab中,可以使用`waverec`函数对小波系数进行重构,该
函数可以根据小波分解的层次和系数重建原始信号。
小波重构的结果可以用于验证小波分解的正确性和完整性,以
03
及评估去噪等处理的效果。
信号的小波去噪
信号的小波去噪是一种利用小波 变换去除信号中噪声的方法。
小波函数及Matlab常用指 令
• 小波函数简介 • Matlab中小波函数的常用指令 • Matlab中信号的小波分析 • Matlab中小波变换的应用实例 • Matlab中小波函数的进阶使用
01
小波函数简介
小波函数的定义
小波函数是一种特殊的函数,其时间频率窗口均有限,具有良好的局部化 特性。
金融数据分类与聚类
利用小波变换的特征提取能力,可以对金融数据进行分类或聚类, 用于市场趋势预测等。
05
Matlab中小波函数的进阶使用
小波包分析
小波包分析
小波包分析是一种更为精细的信号分析方法,它不仅对信号进行频域分析,还对信号进行 时频分析。通过小波包分析,可以更准确地提取信号中的特征信息,为信号处理提供更全 面的数据支持。
THANKS
基于小波分析的特征信号提取的matlab程序.doc
![基于小波分析的特征信号提取的matlab程序.doc](https://img.taocdn.com/s3/m/6d92629703d276a20029bd64783e0912a2167ce6.png)
基于小波分析的特征信号提取的matlab程序%装入变换放大器输入输出数据%bf_150ms.dat为正常系统输出信号 %bf_160ms.dat为故障系统输出信号load bf_150ms.dat;load bf_160ms.dat;s1,bf_150ms(1:1000);%s1为正常信号 s2,bf_160ms(1:1000);%s2为故障信号 %画出正常信号与故障信号的原始波形tittle(“原始信号’);Ylabel('s1');subplot(922); plot(s2);title('故障信号');Ylabel('s2');%============================================%用dbl小波包对正常信号s1进行三层分解[t,d],wpdec(sl,3,'db','shannon'); %plontree(t)%画小波包树结构的图形 %下面对正常信号第三层各系数进行重构 %s130是指信号sl的[3,0]结点的重构系数;其他依次类推sl30,wprcoef(t,d,[3,0]);s13l,wprcoef(t,d,[3,1]);s132,wprcoef(t,d,[3,2]);sl33,wprcoef(t,d,[3,3]);sl34,wprcoef(t,d,[3,4]);s135,wprcoef(t,d,[3,5]);s136,wprcoef(t,d,[3,6]);s137,wprcoef(t,d,[3,7]);%画出至构系数的波形subplot(9,2,3); plot(s130); Ylabel('S130');subpolt(9,2,5); plot(s131); Ylabel('S13l');subplot(9,2,7); plot(s132); Ylabel('S132');subplot(9,2,9); plot(s133); Ylabel('S133');subplot(9,2,11);plot(s134); Ylabel('S134');subplot(9,2,13);plot(s135); Ylabel('S135');subplot(9,2,15);plot(s136); Ylabel('S136');subplot(9,2,17);plot(s137); Ylabel('S137');%-------------------------------------- %计算正常信号各重构系数的方差 %s10是指s130的方差,其他依此类推 s10,norm(sl30);sll,norm(s131);s12,norm(sl32);s13,norm(sl33);sl4,norm(s134);s15,norm(s135);s16,norm(sl36);s17,norm(sl37);%向量ssl是针对信号s1构造的向量 disp=('正常信号的输出向量')ssl,[sl0,s11,sl2,sl3,s14,s15,sl6,s17] %,,,,,,,,,,,,,,,,,,,,,,,,,,, %用db1小波包对故障信号s2进行三层分解[t,d]=wpdec(s2,3,'db1','shannon');%plottree(t)%画小波包树结构的图形 %s230是指信号S2的[3,0]结点的重构系数,其他以此类推s230=wprcoef(t,d,[3,0]);s231=wprcoef(t,d,[3,1]);s232=wprcoef(t,d,[3,2]);33=wprcoef(t,d,[3,3]); s2s234=wprcoef(t,d,[3,4]);s235=wprcoef(t,d,[3,5]);s236=wprcoef(t,d,[3,6]);s237=wprcoef(t,d,[3,7]);%画出重构系数的波形subplot(9,2,4);plot(s230); Ylabel('S230');subplot(9,2,6);plot(s231); Ylabel('S231');subplot(9,2,8);plot(s232); Ylabel('S232');subplot(9,2,10);plot(s233); Ylabel('S233');subplot(9,2,12);plot(s234); Ylabel('S234');subplot(9,2,14);plot(s235); Ylabel('S235');subplot(9,2,16);plot(s236); Ylabel('S236');subplot(9,2,18);plot(s237);Ylabel('S237');%----------------------------------------------------------%计算故障信号各重构系数的方差 %s20是指s230的方差,其他依次类推s20,norm(s230);s21,norm(s231);s22,norm(s232);s23,norm(s233);s24,norm(s234);s25,norm(s235);s26,norm(s236);s27,norm(s237);%向量ss2是针对信号S1构造的向量 disp('故障信号的输出向量') ss2=[s20,s21,s22,s23,s24,s25,s26,s27]。
整数小波变换的matlab程序
![整数小波变换的matlab程序](https://img.taocdn.com/s3/m/db67d146bfd5b9f3f90f76c66137ee06eff94e92.png)
整数小波变换的matlab程序整数小波变换的matlab程序是一种用于对信号进行分析和处理的工具。
它可以将连续的信号转化为离散的信号,以实现对信号的不同频率组分的提取和处理。
在本文中,我们将一步一步地介绍整数小波变换的Matlab 程序。
首先,我们需要明确整数小波变换的概念。
整数小波变换是一种将信号分解为不同频率下的子信号和低频近似部分的方法。
通过将信号与特定的小波基函数进行卷积,可以得到不同频率分量的系数。
整数小波变换不仅能够提取信号的频率信息,还能提供时间和频率的局部化。
在Matlab中实现整数小波变换,首先需要加载信号。
在这个例子中,我们将使用经典的ECG信号作为输入信号。
可以使用以下代码将ECG信号加载到Matlab环境中:load('ecg_data.mat');接下来,我们可以定义小波基函数。
在整数小波变换中,通常使用的小波基函数有Haar小波、Symlet小波和Daubechies小波。
在这个例子中,我们选择使用Daubechies小波,可以使用以下代码定义:wname = 'db4';接下来,我们需要将信号进行分解。
Matlab提供了一个名为`wavedec`的函数,可以用于对信号进行离散小波变换。
以下是分解信号的代码:[coeff, l] = wavedec(ecg_data, N, wname);在这个代码中,`wavedec`函数的第一个参数是输入信号,第二个参数是分解的层数N,第三个参数是小波基函数的名称。
`wavedec`函数将返回分解系数和信号的长度l。
接下来,我们可以提取不同频率分量的系数。
通过对分解系数进行适当的索引,可以得到不同频率分量的系数。
以下是提取不同频率系数的代码:cA = appcoef(coeff, l, wname, 1);cD1 = detcoef(coeff, l, 1);cD2 = detcoef(coeff, l, 2);在这个代码中,`appcoef`函数是用于提取低频近似系数的函数,`detcoef`函数是用于提取详细系数的函数。
使用MATLAB小波工具箱进行小波分析:
![使用MATLAB小波工具箱进行小波分析:](https://img.taocdn.com/s3/m/351c47f827fff705cc1755270722192e45365839.png)
使用MATLAB小波工具箱进行小波分析:如上图所示的小波分解过程,可以调用wfilters 来获得指定小波的分解和综合滤波器系数,例如:% Set wavelet name.wname = 'db5';% Compute the four filters associated with wavelet name given% by the input string wname.[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters(wname);subplot(221); stem(Lo_D);title('Decomposition low-pass filter');subplot(222); stem(Hi_D);title('Decomposition high-pass filter');subplot(223); stem(Lo_R);title('Reconstruction low-pass filter');subplot(224); stem(Hi_R);title('Reconstruction high-pass filter');xlabel('The four filters for db5')% Editing some graphical properties,% the following figure is generated.以上例子,得到’db5’小波的分解和综合滤波器系数,并显示出来。
下面是wfilters的具体用法:Wname 可指定为列表中的任意一种小波,直接调用[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('wname')会返回分解和综合滤波器系数。
如果只想返回其中的一些而不是全部,可以调用[F1,F2] = wfilters('wname','type')其中’type’可指定为4种类型,每种类型的具体意义详见matlab wfilters帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
y0=round(y0);
%图像平移
F=double(F);
[M,N]=size(F);
F1=zeros(M,N);
M0=M/2;
N0=N/2;
for i=1:M
for j=1:N
if F(i,j)==1
F1(i+M0-y0,j+N0-x0)=1;
end
end
end
F3(256,256)=1;
figure,imshow(F3);
%小波矩特征提取-------------------------------------------------------------------
%进行角度积分得到Sq(r)------------------
F1(m,n,q)=abs(Sq(r,q)*fan*r)+F1(m,n,q);
end
end
end
end
F1 Leabharlann max=d; end
end
end
end
%max=round(max);
a=200.0/(max*2);
F2=imresize(F1,a);
figure,imshow(F2);
%将所有图像均复制到500*500的图像的大小
%求取最上点
for i=1:128
for j=1:128
if (F(i,j)==1)
ytop=i;
xtop=j;
break;
end
end
if(F(i,j)==1)
break;
end
end
%求取最下点
for i=1:128
for j=1:128
if (F(129-i,j)==1)
ybottom=129-i;
xbottom=j;
break;
cc=cos(2*pi*f0*pp)*exp(-1.0*pp^2/(2*(w^2)*(x+1)));
fan=2^((m-1)/2)*tt*cc;
%Fmnq(m,n,q)=abs(Sq(r,q)*fan*(r-1)/128)+Fmnq(m,n,q);
for j=1:16384
if f1(i,j)==1
a=j*2*pi/16384.0;
x=round(i*cos(a));
y=round(i*sin(a));
F3(256+x,256+y)=1;
Sq(r,q)=1.0/N*Sq(r,q);
end
end
%小波矩特征提取-------------------------
x=3;
a=0.697066;
f0=0.409177;
w=sqrt(0.561145);
F1=zeros(3,9,4);
tt=4*a^(x+1)/sqrt(2*pi*(x+1))*w;
[M,N]=size(F2);
m0=M/2;
m0=round(m0);
n0=N/2;
n0=round(n0);
f3=zeros(500,500);
y1=round((500-M)/2);
x1=round((500-N)/2);
for i=1:M
for j=1:N
if(F2(i,j)==1)
N=16384;
Sq=zeros(128,4);
for r=1:128
for q=1:4
for m=1:N
Sq(r,q)=(f1(r,m)*exp(-j*2.0*pi*(m-1)*(q-1)/N))+Sq(r,q);
end
x=round(r*cos(a));
if (f3(250+x,250+y)==1)
f1(i,j)=1;
end
end
end
F3=zeros(512,512);
%将极坐标转换后的图像显示出来
for i=1:128
function tezhengtiqu
%新归一化方法小波矩特征提取----------------------------------------------------------
F=imread('a1.bmp');
F=im2bw(F);
F=imresize(F,[128 128]);
end
end
if(F(129-i,j)==1)
break;
end
end
%求取最左点
for i=1:128
for j=1:128
if (F(j,i)==1)
yleft=j;
xleft=i;
break;
end
end
if(F(j,i)==1)
break;
end
end
%求取最右点
for i=1:128
for j=1:128
if (F(j,129-i)==1)
yright=j;
end
end
end
figure,imshow(F1);
%图像缩放
max=0;
for i=1:128
for j=1:128
if(F(i,j)==1)
d=sqrt((i-y0)^2+(j-x0)^2);
if(max<d)
for q=1:4
for m=1:3
rr=2^m+1;
for n=1:rr
for r=1:128
%pp=2*(2^(m-1)*(r-1)/128.0-(n-1))-1;
pp=2*(2^(m-1)*r/128.0-(n-1))-1;
%f1矩阵里面放着对应极半径和角度的值
f1=zeros(128,16384);
%直角坐标与极坐标建立起一一对应的关系
for i=1:128
for j=1:16384
a=j*2*pi/16384.0;
r=i;
y=round(r*sin(a));
xright=129-i;
break;
end
end
if(F(j,129-i)==1)
break;
end
end
%求取中心点
x0=(xright-xleft)/2+xleft;
y0=(ybottom-ytop)/2+ytop;
f3(y1+i,x1+j)=1;
end
end
end
figure,imshow(f3);
%图像从笛卡儿坐标转换为极坐标------------------------------------------------------------
%角度间隔为2*pi/(128*128),128个像素长设为图像的单位圆半径