视觉SLAM十四讲学习笔记--第七讲视觉里程计学习笔记总结(1)

news/2024/5/16 8:13:26/文章来源:https://blog.csdn.net/weixin_36773706/article/details/126611380

专栏系列文章如下:

视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第二讲-开发环境搭建_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第三讲-旋转矩阵和Eigen库_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第三讲-旋转向量、欧拉角、四元数_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第三讲-相似、仿射、射影变换和eigen程序、可视化演示_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记---前三讲学习笔记总结之SLAM的作用、变换和位姿表示_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第四讲-李代数求导与扰动模型_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第四讲-Sophus实践、相似变换群与李代数_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第五讲-相机模型_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第五讲-图像和实践_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第四讲---第五讲学习笔记总结---李群和李代数、相机_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第六讲-非线性优化的实践-高斯牛顿法和曲线拟合_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第六讲学习笔记总结(2)---非线性优化应用_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第七讲-视觉里程计-特征点发和特征提取和匹配实践_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第七讲-视觉里程计-对极几何和对极约束、本质矩阵、基础矩阵

视觉SLAM十四讲学习笔记-第七讲-视觉里程计-单应矩阵和实践

​​​​​​视觉SLAM十四讲学习笔记-第七讲-视觉里程计-三角测量和实践_goldqiu的博客-CSDN博客

​​​​​​视觉SLAM十四讲学习笔记-第七讲-视觉里程计-PnP和实践_goldqiu的博客-CSDN博客

视觉SLAM十四讲学习笔记-第七讲-视觉里程计-ICP和实践_goldqiu的博客-CSDN博客

视觉SLAM前端视觉里程计(VO)的特征点法:

作用:根据相邻图像的信息估计出粗略的相机运动,给后端提供较好的初始值

两视图几何(Two-view geometry):提取、匹配图像特征点,然后估计两帧之间的相机运动和场景结构,从而实现一个两帧间视觉里程计

优势:稳定,对光照、动态物体不敏感

特征点---路标(Landmark)---图像特征(Feature)

作用:直接从矩阵层面考虑运动估计非常困难,所以要简化运动估计问题。

特点:图像中选取的比较有代表性的点,在相机视角发生少量变化后会保持不变,在相机运动之后保持稳定,能在各个图像中找到相同的点。

定义:特征是图像信息的另一种数字表达形式。

特征点的“进化”:

首先考虑灰度值不同的图像块

但灰度值受光照、形变、物体材质的影响严重,在不同图像间变化非常大,不够稳定。理想的情况是,当场景和相机视角发生少量改变时,算法还能从图像中判断哪些地方是同一个点。

于是考虑图像中的角点、边缘

角点相比于像素区块而言更加“特别”,在不同图像之间的辨识度更强。所以角点就是所谓的特征。

角点的提取算法: Harris 角点、FAST 角点 、GFTT 角点等等。

然而在大多数应用中,单纯的角点依然不能满足很多需求。考虑尺度如,从远处看上去是角点的地方,当相机走近之后,可能就不显示为角点了。考虑旋转如,当旋转相机时,角点的外观会发生变化,也就不容易辨认出那是同一个角点。为此,就提出了许多更加稳定的局部图像特征,如SIFT 、SURF 、ORB ,等等。

于是有了人工设计的特征点,其性质:

  1. 可重复性(Repeatability):相同的特征可以在不同的图像中找到。
  2. 可区别性(Distinctiveness):不同的特征有不同的表达。
  3. 高效率(Efficiency):同一图像中,特征点的数量应远小于像素的数量。
  4. 本地性(Locality):特征仅与一小片图像区域相关。

其定义:由关键点(Key-point)和描述子(Descriptor)两部分组成。

关键点是指该特征点在图像里的位置,有些特征点还具有朝向、大小等信息。

描述子通常是一个向量,按照某种人为设计的方式,描述了该关键点周围像素的信息,是按照“外观相似的特征应该有相似的描述子”的原则设计的。因此只要两个特征点的描述子在向量空间上的距离相近,就可以认为它们是同样的特征点。

