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

news2024/10/6 16:29: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.coloradmin.cn/o/704482.html

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

相关文章

从小白到大神之路之学习运维第50天---第三阶段----MMM高可用集群数据库的安装部署

第三阶段基础 时 间:2023年6月30日 参加人:全班人员 内 容: Mysql---MMM高可用集群架构 目录 一、MMM介绍 二、MMM工作原理 三、MMM安装部署 环境配置:(所有主机配置) 1、主机信息 ​编辑 2、…

探索无限可能的教育新领域,景联文教育GPT题库开启智慧教育新时代!

随着人工智能技术的快速发展,教育领域也将迎来一场革命性的变革。景联文科技是AI基础数据行业的头部企业,近期推出了一款高质量教育GPT题库。 景联文科技高质量教育GPT题库采用了先进的自然语言处理技术和深度学习算法,可以实现对各类题目的智…

一个输入网址就可显示网站安全性及网站主要内容的含GUI的Python小程序

文章目录 1.一些杂七杂八的引入2.实现2.1 显示网站安全性2.2 安装所需python包2.2.1 requests包2.2.1 beautifulsoup包 3.源码展示4.效果展示 1.一些杂七杂八的引入 上次发了一个类似爬虫,可以自动下载网页图片的python小程序(详见一个自动下载网页图片…

【Web工具】3D 旋转中各数据格式之间的转换

1 Rotation Master — Link GitHub: Link 2 3D Rotation Converter — Link GitHub: Link 3 Quaternions — Link 4 Rotation Conversion Tool — Link 这是个人博客网站,其中可能有你需要的知识: Link

Prometheus实现自定义指标监控

1、Prometheus实现自定义指标监控 前面我们已经通过 PrometheusGrafana 实现了监控,可以在 Grafana 上看到对应的 SpringBoot 应用信息了, 通过这些信息我们可以对 SpringBoot 应用有更全面的监控。 但是如果我们需要对一些业务指标做监控,…

老文章可以删了!!!。2023年最新IDEA中 Java程序 | Java+Kotlin混合开发的程序如何打包成jar包和exe文件(gradle版本)

文章内容: 一. JAVA | JAVA和Kotlin混开开发的程序打包成jar方法 1.1 方法一 :IDEA中手动打包 1.2 方法二 :build.gradle中配置后编译时打包 二. JAVA | JAVA和Kotlin混合开发的程序打包成exe的方法 一. JAVA | JAVA和Kotlin混开开发的程序…

使用 Jetpack Compose 实现 ViewPager2

在此博客中,我们将介绍如何在Jetpack Compose中实现ViewPager2的功能。我们将使用Accompanist库中的Pager库,这是由Google开发的一个用于Jetpack Compose的库。 首先,需要将Pager库添加到你的项目中: implementation androidx.co…

投票活动链接制作方法网络投票办法公众号做投票链接

用户在使用微信投票的时候,需要功能齐全,又快捷方便的投票小程序。 而“活动星投票”这款软件使用非常的方便,用户可以随时使用手机微信小程序获得线上投票服务,很多用户都很喜欢“活动星投票”这款软件。 “活动星投票”小程序在…

ModelScope魔搭社区AI模型下载数据可能存在严重造假问题

目录 摘要: 一、数据分析 二、可能存在的问题 三、结论与建议 摘要: ModelScope魔搭社区作为一个AI模型共享平台,旨在提供各种领域的模型供用户下载和使用。然而,通过对其提供的数据进行分析,发现其中存在一定的数…

【Flutter】built_value 解决 Flutter 中的不可变性问题

文章目录 一、 前言二、 什么是 built_value?三、 为什么我们需要 built_value?四、 如何在 Flutter 中安装和设置 built_value?五、 如何使用 built_value 创建不可变的值类型?六、 如何使用 built_value 创建枚举类?…

pcl基于八叉树进行空间划分和搜索操作

建立空间索引在点云数据处理中已被广泛应用,常见空间索引一般是自顶向下逐级划分空间的各种空间索引结构,比较有代表性的包括 BSP 树、KD 树、KDB 树、 R树、R树、CELL 树、四叉树和八叉树等索引结构,而在这些结构中 KD 树和八叉树在 3D点云数…

使用键鼠网络共享用windows控制ubuntu,实现跨屏跨系统操作

经调研发现几种网络共享鼠标方案:sharemouse、synergy以及Barrier,由于没找到合适的资料去配置sharemouse,synergy又收费,所以使用Barrier。 一、Ubuntu安装Barrier 到Ubuntu软件商城搜索Barrier点击安装即可,这就不再…

学成在线----day8

1、课程发布 为了提高网站的速度需要将课程信息进行缓存,并且要将课程信息加入索引库方便搜索,下图显示了课程发布后课程信息的流转情况: 1、向内容管理数据库的课程发布表存储课程发布信息,更新课程基本信息表中发布状态为已发…

【Shell】读取用户终端输入内容

授权 cd /Users/lion/Downloads/shell-test-demos chmod ux *.shread_user_enter.sh #!/bin/bashprintHelp() {echo "1. hello"echo "2. world"echo "0. exit" }printHelpnumber"" while [ -z $number ]; doread -p "enter a n…

干货,让微信群活跃的秘籍

微信用户数量庞大、使用率高,是很多企业/商家做社群营销的第一平台,所以目前有很多微信社群营销管理系统。我一直在用的一个多群管理工具---微信管理系统,对于新手来说,操作也是十分的简单易上手,每一步都有教程指导&a…

网站被黑挂马应该怎么解决

遇到网站被黑或者被挂马,其实都是很正常的现象,做网站的站长,几乎都有网站被黑的历史 遇到这种问题,首先: 检查网站源文件的日期,回顾一下在过去一段时间里面,你有没有对源文件做过改动&#x…

程序员性能之道,从使用perf开始!

一、perf简介 从2.6.31内核开始,Linux内核自带了一个性能分析工具perf,能够进行函数级与指令级的热点查找。通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题…

Apikit 自学日记:使用脚本处理数据

脚本分为 前置脚本 和 后置脚本 两种,分别对应 API 请求前 和 返回数据后 的两个阶段。您可以通过编写 Javascript 代码,在 API 前置脚本中改变请求参数,或者是在 API 后置脚本中改变返回结果。 脚本常用于以下几种情况: API 请求…

【夜深人静学数据结构与算法 | 第十一篇】枚举算法

目录 前言: 枚举算法: 优点: 枚举算法的种类: 枚举算法案例: 343. 整数拆分 - 力扣(LeetCode) 12. 整数转罗马数字 - 力扣(LeetCode) 总结: 前言&…

video-05-videojs编写(全屏、非全屏)自定义控件!!!!

兄弟们!!看到这里,你马上就可以自定义控件了,想想是不是都激动啊,但是这篇文章重在思路及简单实现,仔细看。 目录 一、控件分类 二、实现方案(方案二最好) 2.1 方案1(…