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

一、相关理论

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)thT1).*mask);        res = min(dark,bright)thGeo2; else        res = 0; end end[+wx  matlab56,讨论技术问题]   

 

三、结果展示

MATLAB图像处理---计算角点算法SUSAN算子_第1张图片

你可能感兴趣的:(matlab,图像处理,算法,matlab)