• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
[MVG] 鲁棒估计: RANSAC & 鲁棒核函数

https://zhuanlan.zhihu.com/p/62175983

在VSLAM中,我们首先构造3D-3D、3D-2D、2D-2D匹配,然后据此去估计相机的运动。完美估计需要完美的匹配,但实际的匹配中往往存在很多错误。如何消除或者降低错误匹配的影响呢?一种方法是选择那些正确的匹配进行估计(RANSAC),另一种是降低那些错误匹配的权重(鲁棒核函数),下面分别介绍。

1. RANSAC随机采样一致算法

这种方法的目的是,从所有数据中选择正确的数据,用于估计。为了方便,先给几个定义。

点:每一个数据,SLAM里指的是匹配的点对
野值/外点:错误的点
内点:正确的点
内点集:内点的集合
外点集:外点的集合
模型:带估计的参数
𝑠 :估计模型所需要的最小点数
𝑆 :所有的点形成的点集

显然,内点集就是我们想要找的正确数据。RANSAC的想法是从点集中随机的选择出 𝑠 个点,估计出一个模型,查看剩余点是否符合这个模型。如果大部分点都符合这个模型,就相当于我们找到了一个合适的模型,自然的符合模型的点就是内点啦。由于是随机选择,一次可能难以找到正确的模型,因此需要多次才可以。下面给出完整的RANSAC算法。

STEP 1. 随机的从 𝑆 中选择 𝑠 个点作为一个样本,估计出模型
STEP 2. 确定在模型距离阈值 𝑡内的数据点集 𝑆𝑖 , 𝑆𝑖 即可为内点集
STEP 3. 如果 𝑆𝑖 的大小大于某个阈值 𝑇 ,用所有内点 𝑆𝑖 重新估计一个更精确的模型
STEP 4. 如果 𝑆𝑖 的大小小于阈值 𝑇 ,则重复1步骤
STEP 5. 经过 𝑁 次试验,选择最大一致集 𝑆𝑖 ,并用 𝑆𝑖 的所有点重新估计模型

RANSAC里面有三个重要的参数需要确定,分别是 𝑡 、 𝑇 、 𝑁 。

 

 

一般取 𝛼=95% 。 𝑡2 的取值如下表

 

 

 

 

 

 

 

 

 https://github.com/ydsf16/MVG_Algorithm/blob/master/src/line_RANSAC.cpp

posted on 2024-08-13 22:01  MKT-porter  阅读(100)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3