当前位置: 首页 > news >正文

视觉SLAM十四讲:从理论到实践(Chapter8:视觉里程计2)

前言

学习笔记,仅供学习,不做商用,如有侵权,联系我删除即可

一、目标

1.理解光流法跟踪特征点的原理。
2.理解直接法是如何估计相机位姿的。
3.实现多层直接法的计算。

特征点法存在缺陷:

二、光流(Optical Flow)

光流:空间运动物体在观察成像平面上的像素运动的瞬时速度。

稀疏光流:计算部分像素的运动

稠密光流:计算所有像素的运动

Lucas-Kanade光流

灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的。灰度不变假设是一个很强的假设,实际中很可能不成立。

根据灰度不变假设,有:

于是有:

在LK光流中,假设某一个窗口(patch)内的像素具有相同的运动。

三、直接法

依旧是灰度不变假设的前提,同时还需要无遮挡,完全漫发射,不考虑光照变化的前提

目标函数:最小化光度误差(Photometric error)

直接法的跟踪方式有:LSD,SVO,DTAM等开源方案。

,第一项与相机位姿没有关系,所以只对第二项求梯度,因此引入中间变量:q=TP,u=\frac{1}{Z_2}Kq,所以会有:

第一项:,像素点位置变化时,图像亮度的变化情况。

第二项:空间点的变化对像素坐标的影响。

第三项:

后两项只与三维点q有关,与图像无关,因此常合到一起,物理意义为:相机发生微小运动后,投影在像面上的像素点位置的变化情况,也就是重投影误差的梯度,其公式形式为:

DTAM——使用所有像素。(但无梯度处对目标函数无贡献)

SVO——使用fast关键点处所在的4x4的patch。(fast特征点表明该处梯度明显)

LSD——使用梯度明显的所有像素点。(数量比SVO多,但比所有像素要少) 

非线性优化的实现方式:

Eigen:需要自己编写,优点是中间过程可以检验是否正确

g2o:快速且方便,但中间过程被隐藏在中间框架里,不可视

直接法的优点:

1. 可以省去计算特征点、描述子的时间。
2. 只要求有像素梯度即可,不需要特征点。因此,直接法可以在特征缺失的场合下使用。比较极端的例子是只有渐变的一幅图像。它可能无法提取角点类特征,但可以用直接法估计它的运动。在演示实验中,我们看到直接法对随机选取的点亦能正常工作。这一点在实用中非常关键,因为实用场景很有可能没有很多角点可供使用。
3. 可以构建半稠密乃至稠密的地图,这是特征点法无法做到的。

直接法的缺点:

1. 非凸性!直接法完全依靠梯度搜索,降低目标函数来计算相机位姿。 但是图像本身是强烈非凸的函数。——优化算法容易局部极小,只在运动很小时才行。

2. 单个像素没有区分度。找一个和它像的实在太多了!——每个像素对改变相机运动的“意见”不一致。只能少数服从多数,以数量代替 质量。

3. 灰度值不变是很强的假设。

直接法适用于初始值还不错,而且前后两帧的运动距离不能差太远的情况。

总结

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 公有云服务器部署springboot工程详细步骤
  • QT 和VS 针对linux开发的不同
  • 41 mysql subquery 的实现
  • GNU/Linux - 使用字符设备来操作GPIO
  • Redis与缓存失效策略:实现高效的数据过期处理
  • 13. ESP32-HTTPClient(Arduino)
  • 从零实现ChatGPT:第三章实现大型语言模型(1)
  • HTML静态网页成品作业(HTML+CSS)—— 名人霍金介绍网页(6个页面)
  • CSS真题合集(一)
  • 深度解读 ChatGPT基本原理
  • LeetCode | 997.找到小镇的法官
  • python字典应用
  • 在Modelarts上微调量化Llama3,并用docker部署
  • 网络网络层之(6)ICMPv6协议
  • DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)
  • hexo+github搭建个人博客
  • [deviceone开发]-do_Webview的基本示例
  • 《Java编程思想》读书笔记-对象导论
  • EOS是什么
  • HTTP 简介
  • JavaScript 基础知识 - 入门篇(一)
  • JS专题之继承
  • k8s如何管理Pod
  • KMP算法及优化
  • Laravel 菜鸟晋级之路
  • MySQL几个简单SQL的优化
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • PHP那些事儿
  • Python实现BT种子转化为磁力链接【实战】
  • redis学习笔记(三):列表、集合、有序集合
  • SpriteKit 技巧之添加背景图片
  • SwizzleMethod 黑魔法
  • Webpack 4 学习01(基础配置)
  • WePY 在小程序性能调优上做出的探究
  • windows-nginx-https-本地配置
  • 多线程 start 和 run 方法到底有什么区别?
  • 飞驰在Mesos的涡轮引擎上
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 算法之不定期更新(一)(2018-04-12)
  • 温故知新之javascript面向对象
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Mac 上flink的安装与启动
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #162 (Div. 2)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (NSDate) 时间 (time )比较
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (五)MySQL的备份及恢复
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)全文检索技术学习(三)——Lucene支持中文分词