基于matlab处理来自立体相机图像数据构建室外环境地图并估计相机的轨迹(附源码)

一、前言

视觉同步定位和映射 (vSLAM) 是指计算摄像机相对于周围环境的位置和方向,同时映射环境的过程。该过程仅使用来自相机的视觉输入。vSLAM 的应用包括增强现实、机器人和自动驾驶。vSLAM 只需使用单眼摄像头即可执行。但是,由于使用单个相机无法准确计算深度,因此地图的比例和估计的轨迹是未知的,并且会随时间漂移。

此外,要引导系统,需要多个视图来生成初始地图,因为它不能从第一帧开始三角测量。使用立体摄像头可以解决这些问题,并提供更可靠的 vSLAM 解决方案。此示例演示如何处理来自立体相机的图像数据,以构建室外环境的地图并估计相机的轨迹。该示例使用 ORB-SLAM2算法的版本,该算法基于功能并支持立体摄像机。

二、处理管道概述

立体 vSLAM 的管道与单目视觉同时定位和映射示例中的单目 vSLAM 管道非常相似。主要区别在于,在地图初始化阶段,三维地图点是从同一立体对的一对立体图像创建的,而不是从不同帧的两个图像创建的。

  • 地图初始化:管道首先使用视差图从一对立体图像初始化 3-D 点的地图。左侧图像存储为第一个关键帧。

  • 跟踪:初始化地图后,对于每个新的立体对,通过将左图中的特征与最后一个关键帧中的特征进行匹配来估计相机的姿势。通过跟踪本地地图来优化估计的相机姿势。

  • 局部映射:如果将当前左侧图像标识为关键帧,则会根据立体对的视差计算新的 3-D 地图点。在此阶段,使用束调整通过调整相机姿势和 3D 点来最小化重投影错误。

  • 闭环:通过使用功能袋方法将每个关键帧与所有先前的关键帧进行比较来检测每个关键帧的循环。一旦检测到闭环,就会优化姿势图以优化所有关键帧的相机姿势。

三、下载并浏览输入立体图像序列

此示例中使用的数据来自多伦多大学航空航天研究所提供的 UTIAS 长期定位和映射数据集。您可以使用 Web 浏览器或运行以下代码将数据下载到目录。

使用两个图像数据存储对象来存储立体图像。

四、地图初始化

ORB-SLAM 管道首先初始化包含三维世界点的地图。此步骤至关重要,对最终 SLAM 结果的准确性有重大影响。初始 ORB 特征点对应关系是使用立体对的两个图像之间的匹配特征找到的。匹配的对应满足以下约束:

  • 整流立体对图像中两个对应特征点之间的水平偏移小于最大视差。您可以从立体对图像的立体立体浮雕中确定近似的最大视差值。

  • 整流立体对图像中两个对应特征点之间的垂直偏移小于阈值。

  • 匹配要素的比例几乎相同。

与匹配特征点对应的 3-D 世界位置确定如下:

  • 使用选择视差范围,通过半全局匹配 (SGM) 方法计算每对立体图像的视差图。

  • 使用函数根据视差图计算三维世界点坐标。

  • 在视差地图中查找与要素点及其 3-D 世界位置相对应的位置。

五、数据管理和可视化

使用第一个立体对初始化地图后,可以使用 函数来存储第一个关键帧和相应的地图点。

六、初始化地点识别数据库

循环检测是使用词袋方法执行的。表示为对象的视觉词汇表是离线创建的,其 ORB 描述符是从数据集中的大量图像中提取的。

七、跟踪

跟踪过程使用每一对执行,并确定何时插入新关键帧。

每个帧的处理方式如下:

  1. 为每个新的立体图像对提取 ORB 特征,然后匹配,与最后一个关键帧中具有已知相应 3-D 地图点的特征进行匹配。

  2. 使用透视n点算法估计相机姿势。

给定相机姿势,将最后一个关键帧观察到的地图点投影到当前帧中,并使用函数搜索要素对应关系。

  1. 使用当前帧中的 3D 到 2-D 对应关系,通过使用 执行仅运动束调整来优化相机姿势。

  2. 将本地地图点投影到当前帧中,以使用 搜索更多要素对应关系,并使用 再次优化相机姿势。

  3. 跟踪的最后一步是确定当前帧是否应为新的关键帧。如果同时满足以下两个条件,则帧是关键帧:

  • 自最后一个关键帧以来至少经过了 5 个帧,或者当前帧跟踪的地图点少于 80 个。

  • 当前帧追踪的地图点小于参考关键帧追踪点的 90%。

如果当前帧要成为关键帧,请继续执行本地映射过程。否则,请启动下一帧的跟踪。

八、本地映射

对每个关键帧执行本地映射。确定新关键帧后,将其添加到关键帧并更新新关键帧观察到的地图点的属性。为确保包含尽可能少的异常值,必须在至少 3 个关键帧中观察到有效的地图点。

新地图点是通过对当前关键帧及其连接的关键帧中的 ORB 要素点进行三角测量来创建的。对于当前关键帧中的每个不匹配特征点,使用 搜索与连接的关键帧中其他不匹配点的匹配项。局部束平差可细化当前关键帧的姿势、连接的关键帧的姿势以及在这些关键帧中观察到的所有地图点。

