Ⅰ 求matlab小波变换图像处理实现程序~

把图像发过来,我帮你处理。

Ⅱ 泪求matlab 离散二维小波变换的程序

程序是下面这样,但只能处理长宽一样的方形图像,灰度和彩色图像都可,要用其他图像只需把Lena.bmp改为其他图像,但图像要保存在m文件所在路径下。下面还有一个运行后的图像(之一),希望能对你有所帮助。

clear;clc;

%%%%%%%%%%测试图像只能是方形图像,长宽像素一样。

f=imread('Lena.bmp');%%读取图像数据,图像只能保存在m文件所在的路径下

d=size(f);

iflength(d)>2

f=rgb2gray((f));%%%%%%%%如果是彩色图像则转化为灰度图

end

T=d(1);

SUB_T=T/2;

%2.进行二维小波分解

l=wfilters('db10','l');%db10(消失矩为10)低通分解滤波器冲击响应(长度为20)

L=T-length(l);

l_zeros=[l,zeros(1,L)];%矩阵行数与输入图像一致,为2的整数幂

h=wfilters('db10','h');%db10(消失矩为10)高通分解滤波器冲击响应(长度为20)

h_zeros=[h,zeros(1,L)];%矩阵行数与输入图像一致,为2的整数幂

fori=1:T;%列变换

