文/张瑞麟 李佳蔚 甘雨
角点是图像的一种重要的特征点,是图像的特征,有很多对图像的操作都是针对角点进行的。目前角点检测算法广泛应用在图像配准、图像拼接和图像识别等方面,所以对角点检测算法的完善在现阶段的研究中有十分重要的意义。FAST角点检测算法是一种关于角点检测的经典算法。相比于其他的角点检测算法,其最大的优势就是在运行速度和角点检测结果上都具有一定的优势。本文两种算法的提出是基于FAST角点检测算法的基础上对其检测结果的补充。所以继承了其速度上的优势,也可使检测的结果更加的准确。
传统的FAST角点检测算法定义为16个点的圆形窗口上,如图1所示,以P为像素中心,周围的16个点为我们需要考虑的点。这个圆称为Bresenham圆。
在设定好合适的阈值t之后,可以得到如下式子。
其中,第一个范围是相较于其他的点比较暗的点,我们称之为darker;第二个范围是比较大众化的点,我们称之为similar;第三种是相对于其他的点以较亮的点,我们称之为brighter。我们在进FAST行角点检测之前,要先将图片中的点先按照上述的公式进行分类,分类之后按照图1所示的点那样开始进行对比,若有连续12个点同时比中心点更亮(brighter)或更暗(darker),即可认为该点是角点。
在传统的FAST角点检测算法的基础上,构造出一个变形的FAST角点检测算法,将用于角点检测候选点周围的16个点缩减为8个点,如图2所示。
也就是说要使用圆周上的8个点与圆周进行比较,比较的方式也与传统的FAST角点检测相同:分别将周围的一周像素点分别运用公式1与P进行比较,如果得到连续6个点相比于圆心P在同一个范围内(darker或brighter),即可认定该点为角点。但是其也继承了FAST角点检测的缺点:没有被检测出来的并不一定就不是角点。本文提出下面两个算法。
Y型角点是一种FAST角点检测算法无法探测出的角点,因为它并不是圆周上有连续一定数目的角点而是由一定的点构成的特定的形状,Y型角点的模板如图3所示。
当然,这不难看出,传统的FAST角点检测的方法中的16个点的检测很难表达出角点检测的具体公式。所以,我将16个周围点简化为8个点,如图3所示中发白区域所示。
图3中内部显示的白框区域即为角点检测区域,对于检测区域中,有一个近似于字母Y型的灰度值区域,可以较为简单的进行分辨。所以在这里近似的将角点以圆周为8时的检测结果为准。检测得标准为:遍历圆周一周,当周围点的灰度值范围在darker或brighter中的点有三个时,进入筛选的范围;然后相同灰度值范围的(darker或brighter)不能相邻,且以圆心为对称点的两个点灰度值范围不同。满足以上的条件的点,可以认为其是一个Y型角点。该算法的步骤:
第一步:首先把原图像转换为灰度图像,将候选点P的灰度值设置为Ip。
第二步:根据经验设置一个阈值t。
第三步:计算候选点P与周围8个点的灰度值之差,将其按照上述规则进行筛选,则可认为候选点p是一个Y型角点。
同FAST检测一样,这个检测的最后需要进行非极大值抑制。
X型角点也是一种传统的FAST角点检测无法检测出的角点,其模板如图4。
同样,在16个点时,虽然可以将X型角点用某些特定的公式表示出来,但是在过程中会略显麻烦。所以,同样将FAST角点的模板变为8个,可得图4中的发白区域。
单单这么看看不出什么规律,经过查阅资料可知X角点有以下特点(如图5):
特点一:AC与BD为相互垂直的两条直线。
特点二:AP=PC;BP=PD。
特点三:对称区域的灰度相等,即区域a与区域b相等,区域c与区域d相等。
由以上三条特点可知:在X型角点中,只能有两种灰度,即为darker和similar或bighter和similar;对角线上的两点灰度相等,相同一边上灰度不同。对于X型角点的检测的标准为:先对圆周进行遍历,如果只有两种灰度值的点,且个数都为偶数,即为筛选后得到的点;我们将整个图形中十字状的点集作为分割线,在进行位置上的检测,如果对角线上的点灰度相等,且同一条边上的两个点灰度值不同。X型角点检测算法的步骤:
第一步:首先把原图像转换为灰度图像,将候选点P的灰度值设置为Ip。
图1:FAST角点检测
图3:正常Y型角点模板以及8点X型角点的模板
第二步:根据经验设置一个阈值t。
第三步:计算候选点P与周围8个点的灰度值之差,将其按照上述规则进行筛选,则可认为候选点p是一个X型角点。
同样,这种角点检测需要进行极大值抑制。
本文首先对FAST角点进行介绍,利用相同的原理,提出了一种8点模板进行Y型角点和X型角点的方法,对只能检测出L型角点的进行了补充。
图2:变形后的FAST角点检测
图4:正常X型角点模板以及8点X型角点的模板
图5:理想中X型角点的模板