matlab练习程序(SUSAN检测)

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

  主要思想就是:首先做一个和原图像等大的目标图像。然后用一个圆形的模板,用模板去遍历原图像每个像素,把模板内的每个像素都和模板中心像素比较,如果灰度小于一个阈值,那么就对目标图像当前和原图像相同位置的像素加一,直到结束。目标图像中在原图像是角点的位置就会取局部极小,所以做一个反向的相减。img=max(img)-img,if img<g,这里的g也是自己给定的阈值,我这里取了2*max(img)/3这样的阈值,g越大,得到的点就越多。这步之后角点的值就成为局部极大了。最后进行非极大抑制,去除一些杂点就行了。

代码如下:

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))<t %判断灰度是否相近,t是自己设置的
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)<g
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);

后两幅比第一幅小,我没进行边缘扩展。

原图

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

最后结果

最新文章

  1. T2 Func&lt;in T1,out T2&gt;(T1 arg)
  2. Android Fragment学习笔记(二)----Fragment界面添加和管理
  3. SSH使用教程( Bitvise Tunnelier+Chrome+Proxy Switchy)
  4. 【pyQuery分析实例】分析体育网冠军联盟比赛成绩
  5. java-pfx文件转换成16进制内容
  6. 慕课网-安卓工程师初养成-3-8 Java中的条件运算符
  7. struts2在web.xml中配置详情
  8. python turtle,random,math
  9. LogMaster4Net
  10. c++(hash表)
  11. Linux exec与文件描述符
  12. Vim配置及使用技巧
  13. jdk 动态代理源码分析
  14. (暴力求解)Encoding HDU1020
  15. 自动化测试系列:自动化测试KPI考评的一种方法
  16. 063 日志分析(pv  uv  登录人数  游客人数  平均访问时间  二跳率  独立IP)
  17. idea上将项目上传到github
  18. JAVA中的CountDownLatch、CyclicBarrier、Semaphore的简单测试
  19. 制作MacOS 系统启动盘
  20. NLTK和Stanford NLP两个工具的安装配置

热门文章

  1. hdu2476 String painter(区间dp)
  2. hdu1159 最长公共子序列
  3. DSP using MATLAB示例 Example3.5
  4. IComparer 指定排序。
  5. ASCIL码和字符的转换
  6. Codeforces Round #345 (Div. 2)
  7. BFS(判断状态) HDOJ 3533 Escape
  8. LIS(n^2) POJ 2533 Longest Ordered Subsequence
  9. js点击a链接弹出alert对话框
  10. regex: add quote for words in Notepad++