九、闭环

闭环步骤采用本地映射进程处理的当前关键帧,并尝试检测并闭合循环。通过使用查询数据库中与当前关键帧在视觉上相似的图像来标识循环候选项。如果候选关键帧未连接到最后一个关键帧,并且其相邻关键帧的三个是循环候选项,则该候选关键帧有效。

最后,对基本图应用姿态图优化以校正漂移。基本图是通过删除共可见性图中少于匹配项的连接在内部创建的。姿势图优化后,使用优化的姿势更新地图点的三维位置。

十、与地面真相比较

您可以将优化的相机轨迹与实际数据进行比较,以评估解决方案的准确性。下载的数据包含一个文件,用于存储每帧的 GPS 位置。您可以使用自动驾驶工具箱中的 自动驾驶工具箱或地图工具箱中测绘工具箱将 GPS 位置从地理坐标转换为本地笛卡尔坐标。在此示例中,您只需从 M 文件加载转换后的 GPS 数据即可。

十一、立体图像的密集重建

给定精细的相机姿势,您可以从与关键帧对应的立体图像中执行密集重建。

十二、程序

使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)

程序有偿获取:评论区下留言,博主看到会私信你。

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

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

相关文章

区间dp(动态规划)

动态规划——区间dp 什么是动态规划区间dp定义应用 例题引入题目描述输入格式输出格式样例样例输入样例输出 提示 贪心法区间dp优缺点:AC代码:代码详解三层for循环状态转移方程环形的处理 什么是动态规划 动态规划(dp)是一种通过…

使用Gradio库创建交互式散点图

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

Javaee技术目的总结

一.前节回顾 在前一节中,我们了解了: 1.将中央控制器中的Action容器,变成可控制! 2.针对于反射调用业务代码,最终页面跳转 3.jsp页面参数传递后台的代码优化字段太多有影响! 二.项目部署前期准备工作 1.项目运行环境…

分布式运用——监控平台 Zabbix

分布式运用——监控平台 Zabbix 一、Zabbix概述1.监控平台的作用2.Zabbix 是什么?3.Zabbix的特点4.Zabbix的使用场景5.Zabbix 监控原理6.Zabbix 6.0 新特性7.Zabbix 6.0 功能组件①.Zabbix Server②.数据库③.Web 界面④.Zabbix Agent⑤.Zabbix Proxy⑥.Java Gatewa…

爬虫反反爬

目录 为什么要反爬? 经常被反爬的主要人群 常见的反爬策略 通过headers字段来反爬 通过headers中的User-Agent字段来反爬 通过referer字段或者是其他字段来反爬 通过cookie来反爬 通过请求参数来反爬 通过从html静态文件中获取请求数据(github登录数据) 通…

Kafka入门, 消费者组案例(十九)

pom 文件 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.0.0</version></dependency></dependencies>独立消费者案例&#xff08;订阅主语&a…

nginx四层转发应用

默认使用yum安装的nginx是没有额外安装的动态模块的&#xff0c;需要自己额外安装 ls /usr/lib64/nginx/modules/ 若是不安装stream模块&#xff0c;直接在nginx的配置文件中调用stream模块&#xff0c;重载配置文件的时候会报错识别不到stream功能 安装stream模块 yum insta…

匿名管道的使用示例

目录 整体框架 通信步骤 创建管道 ​编辑创建子进程&关闭相应的fd ​编辑 进程间通信 父子进程通信之间四种场景 实现父亲读&#xff0c;孩子写的进程间通信 管道通信的使用场景样例实现 整体框架 通信步骤 创建管道 pipe的参数为输出型参数&#xff0c;返回读写端…

如何提升问卷数据的有效性?

问卷调查法是收集数据的宝贵工具&#xff0c;可以为商业、社会科学和医疗保健等众多领域的决策过程提供真实可靠的数据信息。然而&#xff0c;问卷数据的准确性和可靠性是影响最终结论的关键因素&#xff0c;而他们取决于问卷设计和数据收集过程的质量。在本文中&#xff0c;我…

zabbix proxy的配置及zabbix实现高可用(监控 windows,java应用,SNMP等)

目录 zabbix proxy 分布式代理服务器部署zabbix proxy 代理服务器部署 Zabbix 高可用集群Zabbix 监控 Windows 系统Zabbix 监控 java 应用Zabbix 监控 SNMP zabbix proxy 分布式代理服务器 zabbix 分布式代理服务器&#xff0c;可以代替zabbix server 采集性能和可用性数据。z…

nginx七层代理和四层转发的理解

先来理解一下osi七层模型 应用层 应用层是ISO七层模型的最高层&#xff0c;它直接与用户和应用程序交互&#xff0c;提供用户与网络的接口。它包括各种应用协议&#xff0c;如HTTP、FTP、SMTP等&#xff0c;用于实现特定应用的功能和通信表示层 表示层…

学生成绩分析项目

数据采集 导入必要的库 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns加载数据集 df pd.read_csv(D:\\桌面\\数据\\student_marks.csv)显示数据框的前几行 # 显示数据框的形状 print("Shape of the dataframe:", df.shape)#显示…