基于matlab使用单眼摄像机图像数据构建室内环境地图并估计摄像机的轨迹(附源码)

news/2024/11/7 13:26:47/

一、前言

视觉同步定位和映射 (vSLAM) 是指计算摄像机相对于周围环境的位置和方向,同时映射环境的过程。该过程仅使用来自相机的视觉输入。vSLAM 的应用包括增强现实、机器人和自动驾驶。

此示例演示如何处理来自单眼摄像机的图像数据,以构建室内环境地图并估计摄像机的轨迹。该示例使用 ORB-SLAM,这是一种基于功能的 vSLAM 算法。

二、词汇表

此示例中经常使用以下术语:

  • 关键帧:包含本地化和跟踪提示的视频帧子集。两个连续的关键帧通常涉及足够的视觉变化。

  • 地图点: 表示从关键帧重建的环境地图的三维点列表。

  • 协同可见性图:由关键帧作为节点组成的图。如果两个关键帧共享公共地图点,则它们通过边连接。边的权重是共享地图点的数量。

  • 基本图表:共可见性图的子图仅包含具有高权重的边,即更多共享地图点。

  • 地点识别数据库: 用于识别过去是否访问过某个地点的数据库。数据库根据特征的输入包存储视觉单词到图像的映射。它用于搜索视觉上与查询图像相似的图像。

三、ORB-SLAM 概述

ORB-SLAM 管道包括:

  • 地图初始化:ORB-SLAM 首先初始化来自两个视频帧的 3D 点地图。3-D 点和相对相机姿势是使用基于 2-D ORB 特征对应关系的三角测量计算的。

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

  • 局部映射:如果当前帧被标识为关键帧,则用于创建新的三维地图点。在此阶段,使用束调整通过调整相机姿势和 3D 点来最小化重投影错误。

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

四、下载并浏览输入图像序列

此示例中使用的数据来自 TUM RGB-D 基准测试 [2]。您可以使用 Web 浏览器或运行以下代码将数据下载到临时目录。创建映像数据存储对象以检查 RGB 映像。

五、地图初始化

ORB-SLAM 管道首先初始化包含三维世界点的地图。此步骤至关重要,对最终 SLAM 结果的准确性有重大影响。初始 ORB 特征点对应关系是使用一对图像之间的匹配特征找到的。找到对应关系后,使用两种几何变换模型建立映射初始化:

  • 同调:如果场景是平面的,则单调投影变换是描述特征点对应关系的更好选择。

  • 基本矩阵:如果场景是非平面的,则必须改用基本矩阵。

单应性和基本矩阵可以分别使用estgeotform2destimateFundamentalMatrix进行计算。选择导致较小重投影误差的模型来估计使用estrelpose的两个帧之间的相对旋转和平移。由于RGB图像是由不提供深度信息的单目相机拍摄的,因此相对平移只能恢复到特定的比例因子。

给定两个图像中的相对相机姿势和匹配的特征点,使用三角测量函数确定匹配点的三维位置。如果三角化地图点位于两个摄像机的前方、其重投影误差较低以及该点的两个视图的视差足够大,则该点有效。

六、存储初始关键帧和地图点

使用两个帧初始化地图后,可以使用图像视图集和世界点集来存储两个关键帧和相应的地图点。

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

循环检测是使用词袋方法执行的imds 闭环过程以增量方式构建一个数据库,表示为倒置 ImageIndex 对象,该数据库存储基于 ORB 特征包的可视单词到图像映射。

八、优化和可视化初始重建

使用 bundleAdjust 优化初始重建,优化摄像机姿势和世界点,以最大程度地减少整体重投影误差。优化后,将更新地图点的属性,包括三维位置、视图方向和深度范围。您可以使用帮助程序可视化运动和结构来可视化地图点和照相机位置。

九、跟踪

跟踪过程使用每一帧执行,并确定何时插入新关键帧。为了简化此示例,一旦找到循环闭包,我们将终止跟踪过程。

十、本地映射

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

新地图点是通过对当前关键帧及其连接的关键帧中的 ORB 要素点进行三角测量来创建的。

十一、闭环

闭环检测步骤采用本地映射进程处理的当前关键帧,并尝试检测并闭合循环。

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

十二、与地面真相比较

