matlab 小波边缘检测,Matlab关于小波边缘检测

%clear all;

clear ;

X=imread('010256.PNG');

%load ddd;

subplot(1,2,1);

imshow(X);

title('原图象');

clear coef1;

clear coef2;

clear coef3;

clear form;

x=X;

x=double(x);

line=256;

column=256;

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

%正值1,负值0的矩阵temp表示(突变点左位置)

max=0;

max_loc=0;

max_num=15;

for i=1:line

j=1;

while j

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%if

end%for

if max>max_num

form(i,max_loc)=1;

end%if

j=k;

max=0;

break;

end%if

end %for k

if k==column-1

j=column-1;

end%if

else

j=j+1;

end %if

end %while

end

%for i=1:line

%    for j=1:column

%        if abs(coef1(i,j))>=2*abs(coef2(i,j)) %是否加绝对值?

%           form(i,j)=0;%第一种方法去噪声

%        end

%    end

%end

%对列作小波变换

x=ctranspose(x); %对x进行转置,即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

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

end

%包括噪声在内的所有极值点①

%for i=1:line

%    for j=1:column

%        if abs(coef1(i,j))>=2*abs(coef2(i,j)) %是否加绝对值?!

%           form(i,j)=0;%第一种方法去噪声

%        end

%    end

%end

%此处添加用第二种方法去噪!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!② 结束

for 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

%****************************************

%链长为2

%0000

%0110

%0000

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

%000

%010

%010

%000

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

%0000

%0100

%0010

%0000

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

%0000

%0010

%0100

%0000

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

end

%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!

max=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

end

subplot(1,2,2);

imshow(form);

title('边缘图象');

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值