matlab susan滤波,matlab练习程序(SUSAN检测)

SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny。不过思想还是有点意思的。

主要思想就是:首先做一个和原图像等大的目标图像。然后用一个圆形的模板,用模板去遍历原图像每个像素,把模板内的每个像素都和模板中心像素比较,如果灰度小于一个阈值,那么就对目标图像当前和原图像相同位置的像素加一,直到结束。目标图像中在原图像是角点的位置就会取局部极小,所以做一个反向的相减。img=max(img)-img,if img

代码如下:

clear all;

close all;

clc;

img=imread('i.jpg');

img=rgb2gray(img);

imshow(img);

[m n]=size(img);

img=double(img);

t=45; %模板中心像素灰度和周围灰度差别的阈值,自己设置

usan=[]; %当前像素和周围在像素差别在t以下的个数

%这里用了37个像素的模板

for i=4:m-3 %没有在外围扩展图像,最终图像会缩小

for j=4:n-3

tmp=img(i-3:i+3,j-3:j+3); %先构造7*7的模板,49个像素

c=0;

for p=1:7

for q=1:7

if (p-4)^2+(q-4)^2<=12 %在其中筛选,最终模板类似一个圆形

% usan(k)=usan(k)+exp(-(((img(i,j)-tmp(p,q))/t)^6));

if abs(img(i,j)-tmp(p,q))

c=c+1;

end

end

end

end

usan=[usan c];

end

end

g=2*max(usan)/3; %确定角点提取的数量,值比较高时会提取出边缘,自己设置

for i=1:length(usan)

if usan(i)

usan(i)=g-usan(i);

else

usan(i)=0;

end

end

imgn=reshape(usan,[n-6,m-6])';

figure;

imshow(imgn)

%非极大抑制

[m n]=size(imgn);

re=zeros(m,n);

for i=2:m-1

for j=2:n-1

if imgn(i,j)>max([max(imgn(i-1,j-1:j+1)) imgn(i,j-1) imgn(i,j+1) max(imgn(i+1,j-1:j+1))]);

re(i,j)=1;

else

re(i,j)=0;

end

end

end

figure;

imshow(re==1);

0818b9ca8b590ca3270a3433284dd417.png

原图

0818b9ca8b590ca3270a3433284dd417.png

未进行非极大抑制,似乎就是边缘了

0818b9ca8b590ca3270a3433284dd417.png

进行极大值抑制后的最后的结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值