特征匹配

admin 2018-09-16 阅读


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fb_help/article/details/82721268

特征匹配

匹配方法

  1. 暴力匹配
    暴力方法找到点集1中每个descriptor在点集2中距离最近的descriptor;找寻到的距离最小就认为匹配
  2. Flann
    是一个对大数据集和高维特征进行最近邻搜索的算法的集合,在面对大数据集时它的效果要好于BFMatcher。

KNN

KNN(k-NearestNeighbor)即k个最邻近距离,不管是暴力匹配还是flann算法都可以输出k个最邻近匹配。

去粗差方法

两组特征匹配了,但其中可能存在False-positive matches 即存在错误匹配,我们称其为粗差。
去除粗差匹配的方法:

1. 交叉验证

针对暴力匹配,可以使用交叉匹配的方法来过滤错误的匹配。交叉过滤的思想很简单,再进行一次匹配,反过来使用被匹配到的点进行匹配,如果匹配到的仍然是第一次匹配的点的话,就认为这是一个正确的匹配。举例来说就是,假如第一次特征点A使用暴力匹配的方法,匹配到的特征点是特征点B;反过来,使用特征点B进行匹配,如果匹配到的仍然是特征点A,则就认为这是一个正确的匹配,否则就是一个错误的匹配。OpenCV中BFMatcher已经封装了该方法,创建BFMatcher的实例时,第二个参数传入true即可,BFMatcher bfMatcher(NORM_HAMMING,true)。

2. Ratio test

K近邻匹配,在匹配的时候选择K个和特征点最相似的点,如果这K个点之间的区别足够大,则选择最相似的那个点作为匹配点,通常选择K = 2,也就是最近邻匹配。对每个匹配返回两个最近邻的匹配,如果第一匹配和第二匹配距离比率足够大(向量距离足够远),则认为这是一个正确的匹配,比率的阈值通常在2左右。

3. RANSAC

随机采样一致性(RANSAC)可过滤掉错误的匹配,该方法利用匹配点计算两个图像之间单应矩阵,并分解得到位姿R,t,通过三角测量来得到两个关联特征对应的3D点,将3D点按照当前估计的位姿进行投影,也就是重投影,然后利用重投影误差(观测到得投影位置(像素坐标)与3D点进行重投影的位置之差)来判定某一个匹配是不是正确的匹配。


Opencv中各种实现详情见:
https://www.cnblogs.com/Jessica-jie/p/8622449.html
http://www.cnblogs.com/wangguchangqing/p/4333873.html

声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。