FAST (Features from Accelerated Segment Test) 算法用来实时提取角点特征, 详细原理见paper:“Machine learning for high-speed corner detection” in 2006 (Later revised it in 2010).
先说下FAST特征的原理吧。 在图像中选择一点p,它的像素值为Ip 然后把Ip和它周围16个点的像素值作比较,取阈值t,
如果这16个点中连续n个点的像素值都 > Ip + t, 或者 < Ip - t, 就认为p是角点;n 取12。
一种更快的方法,就是coarse to fine思想, 先取图中的1,9,5,13点,先比较点1和9,都满足像素值 > Ip + t, 或者 < Ip - t时,再比较5和13。 至少3个点满足,认为p是可能是角点,如果这4个点一个都不满足,则直接认为p不是,排除掉。 当满足至少3个以后,再check一圈的16个点。
FAST算法存在几个缺点: n < 12时会检测出很多点(不会排除太多的候选点)。 选出的点可能不是最优的, 上面提到的快速方法会抛弃一些点, 可能一片小区域附近会出现很多相邻的特征点。
上面前3个缺点可用Machine Learning解决(具体就不写了),最后一个用NMS解决,
NMS解决方法: 计算点p与它一圈16个点像素值之差的绝对值的和V 比如两个相邻的特征点,计算它们的V,抛弃V较小的那个点。
FAST算法的特点: 实时性, 对噪声不robust, 依赖于阈值t
下面看Opencv中的函数FAST
void FAST(InputArray image, vector<KeyPoint>& keypoints, int threshold, bool nonmaxSuppression=true)
参考链接
|