FAST特征点检测—OpenCV源码分析

FAST(Features fromaccelerated segment test)是一种角点检测方法,它可以用于特征点的提取,并完成跟踪和映射物体。FAST角点检测算法最初是由Edward Rosten和Tom Drummond提出,该算法最突出的优点是它的计算效率。


该算法的基本原理是使用圆周长为16个像素点(半径为3的Bresenham圆)来判定其圆心像素P是否为角点。在圆周上按顺时针方向从1到16的顺序对圆周像素点进行编号。如果在圆周上有N个连续的像素的亮度都比圆心像素的亮度Ip加上阈值t还要亮,或者比圆心像素的亮度减去阈值还要暗,则圆心像素被称为角点。


即要想成为角点,必须满足下列两个条件之一:
条件1:集合S由圆周上N个连续的像素x组成,Ix > Ip + t;
条件2:集合S由圆周上N个连续的像素x组成,Ix < Ip - t。
N一般选择为12。OpenCV中的N选取的是8



FAST特征点检测—OpenCV源码分析_第1张图片

在一幅图像中,非角点往往是占多数,而且非角点检测要比角点检测容易得多,因此首先剔除掉非角点将大大提高角点检测速度。由于N为12,所以编号为1,5,9,13的这4个圆周像素点中应该至少有三个像素点满足角点条件,圆心才有可能是角点。因此首先检查1和9像素点,如果I1和I9在[Ip –t, Ip + t]之间,则圆心肯定不是角点,否则再检查5和13像素点。如果这4个像素中至少有三个像素满足亮度高于Ip+t或低于Ip –t,则进一步检查圆周上其余像素点。
以上方法可能导致密集的角点,因此在OpenCV中使用了非极大值抑制来增强其鲁棒性。


FAST的非极大值抑制方法:
1、计算得分函数,它的值V是特征点与其圆周上16个像素点的绝对差值中所有连续10个像素中的最小值的最大值,而且该值还要大于阈值t;
2、在3×3的特征点邻域内(而不是图像邻域),比较V;
3、剔除掉非极大值的特征点。


FAST角点检测方法的具体步骤为:
1、在圆周上的部分像素点上,进行非角点的检测;
2、如果初步判断是角点,则在圆周上的全部像素点上进行角点检测;
3、对角点进行非极大值抑制,得到角点输出。


下面简单介绍一下各个部分:
代码的解读都以注释的方式给出


FAST特征点检测—OpenCV源码分析_第2张图片


FAST特征点检测—OpenCV源码分析_第3张图片




FAST特征点检测—OpenCV源码分析_第4张图片


FAST特征点检测—OpenCV源码分析_第5张图片





FAST特征点检测—OpenCV源码分析_第6张图片


结果图像如下图所示:




你可能感兴趣的:(opencv,计算机视觉,Fast)