典型特征

SIFT(尺度不变特征变换,Scale-Invariant FeatureTransform):充分考虑了在图像变换过程中出现的光照、尺度、旋转等变化,但随之而来的是极大的计算量。

FAST关键点:考虑适当降低精度和鲁棒性,以提升计算的速度,属于计算特别快的一种特征点(没有描述子);

ORB(Oriented FASTand Rotated BRIEF)特征:改进了 FAST 检测子不具有方向性的问题,并采用速度极快的二进制描述子BRIEF,使整个图像特征提取的环节大大加速。ORB在保持了特征子具有旋转、尺度不变性的同时,速度方面提升明显,对于实时性要求很高的SLAM来说是一个很好的选择。在目前的 SLAM方案中,ORB 是质量与性能之间较好的折中。

特征点进化表格:

ORB 特征:

关键点称为“Oriented FAST”,是一种改进的FAST角点。

描述子称为BRIEF(Binary Robust Independent Elementary Feature)。

提取 ORB 特征的步骤:

  1. FAST 角点提取:找出图像中的“角点”。相较于原版的 FAST,ORB中计算了特征点的主方向,为后续的BRIEF描述子增加了旋转不变特性。
  2. BRIEF 描述子:对前一步提取出特征点的周围图像区域进行描述。ORB对BRIEF进行了一些改进,主要是指在 BRIEF中使用了先前计算的方向信息。

原始FAST关键点: 主要检测局部像素灰度变化明显的地方,以速度快著称。它的思想是:如果一个像素与邻域的像素差别较大(过亮或过暗),那么它更可能是角点。

检测过程如下:

  1. 在图像中选取像素p,假设它的亮度为Ip。
  2. 设置一个阈值T (比如,Ip 的20%)。
  3. 以像素p为中心,选取半径为3的圆上的16个像素点。
  4. 假如选取的圆上有连续的N个点的亮度大于 Ip + T 或小于 Ip − T,那么像素p可以被认为是特征点(N通常取12,即为 FAST-12。其他常用的 N 取值为 9 和 11,它们分别被称为FAST-9 和 FAST-11)。
  5. 循环以上四步,对每一个像素执行相同的操作。

更高效的FAST-12 算法:

  1. 添加预测试操作,以快速地排除绝大多数不是角点的像素。具体操作为,对于每个像素,直接检测邻域圆上的第 1, 5, 9, 13 个像素的亮度。只有当这 4个像素中有 3 个同时大于 Ip + T 或小于 Ip − T 时,当前像素才有可能是一个角点,否则应该直接排除。
  2. 原始的 FAST角点经常出现“扎堆”的现象。在第一遍检测之后,还需要用非极大值抑制(Non-maximal suppression),在一定区域内仅保留响应极大值的角点,避免角点集中的问题。

FAST特征点的缺点:重复性不强,分布不均匀,不具有方向信息(旋转)和尺度信息(远处看着像是角点的地方,接近后看可能就不是角点了)。

添加了尺度和旋转描述的ORB特征:

Oriented FAST关键点

尺度不变性由构建图像金字塔,并在金字塔的每一层上检测角点来实现。而特征的旋转是由灰度质心法(Intensity Centroid)实现的。

  1. 金字塔底层是原始图像。每往上一层,就对图像进行一个固定倍率的缩放,这样就有了不同分辨率的图像。较小的图像可以看成是远处看过来的场景。在特征匹配算法中可以匹配不同层上的图像,从而实现尺度不变性。例如,如果相机在后退,那么应该能够在上一个图像金字塔的上层和下一个图像的下层中找到匹配。
  2. 在旋转方面,计算特征点附近的图像灰度质心。所谓质心是指以图像块灰度值作为权重的中心。

BRIEF 描述子

