摘 要 针对SUSAN算子只采用固定阈值和定位不够精确的问题,本文利用角点像素与其所在的角之间具有连通性的特点,给出了一种角点精确定位的改进方法,并采用了自适应阈值,在图像中每个像素的 SUSAN 模板内单独计算阈值 t,使其在各种不同的对比度下仍能正确提取出角点。实验结果证明了该方法的有效性。
关键词 SUSAN 算法;角点提取;自适应阈值;图像连通性
1 引言
角点是图像上曲率足够高、并且位于图像中不同亮度区域交界处的点。由于角点包含了很多的图像中的信息,因此,角点在图像匹配、运动物体的跟踪以及目标识别等方面有着广泛的应用。如何快速准确的提取出图像中的角点成为了一个关键的问题。
SUSAN算法是由英国牛津大学的Brady首先提出的,它是一种直接利用图像灰度有效地进行边缘、角点检测的低层次图像处理算法。它具有方法简单,抗噪能力强和处理速度快等特点。本文首先介绍SUSAN角点提取的原理,然后分析了该算法的缺点,提出SUSAN模板中自适应阈值的选取的方法,并利用角点像素与其所在的角之间具有连通性的特点,给出了一种角点精确定位的改进方法。
2 SUSAN算法的基本原理[1]
图1显示了一个在白色背景下的黑色的长方形,图中a,b,c,d,e五个位置分别是五个圆形的模板在图像中不同的位置,窗口的中心被称之为“核”。窗口中所有具有与核相同或相似灰度的像素,把这些像素构成的区域称为USAN ( Univalue Segment Assimilating Nucleus)。由图1可以看出,当核像素处在图像中的灰度一致区域时,USAN的面积会达到最大(超过一半),当核处在直边缘处约为最大值的一半,当核处在角点处更小,约为最大值的四分之一。因此,利用USAN面积的上述变化性质可检测边缘或角点。
图1 SUSAN模板在图像中的几种位置
本文所使用的是一个包含37个像素的圆形模板,半径为3.4个像素,如图2。为了提取出边缘,需要将模板内每个像素的灰度与模板中心的灰度进行比较,式(1)为相似比较函数:
(1)
式中:(x,y) 和(x0,y0) 分别是模板中心点和模板中其它点的坐标,c(x0,y0;x,y) 为比较的结果,f(x,y) 为该点的亮度值,t为灰度差阈值,一般取25。USUAN区域的大小可以由式(2)给出:
然后,由式(3)可以得到图像的初始角点响应,取响应的局部最大值作为角点。式中g为几何阈值。在用SUSAN算法进行边缘提取的时候通常取 ,在进行角点提取的时候,通常取 。一般而言,对于g不需要通过调整就能取得较好的效果。
(2)
(3)
由式(3)得到的角点初始响应符合 SUSAN 原理,即 USAN 区域越小,初始角点响应越大,这样便对图像中的角点信息进行了增强。
图2 包括37个像素的SUSAN圆形模板
3 改进的 SUSAN 角点提取算法
对SUSAN算法进行改进的实现,主要考虑到两方面:对于不同对比度和噪声情况的图像,SUSAN算法中阈值t的选取不同,因此门限的取值不应该依赖于人为的干涉,而应根据不同条件自动给出最优值,即自适应选取阈值t ;针对在角点检测时定位不够精确,容易出现角点偏移和错误判断的情况,采用图像连通性的概念解决问题。
3.1 自适应阈值t的选取
在SUSAN算法中,对于对比度较好的图像,阈值t的选取要很大;对于对比度较小或要得到图像对于每个像素的SUSAN模板,通过计算模板内每个像素与中心像素的灰度差得到该模板的灰度差直方图,然后根据灰度差直方图通过迭代法确定该模板的阈值t,使得根据不同条件自动给出最优值t 。
第一步是确定初始值To。计算模板中每点与中心点的灰度差阈值,然后取灰度差值的均值为迭代初始值To,如式(4):
(4)
第二步是计算出迭代值 。根据迭代初值将灰度差直方图分为两部分,由式(5)计算下一个迭代值 :
(5)
式(5)中m为模板中像素点和中心像素点的灰度差值,h(m)为模板中具有该灰度差值的点的数量,Cmax 为灰度差值的最大值。每次迭代后进行判断,若一 Ti+1-Ti=0,那么停止迭代,取Ti+1作为最后的SUSAN模板的灰度差阈值。
3.2 对虚假点的筛选
通过SUSAN算法检测出来的点不都是角点,还包括一些离角点很近的点以及由噪声引起的USAN区域分散的假特征点。本文将在这方面做一些工作,不仅对错误匹配的角点判断,而且对其进行更进一步的精确化的操作,将错误匹配的点移至精确定位处。
综合以上分析,本文打算采用的一个方法:根据图像连通性的概念,我们可以认为,如果图像中的某一点是角点,那么可以发现,在以它为核点所计算的灰度差窗口中,该角点与其所在的角区域必定存在某种意义上的连通性。也就是说,在核点的8-邻域中,必定是有与其值相同的连续点存在的。
这样,我们可以通过对核点的8-邻域中的点按一定的顺序编号(顺时针或者逆时针),判断是否有连续值的点,来确定核点是不是真正的角点。通过计算灰度差计算,可以得到下
图3 经过灰度差计算的窗口
在以(x0,y0) 为核心区域的3×3 的窗口内。按顺时针的顺序计算 中值为1的连续像素的个数n。若2≤n≤5 则认为核点是正确的角点,若n2,则可迅速判断核心点为假特征点,可以筛除。筛除虚假的核点后,完成角点进一步的精确定位。对窗口中以核点为中心的 m×m大小的区域(m=l-2,l为窗口直径)内除核点以外的其他所有值为1的点的8-邻域中n的值。使得 2≤n≤5的点即为准确的角点位置,将其取为角点,筛除核点。若没有符合条件的点,则只筛除核点。
改进后的SUSAN角点提取算法的具体步骤
(1)计算模板内像素点与模板中心的灰度差值,得到迭代初始值To。
(2)通过计算得到的迭代值t,然后计算该点SUSAN区域的大小。
(3)用SUSAN算子进行初步检测,对于一个已经被SUSAN判定为角点的点,在本算法中作为候选点角点,继续做下面的分析。
①计算候选核点的n值。
②若 2≤n≤5,则认为候选核点就是角点。若 n2,则对窗口中以核点为中心的 m×m大小的区域(m=l-2,l为窗口直径)内除核点以外的其他所有值为1的点的8-邻域中n的值。使得 2≤n≤5的点即为准确的角点位置,将其取为角点,筛除核点。若没有符合条件的点,则只筛除核点。
③重复3,直到所有候选点都被分析过。
4 实验结果
用改进算法所实现的角点检测,在SUSAN角点检测的基础上,可以实现自动取阈值t,并且可以对原有的点进行筛选,排除虚假点,对不够精确的点实现自动寻找精确定位。
实验比较的结果如下图,可见使用了改进的算子后,角点检测的位置比原图像更靠近角点的真实位置,所以新的算子对大部分的角点都可以得到很好的响应,不过算法也有一些不足之处,在某些角点上也存在被多次检测的现象,在以后的工作中需要进一步解决。
实验原图 改进前 SUSAN算子 改进后SUSAN算子
参考文献
[1] 章毓晋着. 图像工程(中册)—图像分析[M].清华大学出版社,2005年10月
刘博,仲思东. 一种基于自适应阈值的SUSAN角点提取方法[J].红外技术,
阮秋琦,阮宇智译.冈萨雷斯数字图像处理[M].电子工业出版社,2000年01期
孟坛魁,华成英.一种改进的灰度图像角点检测算法.计算机应用研究,2005年04期
相关文章
学术参考网 · 手机版
https://m.lw881.com/