ORB-SLAM策略思考之RANSAC

ORB-SLAM策略思考之RANSAC

ORB-SLAM中的RANSAC

1. 初始化器的RANSAC

  1. ORB-SLAM中的初始化器是一个端到端的地图初始化策略,即不需要人的参与
  2. 双线程同时计算本质矩阵和单应性矩阵
  3. 使用基于RANSAC和卡方检验的评价方法
    1. 为了保证两种算法评价的一致性,计算本质矩阵F和单应性矩阵H都采用统一的8点法5.991卡方值和相同的RANSAC迭代次数。
    2. 对每次RANSAC迭代,进行最佳得分对应的变换矩阵、内点位置进行统计。
    3. 这里的评级方法为:
      1. 使用8点法计算变换矩阵
      2. 计算出变换矩阵后,对所有匹配成功的点进行基于该变换矩阵的重投影,利用卡方检验值进行内点判断
        1. 计算H矩阵时,使用5.991作为内点判断阈值
        2. 计算F矩阵时,使用3.841作为内点的判断阈值
      3. 对判断为内点的匹配,以5.991-重投影距离作为该内点的得分,并进行累计统计
    4. 针对相同的RANSAC迭代算法后,H矩阵和F矩阵都得到了最优得分、对应的内点位置和对应的变换矩阵
  4. 变换矩阵选择策略:
    1. 在ORB-SLAM中,并不会直接选择得分最高的匹配思路,而是通过一定的计算方法
    2. 计算H矩阵得分占总分数比例,如果大于0.4,选择H矩阵,否则选择F矩阵
  5. 初始化器的最后,就是对选定的矩阵进行运动分解,获取旋转矩阵和平移向量。

2. PnP求解器的RANSAC

  1. 在ORB-SLAM中,使用的PnP求解器是EPnP+RANSAC算法
  2. 在ORB-SLAM设置RANSAC参数的时候,内点比例( ω \omega ω)并不是直接根据传入的参数设置的,而是根据一定的计算方式进行修正
    1. ORB-SLAM中不仅会接收内点比例( ω \omega ω)参数,还会根据最少能接受内点的数目minInlierNum
    2. 根据2d-3d匹配总数 K K K和需要的模型估计参数 S i S_i Si进行比较
      1. 当传入的内点比例 ω \omega ω对应的内点数目 ω K \omega K ωK小于minInlierNum时,以minInlierNum/K修正当前 ω \omega ω
      2. 进行第一步的修正后,如果内点数目小于 S i S_i Si,以 S i / K S_i / K Si/K再次对 ω \omega ω进行修正
  3. 也就是说,当匹配的数目 K K K较少, ω \omega ω发生第一种修正时,会产生比较大的内点比例,造成的结果就是迭代次数 N N N非常小
  4. 在跟踪线程的重定位过程中,就是根据迭代次数 N N N是否大于5来确定这次的匹配的数目是否达到要求来判断是否丢弃这个重定位的匹配。在ORB-SLAM中会进行5次的迭代来判断迭代次数是否用完,我认为可以对这部分进行优化,根据要求的minInlierNum和匹配数目进行内点占比的求解,从而可以先求出迭代次数,直接进行判断要比迭代5次快的多

3. Sim3求解器的RANSAC

  1. 在ORB-SLAM中,使用的Sim3求解器是根据一篇比较久远的论文和RANSAC结合的方式进行的,论文:Closed-form solution of absolute orientataion using unit quaternions
  2. 在ORB-SLAM中,SIM3求解器的使用是在回环闭合线程中的计算当前关键帧和回环闭合候选关键帧之间的SIM3矩阵的。使用的策略和PnP求解器中相同
    1. 先进行RANSAC的5次迭代
    2. 如果没有了可用的迭代次数,丢弃这次匹配
  3. 正常来讲,计算出来的迭代次数较少只有一个原因,就是内点比例设置的太高了,与PnP求解器类似的是,内点比例并不是通过给定的参数直接赋值的,而是根据最少能接受的内点数目确定的。当最少接受的内点数目要求的较大时,就会造成迭代次数较少的情况,也就是说产生的匹配并不够。
  4. 因此,我的观点还是那样,并不需要进行5次迭代,因为这5次迭代过程中RANSAC算法的迭代次数并没有发生动态的更新,直接根据要求的最少的内点数目和匹配数目进行比较就可以直接确定迭代次数,速度会比较快。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/438451.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本基础之循环语句