其描述向量由许多个0和1组成,这里的0和1编码了关键点附近两个随机像素(比如p和q)的大小关系:如果p比q 大,则取1,反之就取0。如果取了128个这样的 p, q,最后就得到128维由0、1组成的向量。BRIEF使用了随机选点的比较,速度非常快,而且由于使用了二进制表达,存储起来也十分方便,适用于实时的图像匹配。原始的 BRIEF描述子不具有旋转不变性,因此在图像发生旋转时容易丢失。而ORB在FAST特征点提取阶段计算了关键点的方向,所以可以利用方向信息,计算旋转之后的“Steer BRIEF”特征使ORB的描述子具有较好的旋转不变性。

改进后的特征点鲁棒性和效率都更强了。

ORB特征点性能改进表

后补。。。

特征匹配:解决SLAM中的数据关联问题(data association)

确定当前看到的路标与之前看到的路标之间的对应关系。通过对图像与图像或者图像与地图之间的描述子进行准确匹配,可以为后续的姿态估计、优化等操作减轻大量负担。然而由于图像特征的局部特性,误匹配的情况广泛存在,部分原因是场景中经常存在大量的重复纹理,使得特征描述非常相似。

匹配的算法:

  1. 暴力匹配(Brute-Force Matcher):特征点数量很大时,暴力匹配法的运算量将变得很大,特别是当想要匹配某个帧和一张地图的时候。
  2. 快速近似最近邻(FLANN)算法:更加适合于匹配点数量极多的情况。

第七章内容总结图

后补。。。

最近这个专栏比较少时间去写了,科研任务逐渐收紧,后面等过年放假有时间再整理,抱歉!

 

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

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

相关文章

Springboot人体健康检测微信小程序毕业设计-附源码012142

摘 要 本文设计了一种基于微信小程序的人体健康检测小程序,主要为人们提供了方便的各项健康检测服务,包括健康数据编辑、健康科普、健康讨论、注册登录功能等,用户能够方便快捷地查看健康科普知识、进行健康数据信息的上传等。人体健康检测微…

(附源码)ssm医药销售管理系统 毕业设计 042322

SSM医药销售管理系统 摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采SSM技术和mysql数据库来完成对系统的…

[JavaEE系列] Thread类的基本用法

文章目录线程创建第一类: 继承 Thread 类继承 Thread 类, 重写 run 方法使用匿名内部类, 继承 Thread 类, 重写 run 方法第二类: 实现 Runnable 接口实现 Runnable 接口, 重写 run 方法使用匿名内部类, 实现 Runnable 接口, 重写 run 方法第三类: 使用 lambda 表达式启动线程比…

java基于springboot+vue的在线求助系统

随着时代的发展,越来越多的人需要帮助,尤其是对一些孤寡老人和婴幼儿,儿童来说因为身体机能的缺陷等因素,更是希望得到更多的人的帮助。更让需要帮助的能够在线求助,为了让想要帮助别人的人能够在线看到别人的需求&…

17.EC实战 开发板开发环境搭建、程序烧录及运行代码过程

文章目录 前言EC源代码下载并搭建编译环境固件烧录程序的执行前言 去年的博文 基于ITE12.4代码的编译环境搭建 ,本文将在此基础上进行实战练习,基于我们之前做的EC开发板,EC芯片使用的是ITE8987,本教程将实现开发板开发环境搭建、程序烧录及运行代码过程。 首先介绍一下开…

Django简介(基本操作命令|目录结构|小白三板斧)

文章目录一、Django框架简介二、Django基本操作命令三、命令行与Pycharm操作的区别四、Django目录结构五、Django小白必会三板斧一、Django框架简介 1.版本问题1.X:同步 现在都不使用了同步速度慢2.X:同步 现在基本都使用同步速度慢3.X:异步…

zookeeper核心源码分析

zookeeper server单机启动流程 (1) 加载zookeeper配置文件zoo.cfg(2) 创建Jetty Admin Server监听(监听zk server)(3) 创建ServerCnxnFactory(默认是NIO,可以配置为Netty)(4) ServerCnxnFactory启动(5) 第一次启动zk …

smile——Java机器学习引擎

资源 https://haifengl.github.io/ https://github.com/haifengl/smile 介绍 Smile(统计机器智能和学习引擎)是一个基于Java和Scala的快速、全面的机器学习、NLP、线性代数、图形、插值和可视化系统。 凭借先进的数据结构和算法,Smile提供了最先进的性能。Smile有很好的文档…

