一起自学SLAM算法:9.2 LSD-SLAM算法

news2024/11/27 1:46:19

连载文章,长期更新,欢迎关注:

下面将从原理分析、源码解读和安装与运行这3个方面展开讲解LSD-SLAM算法。

9.2.1 LSD-SLAM原理分析

前面已经说过,LSD-SLAM算法是直接法的典型代表。因此在下面的分析中,首先介绍一下直接法的基本原理,然后合论文[6,7,8]对LSD-SLAM系统框架展开具体分析。

1.直接法

其实不管是特征点法还是直接法,都是利用图像之间的共视关系建立数据关联,然后求解相机位姿变换和地图云点的过程。在特征点法中,先从图像像素点中提取一些比较独特的点(即特征点),然后在不同视角拍摄的图像中寻找特征点的匹配关系,接着将这些匹配好的特征点用来构建共视关系计算模型求出机位姿和环境地图点。而在直接法中,直接将图像中的每个像素点放入某种计算模型中参与计算,通过这种由像素点直接参与计算的共视关系计算模型就能求出机位姿和环境地图点。下面通过特征点法与直接法的对比讨论,帮助大家更进一步理解直接法。

对于特征点法来说,首先对给定的两帧图像分别进行特征提取和特征匹配,然后根据不同的已知条件构建相应模型求解相机位姿和地图云点。在单目SLAM初始化阶段仅已知两帧图像及其匹配关系,那么就是2D-2D模型,利用对极约束或者单应约束求出相机位姿变换,然后再利用三角化重建地图云点。在单目SLAM初始化完成后就能得到一些已知地图点或者双目、RGB-D能直接给出环境观测点时,就已知两帧图像、匹配关系和地图云点,那么就是3D-2D模型,利用各种PnP算法求出相机位姿变换,一旦当前相机位姿已知,双目或RGB-D由于深度信息已知可以直接重建地图云点,单目的话则依然用三角化重建地图云点。在双目或RGB-D能直接获取深度信息时,在已知两帧图像及其匹配关系后,其实两帧图像各自观测的地图云点及其匹配关系也就知道了,那么就是3D-3D模型,利用ICP算法求出相机位姿变换,一旦当前相机位姿已知,双目或RGB-D由于深度信息已知可以直接重建地图云点。不管是2D-2D、3D-2D还是3D-3D,都能求出相机位姿变换和地图云点,这可以当成初始值,然后利用最小化重投影误差来优化相机变换和地图云点或者仅优化相机位姿变换。

对于直接法来说,不进行特征提取和特征匹配,直接用图像像素建立数据关联,通过最小化光度误差件构建相应模型求解相机位姿和地图云点。在单目情况下深度信息未知,最小化光度误差过程需要同时对相机位姿变换和地图云点深度信息进行估计。在双目或RGB-D情况下深度信息已知,最小化光度误差过程对相机位姿变换进行估计会简单很多,而地图云点可以直接重建出来。因为直接法是在图像像素上通过深度估计来重建地图云点,如果将图像中的每个像素都进行深度估计然后重建出地图云点,那么构建出来的就是稠密地图;如果只对图像中的部分像素(比如梯度较大的像素)进行深度估计然后重建出地图云点,那么构建出来的就是半稠密地图或者稀疏地图。

(1)重投影误差与光度误差对比分析

先来讨论重投影误差,如图9-47a所示。假如第k-1帧图像中的像素点p_{k-1}与第k帧图像中的像素点p_{k}通过特征匹配建立了关联,也就是说环境中的同一个三维点P投影到第k-1帧图像和第k帧图像分别得到像素点p_{k-1}p_{k}。假设P在第k-1帧相机坐标系O_{k-1}的坐标为P_{k-1},而P在第k帧相机坐标系O_{k}的坐标为P_{k}。那么环境点P_{k-1}与像素点p_{k-1}的投影关系,如式(9-49)所示。而像素点p_{k-1}到环境点P_{k-1}的反投影关系,如式(9-50)所示。

 而坐标系O_{k-1}中的点P_{k-1}坐标值通过(R,t)可以变换为坐标系O_{k}中的点P_{k}坐标值表示,而点P_{k}重投影回第k帧图像得到像素点{p_{k}}',如式(9-51)和(9-52)所示。

 如果相机位姿变换(R,t)不存在误差且相机投影过程不存在噪声干扰,那么重投影得到的像素点{p_{k}}'与实际观测得到的像素点p_{k}在像素坐标上应该重合。正是由于机位姿变换(R,t)误差和相机投影过程噪声干扰的存在,使得重投影像素点{p_{k}}'与实际观测像素点p_{k}并不重合,两者之间像素坐标的相差距离就是所谓的重投影误差,如式(9-53)所示。

