特征点检测与匹配的作用是计算特征点个数达到要求的图像对,使得图像与图像间一直进行传递,从而形成一条轨迹,为SFM重构中的初始图像对以及R、T求解作铺垫。
在特征点检测中,我们主要检测其局部特征点,包括斑点和角点两类特征点。斑点是指图像中像素或者灰度值大的区域,角点是指图像中物体的拐角或者线条交叉的部分。其中斑点检测主要包括二阶的拉普拉斯高斯边缘提取算法(LOG),尺度不变特征变换算法(SIFT)、加速稳健特征算法(SURF)等。角点检测主要有Harris角点特征提取算子、加速分割测试特征提取(FAST)、特征点检测算子(ORB)等。
1980年,Marr和Hildreth提出将Laplace算子与高斯低通滤波相结合,提出了LOG(Laplace and Guassian)算子。
步骤如下:
其中LoG算子 ▽ \bigtriangledown ▽ 2 G就是对一个标准高斯函数(未归一化)进行二次偏微分:
根据 δ \delta δ的不同以及3 δ \delta δ原则可以建立不同的模板,其中, δ \delta δ是一个尺度参数,在图像处理中引入尺度以及建立多尺度空间是一个重要的突破, δ \delta δ越大,图像越模糊,滤除噪声效果最好, δ \delta δ越小,效果相反。
建议参考:SIFT详细解析
SURF(Speeded Up Robust Features,加速稳健特征)是一种稳健的图像识别和描述算法。它是SIFT的高效变种,也是提取尺度不变特征,算法步骤与SIFT算法大致相同,但采用的方法不一样,要比SIFT算法更高效。SURF使用Hessian矩阵的行列式值作特征点检测并用积分图加速运算;SURF的描述子基于2D离散小波变换响应并且有效地利用了积分图。
步骤如下:
Harris角点检测算子是于1988年由CHris Harris和Mike Stephens提出来的,是对Moravec算子的改进。其基本思想是:在图像中设计一个局部检测窗口,当该窗口沿各个方向做微小移动时,考察窗口的平均能量变化,当该能量变化超过设定的阈值时,就将窗口的中心像素点提取为角点。
其步骤为:
Edward Rosten和Tom Drummond经过研究,于2006年在《Machine learning for high-speed corner detection》中提出了一种FAST特征点,并在2010年稍作修改后发表了《Features From Accelerated Segment Test》,简称FAST。由于不涉及尺度,梯度等,FAST检测器速度非常快。基本原理为通过一定邻域内像元的灰度值和中心点比较大小来判断是否为角点。
注意:FAST只是一种特征点检测算法,并不涉及特征点的特征描述。
其主要步骤为:
Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Rary R.Bradski在2011年一篇名为“ORB: An Efficient Alternative to SIFT or SURF” 的文章中提出这个快速特征点提取和描述的算法。ORB算法分为两部分,分别是特征点提取和特征点描述。特征提取是由FAST算法发展而来,特征点描述是根据BRIEF(Binary Robust Independent Elementary Features)特征描述算法改进的。
其基本步骤为:
特征匹配主要是计算两幅图像中特征描述子的匹配关系。需要计算两个描述符之间的距离,这样他们的差异就被转换成一个单一的数字,我们可以用它作为一个简单的相似度量,如下图:
对于第一张图像中给定的关键点,它将获取第二张图像中的每个关键点并计算距离。距离最小的关键点将被视为一对、
2014年,David Lowe和Marius Muja发布了"快速最近邻(fast library for approximate nearest neighbors(FLANN)")。FLANN训练了一种索引结构,用于遍历使用机器学习概念创建的潜在匹配候选对象。该库构建了非常有效的数据结构(KD树)来搜索匹配对,并避免了穷举法的穷举搜索。因此,速度更快,结果也非常好,但是仍然需要调试匹配参数。
BFMatching和FLANN都接受描述符距离阈值T,该距离阈值T用于将匹配项的数量限制为“好”,并在匹配不对应的情况下丢弃匹配项。相应的“好”对称为"正阳性(TP)",而错对称为"假阳性(FP)",为T选择合适的值的任务是允许尽可能多的TP匹配,而应尽可能避免FP匹配。尽管在大多数情况下都无法避免FP,但我们可以尽可能的降低FP次数。
只要不超过所选阈值T,即使第二图像中不存在关键点,蛮力匹配也将始终返回与关键点的匹配。这不可避免地导致许多错误的匹配。抵消这种情况的一种策略称为交叉检查匹配,它通过两个方向上应用匹配过程并仅保留那些在一个方向上的与在另一个方向上的最佳匹配相同的匹配来工作。交叉检查方法的步骤为:
减少FP数量的另一种非常有效的方法是为每个关键点计算最近邻距离比(nearest neighbor distance ratio)。
KNN与NN的区别在与NN每个特征点只保留一个最好的匹配,而KNN每个特征点保留k个最佳匹配,k一般为2。
主要思想是不要将阈值直接应用于SSD,相反,对于源图像中的每个关键点,两个最佳匹配位于参考图像中,并计算描述符距离之间的比率。然后,将阈值应用于比率,以筛选出模糊匹配。如下图所示:
真阳性率(True Positive Rate-TPR)是已经匹配的正确关键点和所有潜在匹配的总和之间的比值,包括那些被检测器/描述符错过的。它可用于量化实际发现了多少个可能的正确匹配。
假阳性率(False Positive Rate-FPR)是已经匹配的错误的匹配点和所有应该不被匹配的特征点之间的比值。它描述检测器/描述符选择错误的关键点的可能性。
Matcher Precision是正确匹配的关键点(TP)的数量除以所有匹配的数量,此度量也称为inlier ratio。
ROC曲线是一个图形化的图标,它显示了一个检测器/描述符如何很好地区分真假匹配,因为它的区分阈值是不同的。ROC可以直观地比较不同的检测器/描述符,并为每个检测器选择一个合适的鉴别阈值。
算法 | 优点 | 缺点 |
---|---|---|
SIFT | 在处理发生尺度、旋转变化场景时有极大优势,且对光照、噪声具有很好的鲁棒性。 | 计算维度大、计算速度很慢。 |
SURE | 较SIFT计算量小,耗时短,具有旋转不变性、尺度不变性,鲁棒性较好。 | 运算速度比较慢。 |
FAST | 计算速度快。 | 容易受噪声因素干扰,鲁棒性差,不具有旋转不变性。 |
OBG | 运算速度快,具有稳定的旋转不变性。 | 不具备尺度不变性。 |
在实际应用中,需要根据不同的需求选择不同的算法。