22-08-30 西安JUC(03) Callable接口、阻塞队列4套方法、ThreadPool线程池

Callable接口 1、为什么使用Callable接口 Thread和Runnable 都有的缺点:启动子线程的线程 不能获取子线程的执行结果,也不能捕获子线程的异常 从java5开始,提供了Callable接口,是Runable接口的增强版。用Call()方法作为线程的执…

【Go-Lua】Golang嵌入Lua代码——gopher-lua

Lua代码嵌入Golang Go版本:1.19 首先是Go语言直接调用Lua程序,并打印,把环境跑通 package mainimport lua "github.com/yuin/gopher-lua"func main() {L : lua.NewState()defer L.Close()// goerr : L.DoString(print("go g…

WebRTC系列-SDP之setLocalDescription(2)

文章目录 1. setLocalDescription整体流程总结2.几个channel的含义3. 音频流水线的建立3.1 signal线程流程3.2 work线程流程在上一章从源码的角度分析了WebRTC的setLocalDescription的代码调用流程及相关函数,这一章从一张图总结其核心函数调用;同时多上篇遗留的多个channal关…

第03章 SpringBoot 配置详解

序言 1.内容介绍 ​ 本章介绍了配置文件的作用、语法结构以及基于多种方式进行配置文件的配置实现,同时对于SpringBoot如何集成logback日志框架进行日志的写入进行了详细的实战演示。 2.知识目标 掌握系统配置文件的结构掌握系统配置文件、自定义配置文件的作用…

神经网络相关性系数r公式,神经网络预测数据

MATLAB神经网络训练图中R是什么 谷歌人工智能写作项目:神经网络伪原创 相关系数r的计算公式是什么? 相关系数介于区间[-1,1]好文案。当相关系数为-1,表示完全负相关,表明两项资产的收益率变化方向和变化幅度容完全相…

QML初学者教程

QML初学者教程 使用 QML、Qt 5、JavaScript 和 C 在 windows、mac 和 linux 上进行跨平台 GUI 应用程序开发 课程英文名:qml-for-beginners 此视频教程共5.0小时,中英双语字幕,画质清晰无水印,源码附件全 下载地址 百度网盘地…

Windows与网络基础-3-虚拟机安装Kali Linux

目录 一、虚拟机软件和ios镜像文件 二、Kali Linux安装 2.1 文件—>新建虚拟机 2.2 选择典型安装 2.3 选择稍后安装 2.4 选择操作系统类型和版本 2.5 虚拟机命名和安装路径选择 2.6 选择磁盘大小 2.7 自定义硬件配置 三、进入系统,安装带图形化界面 四…

毕业那年的大学生创新立项

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

面试题-谈谈你对JVM的理解

首先问一个问题,jvm、jdk、jre三者的区别?再去谈其他的 JVM(Java Virtual Machine):虚拟机 ,源文件.java在虚拟机中通过编译器编译成字节码文件.class,是整个java实现跨平台的最核心的部分 操作…

什么是快应用?与原生APP相比优势在哪里

目前,头部互联网企业以及手机厂商两大阵营,正打得不可开交。腾讯、阿里、百度、今日头条等头部互联网企业,齐齐发力小程序,借助于开发者的力量,来强大自身的服务能力,提高超级平台的粘性,深挖存…

vue路由原理

前端路由切换原理:本质就是监听url的变化,然后匹配路由规则,显示相应的页面,并且不刷新页面。目前单页面应用实现路由的方式只有俩种: hash模式 history模式 hash模式相当于瞄点跳转。监听url#后面的传值发生变化&…

idea常用快捷键和插件

快捷键 查看父子关系图:ctrlaltu 全局搜索ctrlshirtF 全局替换:CtrlshirtR 插件 汉化Chinese 配置文件yml转properties 代码预览插件: MyBatis增强插件:MybatisX 快速定位接口工具(RestfulToolkit-fix) 安装之后使用快捷键"Ctrl\"或"CtrlAltN"调出搜…