ORB-SLAM策略思考之RANSAC

news2024/12/28 20:11:32

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.coloradmin.cn/o/1418847.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ETCD监控方法以及核心指标

文章目录 1. 监控指标采集1.1 监控指标采集1.2 配置promethues采集和大盘 2. 核心告警指标3. 参考文章 探讨etcd的监控数据采集方式以及需要关注的核心指标,便于日常生产进行监控和巡检。 1. 监控指标采集 etcd默认通过/metrics指标暴露相关指标,因此不…

引入 js 文件报错: Uncaught SyntaxError: Unexpected token <

文章目录 问题分析问题 在开发中引入 Cesium.js 文件时报错如下 分析 我是这么引入的<body><noscript><strong>Were sorry but <%= htmlWebpackPlugin.options.title %> doesnt work properly without JavaScript enabled.Please enable it to c

C++仿函数、万能头文件、transform学习

这是网上的一个代码,里面的一些东西以前没用过; #include <bits/stdc++.h> using namespace std;// A Functor class increment { private:int num; public:increment(int n) : num(n) { }int operator () (int arr_num) const {return num + arr_num;} };// Driver …

Python列表中的append功能及用法举例

Python列表中的append功能及用法举例 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;append()&#x1f333;&#x1f340;功能介绍&#x1f340;&#x1f340;语法&#x1f340;&#x1f340;示例&#x1f340;&#x1f340;注意事项&#x…

Spark3内核源码与优化

文章目录 一、Spark内核原理1、Spark 内核概述1.1 简介1.2 Spark 核心组件1.3 Spark 通用运行流程概述 2、Spark 部署模式2.1 YARN Cluster 模式(重点)2.2 YARN Client 模式2.3 Standalone Cluster 模式2.4 Standalone Client 模式 3、Spark 通讯架构3.1 Spark 通信架构概述3.2…

江科大stm32学习笔记5——蜂鸣器

目录 一、接线 二、代码部分 三、查看库函数的方法 一、接线 蜂鸣器选择有源高电平触发蜂鸣器。 GND——GND VCC——正极 I/O——B12 注意&#xff1a;32上的PA15、PB3、和PB4是默认调试端口&#xff0c;如果使用需要进行额外配置&#xff0c;一般避开这三个端口。 二、…

二手交易|校园二手交易小程序|基于微信小程序的闲置物品交易平台设计与实现(源码+数据库+文档)

校园二手交易小程序目录 目录 基于微信小程序的闲置物品交易平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、商品信息管理 3、公告信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕…

5天!软件开发考试该如何准备?

作者&#xff1a;统信UOS技术团队 意外的早晨 那是一个阳光明媚的早晨&#xff0c;我正走早上班的路上&#xff0c;慢悠悠地享受着早餐。忽然&#xff0c;我的手机发出了提示音。一条来自领导的消息突然打破了宁静的早餐时光。它通知我&#xff0c;五天后将有一场考试——离线…

算法39:统计全 1 子矩形(力扣1504)----单调栈

题目: 给你一个 m x n 的二进制矩阵 mat &#xff0c;请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1&#xff1a; 输入&#xff1a;mat [[1,0,1],[1,1,0],[1,1,0]] 输出&#xff1a;13 解释&#xff1a; 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3 个 2x1 的矩…

申万宏源基于 StarRocks 构建实时数仓

作者 &#xff1a;申万宏源证券 实时数仓项目组 小编导读&#xff1a; 申万宏源证券有限公司是由新中国第一家股份制证券公司——申银万国证券股份有限公司与国内资本市场第一家上市证券公司——宏源证券股份有限公司&#xff0c;于 2015 年 1 月 16 日合并组建而成&#xff0c…

error: failed to open index: Database already open. Cannot acquire lock报错解决办法

ordinals节点数据同步出现报错 error: failed to open index: Database already open. Cannot acquire lock.问题分析&#xff1a; 出现问题的原因是btcoin core节点数据没有同步完我们就开始进行ordinals数据同步&#xff0c;导致/root/.local/share/ord/index.redb 文件数据…

盒子模型的内容总结

知识引入 1.认识盒子模型 在浏览网站时我们会发现内容都是按照区域划分的。这使得网页很工整、美观。在页面中&#xff0c;每一块区域分别承载不同的内容&#xff0c;使得网页的内容虽然零散&#xff0c;但是在版式排列上依然清晰有条理。如图1 图1 *承载内容的区域称为盒子…

Next.js 学习笔记(八)——优化

优化 Next.js 提供了多种内置优化&#xff0c;旨在提高应用程序的速度和核心网络生命指数。本指南将介绍可用于增强用户体验的优化功能。 内置组件 内置组件抽象化了实现常见 UI 优化的复杂性。这些组件包括&#xff1a; 图像&#xff1a;基于本地 <img> 元素构建。图…

Flink问题解决及性能调优-【Flink rocksDB读写state大对象导致背压问题调优】

RocksDB是Flink中用于持久化状态的默认后端&#xff0c;它提供了高性能和可靠的状态存储。然而&#xff0c;当处理大型状态并频繁读写时&#xff0c;可能会导致背压问题&#xff0c;因为RocksDB需要从磁盘读取和写入数据&#xff0c;而这可能成为瓶颈。 遇到的问题 Flink开发…

STM32 有源蜂鸣器

模块介绍: 结构&#xff1a;有源蜂鸣器通常由一个振膜和一个驱动电路组成。振膜是负责产生声音的部分&#xff0c;而驱动电路则负责控制振荡频率和幅度。 工作原理&#xff1a;有源蜂鸣器的驱动电路会向振膜施加电压&#xff0c;使其振动产生声音。驱动电路可以根据输入信号的…

centos7安装mysql5.7 或者mysql8

1、centos7安装mysql8 mysql官网 https://dev.mysql.com/downloads/mysql/ 示例2个版本的下载地址 #5.7.30下载地址 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar #8.0.22下载地址 wget https://cdn.mysql.com/archives/mysql-8…

网络防御保护——课程笔记

一.防火墙 防火墙的主要职责&#xff1a;控制和防护 --- 安全策略 --- 防火墙可以根据安全策略来抓取流量之后做出对应的动作。 防火墙的分类 防火墙的发展进程 防火墙的控制 带内管理 --- 通过网络环境对设备进行控制 --- telnet&#xff0c;ssh&#xff0c;web --- 登录设备…

【node】Node.js的常用内置模块:

文章目录 一、os模块&#xff1a;【1】常用的OS模块方法包括&#xff1a;【2】案例&#xff1a; 二、path模块&#xff1a;【1】常用的path模块方法包括&#xff1a;【2】案例&#xff1a; 三、url模块&#xff1a;【1】常用的url模块方法包括&#xff1a;【2】案例&#xff1a…

【Apache POI】百万级数据导出Excel,并含有折线等图表

需求概要 最近接到一个需求&#xff0c;概要来讲就是实现百万级数据导出Excel&#xff0c;并根据其中的数据项自动生成折线图等图表。经技术调研&#xff0c;针对内存、性能等要素&#xff0c;Apache POI此技术可完成此需求。 Apache POI是Apache软件基金会的开放源码函式库&am…

《教我兄弟学Android逆向15 xpose改机开发03-写一款自己的改机软件》

上一篇 《教我兄弟学Android逆向14 xpose改机开发02-改机代码基础编写》我带你熟悉了一下改机的流程,搭建了改机的基础代码,改机参数数据储存方面我们用的是SharedPreferences存储数据,界面方面写了一个一键新机的按钮,点一键新机的时候会随机生成imei数据存储到xml数据中,然后…