上面只是讨论了一个特征点的重投影误差,考虑所有特征点的重投影误差,就可以通过最小化重投影误差来优化相机位姿变换和地图云点,如式(9-54)所示。

而光度误差,如图9-47b所示。对于第k-1帧图像中的任意像素点p_{k-1}反投影到环境三维点P,同样假设P在第k-1帧相机坐标系O_{k-1}的坐标为P_{k-1},而P在第k帧相机坐标系O_{k}的坐标为P_{k}。同样,用式(9-51)和(9-52)重投影得到像素点{p_{k}}'。如果相机位姿变换(R,t)不存在误差且相机投影过程不存在噪声干扰,并假设环境中的同一个物体点投影到不同的相机形成的像素灰度值是一样的(即光度不变假设),那么P投影到第k-1帧图像形成的像素灰度值I_{k-1}[p_{k-1}]P重投影到第k帧图像形成的像素灰度值I_{k}[{p_{k}}']应该是相等的。正是由于机位姿变换(R,t)误差和相机投影过程噪声干扰的存在,使得I_{k-1}[p_{k-1}]I_{k}[{p_{k}}']不相等,这两个灰度值之差就是所谓的光度误差,如式(9-55)所示。

上面只是讨论了一个像素点的光度误差,考虑所有像素点的光度误差,就可以通过最小化光度误差来优化相机位姿变换和地图云点,如式(9-56)所示。

不难发现在计算重投影误差时,需要借助特征匹配,然后在同一幅图像中计算两个像素点之间的坐标距离。而在计算光度误差时,并不需要特征匹配,对于任意像素点都可以计算一幅图像中像素点灰度值与重投影到另一幅图像中像素点灰度值的差值。

 图9-47  重投影误差与光度误差

(2)特征点法与直接法优缺点分析

对于特征点法,借助特征提取和特征匹配建立强数据关联,使得参与计算的数据模型具有很高的鲁棒性,系统不易受干扰;由于特征点数量稀疏,能使优化问题控制在较小的规模。而辩证的角度看,特征点的优点也是其缺点。在特征提取和特征匹配时,计算耗时很大,是制约系统速度提升的重要环节;对于具有几十万甚至上百万像素点的图像,仅仅提取百十来个特征点用于计算,图像中其他大量的有用信息白白被丢弃了,一旦特征缺失、图像模糊、误匹配等情况发生,计算模型将立即失效。

而直接法与特征点法正好互补,对于直接法来说不需要特征提取和特征匹配,而是让像素点直接参与计算,既节省了特征提取和特征匹配消耗的时间,又保留了图像中所有像素点携带的巨大信息量,在特征缺失、图像模糊、图像出现噪点时依然能保持工作。虽然直接法并不在特提取和特征匹配上消耗计算时间,但是由于参与计算的像素点数量巨大,造成优化问题规模较大;另外直接法基于光度不变假设,这显然是一个强假设,实际情况往往不成立。

2.LSD-SLAM系统框架

到这里就可以分析LSD-SLAM的系统框架了,结合算法原作者清晰的论文思路[6,7,8],很容易理解整个算法的组成架构。由于LSD-SLAM支持单目、双目和全景这3种相机,所以系统框架也分3种情况来讨论。单目系统架构由3部分构成,即追踪(Tracking)、深度估计(Depth Map Estimation)和地图优化(Map Optimization),如图9-48所示。

图9-48  单目系统框架

双目系统架构,如图9-49所示。相比于单目系统,双目能直接获取图像的深度信息,这样系统尺度不确定性消失了,深度估计也更容易进行。

图9-49  双目系统框架

全景系统架构,如图9-50所示。全景系统中采用广角或者鱼眼镜头的相机获取图像,这样可以获取接近180°视角内更丰富的图像信息。相比于针孔模型的普通单目相机,全景相机的镜头对光有更强的折射能力,导致图像在成像平面上会有较大的畸变。在实际应用中,可以建立一个映射模型将全景相机的畸变图像转换成非畸变图像。

图9-50  全景系统框架

由于双目和全景系统架构是从单目系统架构发展而来,也就是说掌握了单目系统的原理,理解双目和全景系统非常容易,所以下面就以单目系统的原理展开进一步的分析。

(1)地图结构

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

(2)追踪

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

(3)深度估计

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

(4)地图优化

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

9.2.2 LSD-SLAM源码解读

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

9.2.3 LSD-SLAM安装与运行

(先占个坑,有时间再来补充详细内容,大家可以直接看文后的参考文献)

参考文献

【1】 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

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

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

相关文章

学习笔记:Java 并发编程④

若文章内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系博主删除。 视频链接:https://www.bilibili.com/video/av81461839配套资料:https://pan.baidu.com/s/1lSDty6-hzCWTXFYuqThRPw&am…

CSS语法格式与三种引入方式

文章目录第一章——CSS简介1.1 CSS语法格式1.2 CSS 位置1.3 CSS引入方式1.3.1.行内样式表(内联样式表)1.3.2 外部样式表1.3.3 内部样式表第一章——CSS简介 1.1 CSS语法格式 CSS 规则由两个主要的部分构成:选择器以及一条或多条声明。 选择…

C语言全局变量和局部变量

局部变量定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。例如:intf1(int a){ int b,c;//a,b,c仅在函数f1()内有效 return abc; } i…

各种CV领域 Attention (原理+代码大全)

人类在处理信息时,天然会过滤掉不太关注的信息,着重于感兴趣信息,于是将这种处理信息的机制称为注意力机制。 注意力机制分类:软注意力机制(全局注意)、硬注意力机制(局部注意)、和…

打工人必知必会(三)——经济补偿金和赔偿金的那些事

目录 参考 一、经济补偿金&赔偿金-用人单位承担赔偿责任 1、月平均工资是税前还是税后工资? 3、经济补偿金是否要交个人所得税?如何交? 二、劳动者承担赔偿责任 三、劳动者需要特别注意 参考 《HR全程法律顾问:企业人力资…

Day12 XML配置AOP

1 前言前文我们已经介绍了AOP概念Day11 AOP介绍&#xff0c;并将其总结如下&#xff1a;2 AOP 标签和expression表达式学习<?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:x…

3.4只读存储器ROM

文章目录一、引子二、介绍1.MROM2.PROM3.EPROM4.Flash Memory5.SSD三、运行过程四、回顾一、引子 这一小节&#xff0c;我们学习只读存储器ROM。 上一小节&#xff0c;学习了两种RAM芯片&#xff0c;分别是SRAM和DRAM。详情请戳&#xff1a;3.3Sram和Dram RAM芯片可以支持随…

Pygame创建界面

今天开始对Python的外置包pygame进行学习&#xff0c;pygame是Python的游戏包&#xff0c;使用该包可以设计一些简单的小游戏。 前言 利用Python外置包创建一个简单界面&#xff0c;首先需要下载Python外置包pygame 使用语句&#xff1a;pip install pygame Display模块 创建…

红黑树知识点回顾

Rudolf Bayer 于1978年发明红黑树&#xff0c;在当时被称为对称二叉 B 树(symmetric binary B-trees)。后来&#xff0c;在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的红黑树。 红黑树具有良好的效率&#xff0c;它可在近似O(logN) 时间复杂度下完成插入、删除、…

实验五、任意N进制异步计数器设计

实验五 任意N进制异步计数器设计 实验目的 掌握任意N进制异步计数器设计的方法。 实验要求 一人一组&#xff0c;独立上机。在电脑上利用Multisim软件完成实验内容。 实验内容 说明任意N进制异步计数器的构成方法 设计过程 集成计数器一般都设有清零端和置数输入端&#xff…

3.7动态规划--图像压缩

3.6多边形游戏&#xff0c;多边形最优三角剖分类似&#xff0c;仅仅是最优子结构的性质不同&#xff0c;这个多边形游戏更加具有一般性。不想看了&#xff0c;跳过。 写在前面 明确数组含义&#xff1a; l: l[i]存放第i段长度, 表中各项均为8位长&#xff0c;限制了相同位数…

ElasticSearch - RestClient操作ES基本操作

目录 什么是RestClient hotel数据结构分析 初始化RestClient 创建索引库 删除索引库 判断索引库是否存在 小结 新增文档 查询文档 更新文档 删除文档 批量导入文档 小结 什么是RestClient ES官方提供了各种不同语言的客户端&#xff0c;用来操作ES这些客户端的本质…

Java基础语法——方法

目录 方法概述 方法定义及格式 方法重载 •方法重载概述 •方法重载特点 方法中基本数据类型和引用数据类型的传递 方法概述 ——假设有一个游戏程序&#xff0c;程序在运行过程中&#xff0c;要不断地发射炮弹(植物大战僵尸)。发射炮弹的动作需要编写100行的代码&…

五、在测试集上评估图像分类算法精度(Datawhale组队学习)

文章目录配置环境准备图像分类数据集和模型文件测试集图像分类预测结果表格A-测试集图像路径及标注表格B-测试集每张图像的图像分类预测结果&#xff0c;以及各类别置信度可视化测试集中被误判的图像测试集总体准确率评估指标常见评估指标混淆矩阵PR曲线绘制某一类别的PR曲线绘…

密码学的100个基本概念

密码学的100个基本概念一、密码学历史二、密码学基础三、分组密码四、序列密码五、哈希函数六、公钥密码七、数字签名八、密码协议九、密钥管理十、量子密码2022年主要完成了密码学专栏的编写&#xff0c;较为系统的介绍了从传统密码到现代密码&#xff0c;以及量子密码的相关概…

C语言函数声明以及函数原型

C语言代码由上到下依次执行&#xff0c;原则上函数定义要出现在函数调用之前&#xff0c;否则就会报错。但在实际开发中&#xff0c;经常会在函数定义之前使用它们&#xff0c;这个时候就需要提前声明。所谓声明&#xff08;Declaration&#xff09;&#xff0c;就是告诉编译器…

《网络编程实战》学习笔记 Day9

系列文章目录 这是本周期内系列打卡文章的所有文章的目录 《Go 并发数据结构和算法实践》学习笔记 Day 1《Go 并发数据结构和算法实践》学习笔记 Day 2《说透芯片》学习笔记 Day 3《深入浅出计算机组成原理》学习笔记 Day 4《编程高手必学的内存知识》学习笔记 Day 5NUMA内存知…

【论文翻译】Non-local Neural Networks

摘要 卷积运算和循环运算都是每次处理一个局部邻域的构建块。在本文中&#xff0c;我们将非局部操作作为一组用于捕获长期依赖关系的构建块。受计算机视觉中经典的非局部均值方法[4]的启发&#xff0c;我们的非局部运算将一个位置的响应计算为所有位置特征的加权和。这个构建块…

「自控原理」5.2 频域稳定判据、频域分析

本节介绍奈奎斯特稳定判据、对数稳定判据&#xff0c;并引入稳定裕度 本节介绍频率特性法分析系统性能 本节介绍通过开环频率特性得到闭环频率特性的方法 文章目录频域稳定判据奈奎斯特稳定判据ZP−2NZP-2NZP−2N奈奎斯特稳定判据的推导对数稳定判据容易判断出错的情况临界稳定…

第九层(4):STL之duque类

文章目录前情回顾deque类deque类的功能deque和vector的区别deque容器的内部图deque类内的构造函数deque类内的赋值操作deque类内的大小操作deque类内的插入操作deque类内的删除操作deque类内的单个访问下一座石碑&#x1f389;welcome&#x1f389; ✒️博主介绍&#xff1a;一…