目录 一、循环语句的概念 二、for循环语句 1、列表循环 2、列表for循环案例大全 案例一 案例二 案例三 案例四 案例五 案例六 案例七 案例八 3、不带列表循环 4、类似C语言风格的for循环 5、for循环总结 三、while循环语句 1、while循环语句格式 2、while死循…

FreeRTOS

1.新建一个无FreeRTOS的工程,取名为Motor,根据风扇模块PDF原理图和操作文档让风扇转动 2.新建一个包含FreeRTOS的工程,取名为Semaphore 具体步骤:创建两个任务和一个共享资源,在两个任务中使用信号量来同时访问共享资源…

GPT store和Assistants API横空出世,AI Agent创业公司将何去何从?

Look!👀我们的大模型商业化落地产品📖更多AI资讯请👉🏾关注Free三天集训营助教在线为您火热答疑👩🏼‍🏫 根据OpenAI发布的产品时间线,我们可以看到OpenAI在短短一年内迅…

2024年数学建模美赛C题(预测 Wordle)——思路、程序总结分享

1: 问题描述与要求 《纽约时报》要求您对本文件中的结果进行分析,以回答几个问题。 问题1:报告结果的数量每天都在变化。开发一个模型来解释这种变化,并使用您的模型为2023年3月1日报告的结果数量创建一个预测区间。这个词的任何属性是否会…

鸿蒙原生应用开发已全面启动,你还在等什么?

2019年,鸿蒙系统首次公开亮相,你们说,等等看,还不成熟; 2021年,鸿蒙系统首次在手机端升级,你们说,等等看,还不完善; 2024年,鸿飞计划发布&#…

【JAVA语言-第16话】集合框架(三)——Set、HashSet、LinkedHashSet、TreeSet集合的详细解析

目录 Set集合 1.1 概述 1.2 特点 1.3 HashSet集合 1.3.1 概述 1.3.2 哈希表 1.3.3 哈希值 1.3.4 练习 1.3.5 HashSet存储自定义类型元素 1.4 LinkedHashSet集合 1.4.1 概述 1.4.2 特点 1.4.3 练习 1.5 TreeSet集合 1.5.1 概述 1.5.2 练习 1.6 HashSet、Lin…

排序【数据结构】

文章目录 一、 稳定性二、排序1. 插入排序(1) 直接插入排序(2) 希尔排序 2. 选择排序(1) 直接选择排序(2) 堆排序 3. 交换排序(1) 冒泡排序(2) 快速排序① 普通版快排② 关于优化快排③ 快速排序的非递归方式 4. 归并排序5. 计数排序 三、 总结 一、 稳定性 在计算机科学中&am…

81.网游逆向分析与插件开发-背包的获取-装备栏数据结构的逆向分析

内容参考于:易道云信息技术研究院VIP课 上一个内容:自动化助手显示物品数据-CSDN博客 然后游戏中有弓箭,弓箭有数量,可以作为突破口,也可以使用物品id 获取弓的方式 获取弓箭的方式 然后搜索250 然后搜索出一个 然后…

大数据 - Spark系列《一》- 分区 partition数目设置详解

目录 🐶3.2.1 分区过程 🐶3.2.2 SplitSize计算和分区个数计算 🐶3.2.3 Partition的数目设置 1. 🥙对于数据读入阶段,输入文件被划分为多少个InputSplit就会需要多少初始task. 2. 🥙对于转换算子产生的…

千帆杯AI原生应用开发挑战赛,每期10万,等你而战!

大赛介绍 随着大模型技术的飞速发展,2024年将会成为AI原生应用爆发的元年,引领千行百业的创新变革。在这一时代背景下,百度智能云重磅推出千帆杯AI原生应用开发挑战赛,旨在激发广大开发者的创意潜能,推动AI原生应用在…

vit细粒度图像分类(五)TransFC学习笔记

1.摘要 细粒度图像具有不同子类间差异小、相同子类内差异大的特点。现有网络模型在处理过程中存在特征提取能力不足、特征表示冗余和归纳偏置能力弱等问题,因此提出一种改进的 Transformer图像分类模型。 首先,利用外部注意力取代原 Transformer模型中的…

数据分析入门指南:用 Python 开启数据之旅

文章目录 前言发现宝藏为什么选择 Python 进行数据分析?准备工作数据分析基础1. 数据加载2. 数据探索3. 数据清洗4. 数据可视化 探索更多可能性好书推荐总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。…