row(1:SUB_T,i)=dyaddown(ifft(fft(l_zeros).*fft(f(:,i)'))).';%圆周卷积<->FFT

row(SUB_T+1:T,i)=dyaddown(ifft(fft(h_zeros).*fft(f(:,i)'))).';%圆周卷积<->FFT

end;

forj=1:T;%行变换

line(j,1:SUB_T)=dyaddown(ifft(fft(l_zeros).*fft(row(j,:))));%圆周卷积<->FFT

line(j,SUB_T+1:T)=dyaddown(ifft(fft(h_zeros).*fft(row(j,:))));%圆周卷积<->FFT

end;

decompose_pic=line;%分解矩阵

%图像分为四块

lt_pic=decompose_pic(1:SUB_T,1:SUB_T);%在矩阵左上方为低频分量--fi(x)*fi(y)

rt_pic=decompose_pic(1:SUB_T,SUB_T+1:T);%矩阵右上为--fi(x)*psi(y)

lb_pic=decompose_pic(SUB_T+1:T,1:SUB_T);%矩阵左下为--psi(x)*fi(y)

rb_pic=decompose_pic(SUB_T+1:T,SUB_T+1:T);%右下方为高频分量--psi(x)*psi(y)

%3.分解结果显示

figure(1);

subplot(2,1,1);

imshow(f,[]);%原始图像

title('originalpic');

subplot(2,1,2);

image(abs(decompose_pic));%分解后图像

title('decomposedpic');

figure(2);

%colormap(map);

subplot(2,2,1);

imshow(abs(lt_pic),[]);%左上方为低频分量--fi(x)*fi(y)

title('Phi(x)*Phi(y)');

subplot(2,2,2);

imshow(abs(rt_pic),[]);%矩阵右上为--fi(x)*psi(y)

title('Phi(x)*Psi(y)');

subplot(2,2,3);

imshow(abs(lb_pic),[]);%矩阵左下为--psi(x)*fi(y)

title('Psi(x)*Phi(y)');

subplot(2,2,4);

imshow(abs(rb_pic),[]);%右下方为高频分量--psi(x)*psi(y)

title('Psi(x)*Psi(y)');

%5.重构源图像及结果显示

%construct_pic=decompose_matrix'*decompose_pic*decompose_matrix;

l_re=l_zeros(end:-1:1);%重构低通滤波

l_r=circshift(l_re',1)';%位置调整

h_re=h_zeros(end:-1:1);%重构高通滤波

h_r=circshift(h_re',1)';%位置调整

top_pic=[lt_pic,rt_pic];%图像上半部分

t=0;

fori=1:T;%行插值低频

if(mod(i,2)==0)

topll(i,:)=top_pic(t,:);%偶数行保持

else

t=t+1;

topll(i,:)=zeros(1,T);%奇数行为零

end

end;

fori=1:T;%列变换

topcl_re(:,i)=ifft(fft(l_r).*fft(topll(:,i)'))';%圆周卷积<->FFT

end;

bottom_pic=[lb_pic,rb_pic];%图像下半部分

t=0;

fori=1:T;%行插值高频

if(mod(i,2)==0)

bottomlh(i,:)=bottom_pic(t,:);%偶数行保持

else

bottomlh(i,:)=zeros(1,T);%奇数行为零

t=t+1;

end

end

这个只是一级分解,matlab自带的函数可以实现多级分解,级数由编程者自己确定。

是的,是一样的。

Ⅲ 求matlab的Morlet小波变换代码……谢谢。需要得到如下结果图。

小波分析后,你也没处理,组合起来依然是原信号啊。方差不会变的。你用连续小波变换,得到了1:43尺度下的小波基系数组z(i)。如果你指的是在一定分辨率下,该信号在某个尺度上投射的分量的方差。就用z(i)乘以这个小波φ(τ,σ)基。在用STD求方差呗。

Ⅳ 关于小波变换的Matlab编程

这是一个带参数的函数 根据下面的参数校验可以看出你应该是直接点运行了吧 所以报错了
你至少应该产生一个输入信号,比如一个正弦信号来做输入进行变换
。。。谁给你的程序啊 这bug也太多了 很多低级bug 我只是改的能运行了
function [WT,FreqBins,Scales]=CWT_Morlet(Sig,WinLen,nLevel)
%continuous Wavelet Transform using Morlet function
%Sig:信号
%WinLen:小波函数在尺度参数a=1时的长度(默认为10)
%nLevel:频率轴划分区间段(默认为1024)
%
%WT:返回的小波变换计算结果
%FreqBins:返回频率轴划分结果(归一化频率,最高频率为0.5)
%Scales:返回与频率轴划分值相对应的尺度划分(频率0.5对应的尺度为1)
if (nargin==0),
error('At least 1 parameter required!');
end;

if (nargin<3),
nLevel=1024;
end
if (nargin<2),
WinLen=10;
end
Sig=hilbert(real(Sig));%计算信号的解析信号
SigLen=length(Sig);%获取信号的长度
fmax=0.5;%设置最高分析频率
fmin=0.005;%设置最低分析频率
FreqBins=logspace(log10(fmin),log10(0.5),nLevel);%将频率轴在分析范围内等
%对数坐标划分
Scales=fmax*ones(size(FreqBins))./FreqBins;%计算响应的尺度参数
omg0=WinLen/6;
WT=zeros(nLevel,SigLen);%分配计算结果的存储单元
wait=waitbar(0,'Under calculation,please wait');
for m=1:nLevel,
waitbar(m/nLevel,wait);
a=Scales(m);%提取尺度参数
t=-round(a*WinLen):1:round(a*WinLen);
Mor1=pi^(-1/4)*exp(1i*2*pi*0.5*t/a).*exp(-t.^2/2/(2*omg0*a)^2);
%计算当前尺度下的小波函数
temp=conv(Sig,Mor1)/sqrt(a); %计算信号与小波函数的卷积
WT(m,:)=temp(round(a*WinLen)+1:length(temp)-round(a*WinLen));
end;
close(wait);
WT=WT/WinLen;

%%%%%%运行示例%%%%%%%%%
Fs=100;
t=0:1/Fs:2*pi;
sig=sin(t);
[WT,FreqBins,Scales]=CWT_Morlet(sig);

Ⅳ 怎样用MATLAB程序实现小波变换

[YC,YS]=wavedec2(Y,2,'db1');
Y为要分解的图像矩阵,2为分解的层数,‘db1'为采用的小波基
返回两个矩阵YC和YS。Yh2=detcoef2('h',YC,YS,2);这是提取出图像2层分解后的水平分量,h改v是垂直分量,h该d是对角分量。细节分量用另外一个方法提取。

Ⅵ 离散小波变换matlab程序

小波变换图象粒子聚焦matlab程序
http://www.google.cn/search?hl=zh-cn&rlz=1i7gzaz_zh-cn&newwindow=1&ei=8iubsozuczwvkawewvgudw&sa=x&oi=spell&resnum=0&ct=result&cd=1&q=%e5%b0%8f%e6%b3%a2%e5%8f%98%e6%8d%a2%e5%9b%be%e5%83%8f%e7%b2%92%e5%ad%90%e8%81%9a%e7%84%a6matlab%e7%a8%8b%e5%ba%8f&spell=1

希望对你有用

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

举个例子,希望有所帮助。clc;clearall;closeall;X=rgb2gray(imread('lena.jpg'));x=X;x=double(x);line=250;column=250;J=6;Tu=7;smooth_area_num=20;edge_area_num=40;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');endmax=0;max_loc=0;max_num=15;fori=1:linej=1;whilej0&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=m;endendifmax>max_numform(i,max_loc)=1;endj=k;max=0;break;endend%forkifk==column-1j=column-1;endelsej=j+1;end%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=0;max_loc=0;fori=1:linej=1;whilej0&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=m;endendifmax>max_numform(max_loc,i)=1;endj=k;max=0;break;endend%forkifk==column-1j=column-1;endelsej=j+1;end%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)=0;form(i,j+1)=0;endifform(i,j)==1&form(i+1,j)==1&sum(sum(form(i-1:i+2,j-1:j+1)))==2form(i,j)=0;form(i+1,j)=0;endifform(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)=0;form(i+1,j+1)=0;endifsum(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)=0;form(i+1,j+1)=0;endendifform(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)=0;form(i+1,j)=0;endifsum(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)=0;form(i+1,j)=0;endendendendmax=0;fori=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)=0;endendendendendfigure;imshow(form,[]);

Ⅷ 【求助】求matlab小波变换图像处理实现程序~

%这个是2D-DWT的函数,是haar小波

%c是图像像素矩阵steps是变换的阶数

functiondwtc=dwt_haar(c,steps)

%DWTC=CWT_HARR(C)-

%

%MDPlumbleyNov2003

N=length(c)-1;%Maxindexforfilter:0..N

%Ifnostepstodo,orthesequenceisasinglesample,theDWTisitself

if(0==N|steps==0)

dwtc=c;

return

end

%CheckthatN+1isdivisibleby2

if(mod(N+1,2)~=0)

disp(['Notdivisible2:'num2str(N+1)]);

return

end

%SettheHaaranalysisfilter

h0=[1/21/2];%HaarLow-passfilter

h1=[-1/21/2];%HaarHigh-passfilter

%Filterthesignal

lowpass_c=conv(h0,c);

hipass_c=conv(h1,c);

%Subsamplebyfactorof2andscale

c1=sqrt(2)*lowpass_c(2:2:end);

d1=sqrt(2)*hipass_c(2:2:end);

%Recursivelycalldwt_haaronthelow-passpart,with1fewersteps

dwtc1=dwt_haar(c1,steps-1);

%ConstructtheDWTfromc1andd1

dwtc=[dwtc1d1];

%Done

return

--------------------------分割线--------------------------

调用这个函数的例子下面的东西放在另一个文档里

读入一个图像‘lena’应该是个最基础的图像了~

之后分别作0阶和1阶2D-DWT的变换

改变阶数可以做更高阶的

clearall

im=imreadreal('lena.bmp');%readimagedata

%Plot

figure

dwt2_step0=dwt2_haar(im,0);%2DDWTstep=0

imagesc(dwt2_step0);

colormapgray;

axisimage;

figure

dwt2_step1=dwt2_haar(im,1);%2DDWTstep=1

imagesc(dwt2_step1);

colormapgray;

axisimage;

---------------------分割线---------------------

结果如下1阶的结果

这是我的一个实验希望有所帮助

Ⅸ 跪求 用matlab程序编写‘基于小波变换的图像边缘检测’ 要两种程序对照的 两种方法 谢谢

举个例子,希望有所帮助。clc; clear all; close all;
X=rgb2gray(imread('lena.jpg'));
x=X;
x=double(x);
line=250;
column=250;
J=6;
Tu=7;
smooth_area_num=20;
edge_area_num=40;
for i=1:line
coef1(i,:)=cwt(x(i,:),1,'bior4.4');
coef2(i,:)=cwt(x(i,:),2,'bior4.4');
coef3(i,:)=cwt(x(i,:),J,'bior4.4');
end
max=0;
max_loc=0;
max_num=15;
for i=1:line
j=1;
while j<column-1

if (coef3(i,j)>0 & coef3(i,j+1)<0) | (coef3(i,j)<0 & coef3(i,j+1)>0 )%找到左位置j
for k=j+1:column-1

if coef3(i,k)*coef3(i,j)>=0%找到右位置k
for m=j:k
if abs(coef3(i,m))>max
max=abs(coef3(i,m));
max_loc=m;
end
end
if max>max_num
form(i,max_loc)=1;
end
j=k;
max=0;
break;
end
end%for k
if k==column-1
j=column-1;
end
else
j=j+1;
end%if
end%while
end%对列作小波变换
x=x';
for i=1:line
coef1(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=0;
max_loc=0;
for i=1:line
j=1;
while j<column-1

if (coef3(i,j)>0 & coef3(i,j+1)<0) | (coef3(i,j)<0 & coef3(i,j+1)>0 )%找到左位置j
for k=j+1:column-1

if coef3(i,k)*coef3(i,j)>=0%找到右位置k
for m=j:k
if abs(coef3(i,m))>max
max=abs(coef3(i,m));
max_loc=m;
end
end
if max>max_num
form(max_loc,i)=1;
end
j=k;
max=0;
break;
end
end%for k
if k==column-1
j=column-1;
end
else
j=j+1;
end%if
end%while
endfor i=2:line-2
for j=2:column-2
%链长为1
if form(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)==0
form(i,j)=0;%
end

if form(i,j)==1 & form(i,j+1)==1 & sum(sum(form(i-1:i+1,j-1:j+2)))==2
form(i,j)=0;
form(i,j+1)=0;
end if form(i,j)==1 & form(i+1,j)==1 & sum(sum(form(i-1:i+2,j-1:j+1)))==2
form(i,j)=0;
form(i+1,j)=0;
end if form(i,j)==1 & form(i+1,j+1)==1 & sum(sum(form(i:i+1,j:j+1)))==2
if sum(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)=0;
form(i+1,j+1)=0;
end
if sum(sum(form(i-1:i+2,j-1:j+2)))==4 & form(i-1,j+2)==1 & form(i+2,j-1)==1
form(i,j)=0;
form(i+1,j+1)=0;
end
end if form(i,j+1)==1 & form(i+1,j)==1 & sum(sum(form(i:i+1,j:j+1)))==2
if sum(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)=0;
form(i+1,j)=0;
end
if sum(sum(form(i-1:i+2,j-1:j+2)))==4 & form(i-1,j-1)==1 & form(i+2,j+2)==1
form(i,j+1)=0;
form(i+1,j)=0;
end
end
end
endmax=0;
for i=3:line-3
for j=3:column-3
s=sum(sum(form(i-2:i+2,j-2:j+2)));
for m=i-2:i+2
for n=j-2:j+2
if s>=7 & abs(coef3(m,n))<=s*3
form(m,n)=0;
end
end
end
end
endfigure;
imshow(form, []);

Ⅹ 小波变换的matlab程序: wavename='cmor5-2';

嗯,照道理是没有固定单位滴,小波分析用的是相对概念,即要根据原始信号频率换算,如何设置参数从原理上都是合理的,就看你需要分析哪些特征,多试几次,选择结果好的就行。