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)
FAST算法是一种用于实时角点检测的方法,通过比较像素值来判断图像中的角点。在论文'Machine learning for high-speed corner detection'中介绍了其原理和优化方法。该算法首先选取点p并比较其与周围16个点的像素值,设定阈值t和连续n个点的条件。优化策略包括coarse-to-fine方法,减少误检,但可能丢失一些点。通过机器学习可以改善点的选择,非极大值抑制(NMS)则用于消除相邻的特征点。FAST算法特点是实时性但对噪声敏感,依赖阈值设置。OpenCV提供了FAST函数实现,支持非极大值抑制选项。
1万+

被折叠的 条评论
为什么被折叠?



