特征点匹配算法
粗匹配:
- 暴力匹配(汉明距离):顾名思义,取a图中一个点,依次计算与b图中所有点的距离,找出距离最近点
- FLANN 快速最近邻匹配:实现原理:对高维数据依次以其中一维作为划分依据将所有点构建一个KD-Tree,从集合中快速查找。效率比暴力匹配高的多。
去粗取精:匹配错误点剔除
1.Lower's算法:为了进一步筛选匹配点,来获取优秀的匹配点,这就是所谓的“去粗取精”。一般会采用Lowe’s算法来进一步获取优秀匹配点。
为了排除因为图像遮挡和背景混乱而产生的无匹配关系的关键点,SIFT的作者Lowe提出了比较最近邻距离与次近邻距离的SIFT匹配方式:取a图像中的1个SIFT关键点,并找出其与b图像中欧式距离最近的前2个关键点,在这两个关键点中,如果最近的距离除以次近的距离得到的比率ratio少于某个阈值T,则接受这一对匹配点。保证最近和次近的距离较远,尽可能保证最近的准确性。
Lowe推荐ratio的阈值为0.8,但作者对大量任意存在尺度、旋转和亮度变化的两幅图片进行匹配,结果表明ratio取值在0. 4~0. 6 之间最佳,小于0. 4的很少有匹配点,大于0. 6的则存在大量错误匹配点,所以建议ratio的取值原则如下:
ratio=0. 4:对于准确度要求高的匹配;ratio=0. 6:对于匹配点数目要求比较多的匹配;ratio=0. 5:一般情况下。
2.RANSAC:设定阈值,抽样误差大于阈值的点就可认为是外点(迭代)
3.LMEDS:不需要阈值,但是内点数小于50%会失效(迭代)
LMedS也从样本中随机抽选出一个样本子集,使用LS对子集计算模型参数,然后计算所有样本与该模型的偏差。但是与Ransac LS不同的是,LMedS记录的是所有样本中,那个是中位偏差的样本的偏差,称为Med偏差(这也是LMedS中Med的由来),以及本次计算得到的模型参数。由于这一变化,LMedS不需要预先设定阈值来区分inliers和outliers。重复前面的过程N次,从中N个Med偏差中挑选出最小的一个,其对应的模型参数就是最终的模型参数估计值。其中迭代次数N是由样本集子中样本的个数、期望的模型误差、事先估计的样本中outliers的比例所决定。