最近ORB+RANSAC记录

    ORB是一种特征提取算法,由于其快速性可以满足系统的实时性要求,得到了广泛使用。其提取算法已经集成在了opencv中,但是会出现特征点分布不均的问题,为此也有人做了改进。

    其匹配算法也有很多,最简单时暴力匹配,1中的特征点的描述子挨个和2中进行比较,取距离最小的认为是匹配的特征点,但是1,2中的特征点并不是相同的,2中可能没有1中提取的特征点,所以会出现很多误匹配,为解决该问题,出现了FLANN、RANSAC等算法,FLANN其实是最近邻库,具体还需研究,RANSAC是一种基于模型的剔除算法吧。

一个简单的例子就是从一组观测数据中找出合适的二维直线。假设观测数据中包含局内点和局外点,其中局内点近似的被直线所通过,而局外点远离直线。简单的最小二乘法不能找到适应于局内点的直线,原因是最小二乘法尽量去适应包括局外点在内的所有点。相反,RANSAC能得出一个仅仅利用局内点计算出模型,并且概率还足够高。但是,RANSAC并不能保证结果一定正确,为了保证算法有足够高的合理概率,我们必须小心的选择算法的参数。

算法概述

RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。
RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:

  1. 有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出;
  2. 用1中得到的模型去测试所有的其他数据,如果某个点适应于估计的模型,认为它也是局内点。
  3. 如果有足够多的点被归类于假设的局内点,那么估计的模型就足够合理;
  4. 然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过;
  5. 最后,通过估计局内点与模型的错误率来评估模型。

这个过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现在的模型更好而被选用。

 RANSAC的优劣

RANSAC的优点:是能鲁棒的估计模型参数。例如,它能从包含大量局外点的数据集中估计出高精度的参数。
RANSAC的缺点:计算参数的迭代次数没有上限,如果设置迭代次数的上限,得到的结果可能不是最优的结果,甚至可能得到错误的结果。RANSAC只有一定的概率得到可信的模型,概率与迭代次数成正比。另一个缺点是它要求设置跟问题相关的阈值。而且RANSAC只能从特定的数据集中估计出一个模型,如果存在两个(或多个)模型,RANSAC不能找到别的模型。
总之,在一组包含局内点的数据集中,采用不断迭代的方法寻找参数模型。

摘抄自https://fangget.github.io/2016/09/08/cv-ransac-epnp/

 

你可能感兴趣的:(slambook)