MATLAB图像处理---计算角点算法SUSAN算子

10 篇文章 3 订阅
10 篇文章 0 订阅

一、相关理论

SUSAN的全名是:(Smallest Univalue Segment Assimilating Nucleus)。它是一种很有特色高效的边缘和角点检测算子,它不仅可以检测图像目标的边界点,而且能够较Robust地检测目标的角点。并且具有结构保留的降噪功能。

阈值的分析

在角点检测中,有两种类型的阈值,一种用来约束角点的数量,另一种用来约束角点的质量。当然,一个阈值不能完全做到只影响质量或数量,只是会有一个侧重点。那么,SUSAN中的两个阈值t和g在角点检测中起到一个什么样的作用呢?很明显,阈值g是角点质量的。尽管也会影响数量,但是相对来说更侧重于影响质量(角点的形状)。例如,g值减小,那么SUSAN会更加侧重于检测到更加“尖锐”的角点。所以,可以更加自己的实际需求来确定阈值g。而阈值t,是角点的数量。当t减小时,会检测到更多的角点。所以,阈值t可以在不影响角点质量的情况下,控制检测到的角点的数量。在大多数情况下,设t为25比较合适,如果图像的对比度比较低,可以修改t值以适应变化。

通过上面对a、b、c、d、e等几个圆形模板的SUSAN值的分析,当模板的中心位于角点处时SUSAN的值最小。

SUSAN算子检测角点的步骤:

利用圆形模板遍历图像,计算每点处的SUSAN值。

设置一阈值g,一般取值为1/2(Max(n), 也即取值为SUSAN最大值的一半,进行阈值化,得到角点响应。

使用非极大值抑制来寻找角点。

通过上面的方式得到的角点,存在很大伪角点。为了去除伪角点,SUSAN算子可以由以下方法实现:

计算SUSAN区域的重心,然后计算重心和模板中心的距离,如果距离较小则不是正确的角点;

判断SUSAN区域的重心和模板中心的连线所经过的像素都是否属于SUSAN区域的像素,如果属于那么这个模板中心的点就是角点。

 

二、程序

寻找角点

% 运用两个阈值在边缘点中找出角点 thGeo = (nnz(mask)-1)*0.2; thGeo1 = (nnz(mask)-1)*0.4; thGeo2 = (nnz(mask)-1)*0.4; thT = 0.07; thT1 = 0.04; % 读取img第一维的大小,这里为7 sz = size(img,1); % 构建7*7模板,模板像素值均为img中心点的像素大小 usan = ones(sz)*img(round(sz/2),round(sz/2)); % 判断像素相似性,如果相似,则将similar数组此位置置1 similar = (abs(usan-img)<thT); % 将7*7的方形similar模板转换为37像素的圆形模板 similar = similar.*mask; % 计算相似像素总数 res = sum(similar(:)); % 如果相似像素的个数小于阈值thGeo,则有可能是角点、边界点或噪声点 if res < thGeo        % 判断是否为角点        dark = nnz((img-usan<-thT1).*mask);        bright = nnz((img-usan>thT1).*mask);        res = min(dark,bright)<thGeo1 && max(dark,bright)>thGeo2; else        res = 0; end end[+wx  matlab56,讨论技术问题]   

 

三、结果展示

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值