您可以将优化的摄像机轨迹与地面实况进行比较,以评估 ORB-SLAM 的精度。下载的数据包含一个文件,该文件存储了每帧相机姿势的基本事实。数据已以MAT文件的形式保存。您还可以计算轨迹估计值的均方根误差 (RMSE)。

以上总结了如何使用 ORB-SLAM 构建室内环境地图并估计摄像机轨迹的概述。可以通过调整以下参数,使用不同的数据集测试视觉 SLAM 管道:

  • 将 480x640 像素的图像分辨率设置为 1000。对于更高的分辨率(如 720 × 1280),请将其设置为 2000。值越大,特征提取需要更多时间。

  • 帧速率为 30fps 时,设置为 20。对于较慢的帧速率,请将其设置为较小的值。增加可提高跟踪速度,但在摄像机快速移动时可能会导致跟踪丢失。

十三、程序

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

打开下面的“example.mlx”文件,点击运行,就可以看到上述效果。

程序下载:基于matlab使用单眼摄像机图像数据构建室内环境地图并估计摄像机的轨迹资源-CSDN文库


http://www.ppmy.cn/news/644174.html

相关文章

如何下载浏览器中的flash 视频

首先声明,以下仅供参考,所测试所用视频资源,均为开放视频来源。 也就是说,我测试用的视频,都是任何人都可以看的。都是没有任何权限就可以看的。都是开放的视频。 准备工具,任意浏览器,我这里…

浏览器网页视频下载Video Octopus插件网页视频下载插件

介绍: Video Octopus插件是一款非常不错的网页视频下载插件,能够帮助用户嗅探多种格式的网页视频,并支持批量下载保存,方便用户能够在本地进行观看,有需要的用户不要错过了,赶快来下载吧! 开发…

仿英雄联盟纯html+css+js LOL网页版

前言: 第一次接触这个平台(新手程序员),我是一个大二在校生(专业:前端开发)因期末考试需要被逼无奈做了一个LOL网页版。这个项目中并未用到Jquery(并未学到)。网页所有的…

fwPlayer 支持最新浏览器在线播放AVI和FLV格式的视频

fwPlayer 支持最新浏览器在线播放AVI和FLV格式的视频 可以使用 fwPlayer 使用webassembly技术,在线转码avi flv为mp4 或者ogg等来播放 fwPlayer 支持各种最新浏览器的视频和音频的录制、转码、流式传输。可以支持avi MP4(x264,x265) webm mpeg-1 mpeg-2,pcm adpcm…

在网页中插入FLV视频,经测试兼容IE、火狐、谷歌等浏览器

比较目前&#xff0c;所有的浏览器都支持FLASH。所以&#xff0c;这个方法大众普遍都很接受&#xff0c;优酷、土豆等在线视频就是使用的FLASH的。 本例播放器使用Flvplayer.swf。播放器在下文的demo文件中。网页中插入代码的如下&#xff1a; <object classid"clsid:…

浏览器网页JavaScript实现视频截图并下载,base64图片下载,video标签、hls.js、flv.js和webrtc等方式播放的视频进行截图并下载

前言 上一章中已经实现了base64下载&#xff1a;浏览器网页JavaScript实现Base64转图片并下载。 以前一般截图都是在后台进行截图&#xff0c;前端直接获取现成的图片就可以了&#xff0c;现代浏览器网页可以做的事情越来越多&#xff0c;所以可以直接在网页上对视频进行截图&…

逼真版仿英雄联盟纯html+css+jqueryLOL网页版

前言&#xff1a; 为了提高自己的编码兴趣&#xff0c;最近使用html,css,JQuery做了一个仿版的《英雄联盟》&#xff0c;虽然自己主修的是后端&#xff0c;但是技多压身。纯属也是自己的一个兴趣。上一节简单的介绍了仿版的《网易云音乐》&#xff0c;那么这次就简单介绍《简仿…

利用浏览器Fvd Downloader插件下载网页视频、音乐

转自&#xff1a;http://jingyan.baidu.com/article/92255446ac2704851648f40c.html 注意百度传课的视频通过这种方式不能正常下载&#xff0c;下载下来的文件是加密的&#xff0c;后缀名为encs.flv&#xff0c;通过各种视频播放播放器打不开&#xff0c;应该是加密了&#xf…