【论文阅读】EDPLVO: Efficient Direct Point-Line Visual Odometry

news2024/11/27 17:39:18

一、公式及符号约定

这篇论文是将直接法的残差计算从点扩展到了线段,所以一些符号在第三章的部分提前做了约定。用Π表示投影的函数,也就是用像素坐标和内参矩阵以及深度信息,投影出点的空间坐标,反之Π-1表示的是将空间坐标投影到像素平面上。由此可以定义特征点的投影过程:
在这里插入图片描述
利用这个式子,我们可以得到前一帧上特征点投影到当前帧上的位置,用这个位置,就可以计算直接法中的光度误差:
在这里插入图片描述
14讲里面对光度误差的定义没有这个式子这么复杂,这个式子中引入了Ii、Ij、ai、aj、bi、bj这些表示仿射光照变化的参数,所以计算出来的光度误差是更加准确的,wx是一个权重,权重的取值与梯度值有关。通过这个式子,我们可以计算一个点的光度误差。

除了点的光度误差,这一章节还补充了线段的普朗克坐标,关于普朗克坐标,之前的博客中有总结,这里不再赘述。但是不同之处在于,这篇文章中的普朗克坐标做了一下归一化处理,原本的普朗克坐标是两个向量组成:线段的方向向量以及光心、线段组成平面的法向量,在这篇论文中对普朗克坐标的定义稍微改变了一下:
在这里插入图片描述
而一般的普朗克坐标定义是:d=p2−p1,m=p1​×p2,也就是完全依赖于线段的两个端点,不过论文中的定义并不妨碍我们用普朗克坐标去对线段进行表示,经过验算其实这两种表达方法都是一样的。在普朗克坐标的基础上,可以用点的坐标和线段的普朗克坐标直接计算出点到空间线段的距离:
在这里插入图片描述
这个式子其实用面积取解释是最好理解的,这里我用最原始的普朗克坐标定义去解释,组成普朗克坐标的两个向量,d表示线段的方向,m的大小为围成三角形的面积的两倍,d的方向是围成平面的法向量方向。我们假设相机光心为o,线段的两个端点为p1p2,点为p,那么有下面的图:
在这里插入图片描述
对于这个图来说,L也就是空间线段P1P2,m的大小表示的是三角形OP1P2的面积的两倍,也就是图中矮一点的平行四边形的面积,而p也就是向量OP,其与d叉乘的,也就是OP与P1P2叉乘,其大小表示的是图中较高一点的平行四边形的面积,而这两个面积,底的大小是一样的,差别就是高,而这个高,反应的就是p到p1p2的距离。这里可能存在一些式子细节上的理解问题,但是个人感觉这样去解释是最方便的。

二、基于点线的直接法

A、线段上任一点的空间表示方法

对于一帧图像上的一条线段,两个端点的坐标可以用投影和逆深度来表示(论文没有提逆深度是怎么得到的,应该是用三角化):
在这里插入图片描述
利用这两个点,可以计算出线段的普朗克坐标:
在这里插入图片描述
那么对于2D线段上的任何一点,定义点的方向向量为:
在这里插入图片描述
这个定义看起来比较麻烦,从图里来看直接就是相机光心发出,经过点x的向量:
在这里插入图片描述
在定义这些量之后,我们可以得出下面的式子:
在这里插入图片描述
先说结论,通过推导,这个式子表明线段上任何一个点的空间坐标依赖于线段端点的逆深度。推导的过程在论文的附录里面,推导的过程其实不难,对于点的空间坐标px,由于px必然在线段p1p2上,所以点到线段的距离一定是0,此外p1px和p1p2一定是共线的,由此可以写出下面两个式子:
在这里插入图片描述
用[]表示向量的反对称矩阵形式,那么上面的式子可以整理为:
在这里插入图片描述

B、线段的光度误差计算

线段的光度误差可以分为两部分:端点的光度误差和线段上采样点的光度误差。
在这里插入图片描述
由于我们在上一节最后证明了,线段上任何一点的光度误差只取决于端点的逆深度,所以对于上面这个式子,其结果只取决于两个端点的逆深度。

C、线段的共线约束

论文中使用的线段提取方法是LSD,而LSD本身存在的问题是受到运动模糊或者取整的影响,线段提取本身存在一定的不确定性,不确定性反应在线段的宽度上。这里个人理解是线段可能并不准确,会由于抖动、模糊等原因,让坐标不准确,也就是说提取出来的一条线段,其周围一定范围可能仍然属于这条线段。基于此,论文对线段增加了一个支持域,支持域宽度用ρ表示,以此来衡量线段的不确定性,ρ越大,说明线段提取结果周围很大的范围都可能是线段的一部分,所以不确定性大。

所谓共线约束,实际上就是指一条线段在所有观测到的图像上检测的2d线段,反过来投影其端点应该保持共线,利用这一点,可以写出公式:
在这里插入图片描述

D、完整的残差公式

在这里插入图片描述
完整的残差公式被定义为上式,可以简单分为三部分:特征点的光度误差、线段的光度误差以及线段的共线约束。

E、基于滑动窗口的优化策略

这篇论文采用了VINS同样的滑动窗口机制,目的是为了提高残差公式的优化效率以及准确性,优化的目标包括位姿和点线坐标。优化的细节论文没有明说,是直接参考了另一篇论文的内容。
在这里插入图片描述

F、两步优化策略

为了加速优化的速度,论文还补充了两步的LM优化,没太看明白,个人理解是将变量拆成两部分做优化,先优化线的坐标,之后固定线的坐标,优化位姿和逆深度信息。
在这里插入图片描述

三、前端

这一章论文介绍了3D线段的初始化以及2D线段的合并。线段的初始化部分,由于采用的是直接法,所以对于当前帧并没有进行特征提取的过程,所以使用的是一种跟踪策略,具体来说是先对线段上的点进行采样,每个采样点进行投影,投影得到的点拟合一条2D线段,之后利用两条线段的反向延长曲面,相交得到一个3D线段,从而完成初始化的过程。但是问题在于,这个初始化执行的时机,从这个初始化的过程可以看出,跟踪准确的前提是要一个准确的位姿,否则投影拟合出来的线段是不准确的,但是前面计算位姿的时候明明是有线段的对应关系的,这二者相互冲突了,这里看的不是很明白,因为论文是在同一作者上一篇论文中改进的,之后会查一下上一篇文章,也就是DPLVO,看看里面是怎么写的。

2D线段的合并这里个人看的也不是很清楚,论文说LSD提取出来的线段有时候许多断掉的小线段,如果直接合并,可能会让本来的两条线段误合并成一条,这显然是不合适的。
在这里插入图片描述
所以在这里论文提出了一些新的合并措施:
在这里插入图片描述

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

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

相关文章

Git使用详细教程

1. cmd面板的常用命令 clear:清屏cd 文件夹名称----进入文件夹cd … 进入上一级目录(两个点)dir 查看当前目录下的文件和文件夹(全拼:directory)Is 查看当前目录下的文件和文件夹touch 文件名----创建文件echo 内容 > 创建文件名----创建文件并写入内容rm 文件名…

基于udp实现回显服务器,翻译服务器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 udp socket 要掌握的类: 1.DatagramSocket 2.DatagramPacket 一、udp版本回显服务器 服务端: 完整代码 客户端: 完整代码 udp版本翻译…

Spring注入和生命周期

目录 获取Bean对象(对象装配) 属性注入 构造注入 Setter注入 三种注入的优缺点分析 注入的注解: 一个类型多个bean对象的注入方式 1.让变量名等于bean的id 2.用Resource注解(name“bean的id”) 3.用Qualif…

Java 核心技术 0 —— Class加载 和 运行时数据区域

JVM 是 字节码的运行环境,负责装载class到JVM内部,解释编译为对应平台的机器码指令进行执行,对于JVM设计有权威的定义规范,了解 JVM 类加载各部的主要功能 和 运行时数据区域组成 很有意义。 磁盘上有一个.java文件,通…

【目标检测】swin-transformer训练自己的数据集

文章目录1. 数据集的制作1.1. Labelme制作数据集1.2 COCO数据集格式2. 配置swin-transformer3. 训练自己的数据集4. 训练5.参考链接1. 数据集的制作 1.1. Labelme制作数据集 pip install labelme然后在桌面搜索框中找到labelme,然后打开,或者直接在命令…

Python 工匠 第一章 变量与注释

1.1 基础知识 1.1.1 变量常见用法 Python 是一门动态类型的语言,因此无须提前声明变量类型;并且由于其是弱类型语言,即可以更改其变量类型。动态类型语言/弱类型语言 a 10 # 不需要提前声明变量类型 a "a" # 可以更改其变量类…

【架构师】解决方案架构师常用的5种类型架构图

0. 背景 在给不同部门的同学讲解系统时,如果用手势解释解决方案,还有很多“这块和这块通过...”在解释复杂的概念时,大部分人都会晕。我们需要一个视觉效果。有人说一个架构图不就行了吗?但架构图不是一个“放之四海而皆准”的解决…

一、springcloud-eureka服务注册与发现

SpringCloud简介 Spring Cloud 为开发者提供了工具来快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话,集群状态)。分布式系统的协调导致了样板…

04 Vue属性配置

1、ref属性 App.vue代码&#xff1a; <template><div><h1 v-text"msg" ref"myTitle"></h1><button click"showDom">点我输出上方的DOM元素</button><school ref"school" id"sch"/&…

Node.js | Express+MongoDB 实现简易用户管理系统(一)(项目搭建 | RESTful API架构 | 前后端交互)

&#x1f5a5;️ NodeJS专栏&#xff1a;Node.js从入门到精通 &#x1f5a5;️ 博主的前端之路&#xff08;源创征文一等奖作品&#xff09;&#xff1a;前端之行&#xff0c;任重道远&#xff08;来自大三学长的万字自述&#xff09; &#x1f5a5;️ TypeScript知识总结&…

【javaEE】多线程进阶(Part1 锁策略、CAS、synchronized )

目录前言/补充4. 描述一下线程池的执行流程和拒绝策略有哪些&#xff1f;【面试题&#xff01;】一、常见锁策略一&#xff09;乐观锁VS悲观锁二&#xff09;读写锁VS普通互斥锁三&#xff09;重量级锁VS轻量级锁四&#xff09;自旋锁VS挂起等待锁五&#xff09;公平锁VS非公平…

Vue框架背后的故事

文章目录前言Vue萌芽Vue名字的由来因着Vue免试进入MeteorVue逐步完善Taylor推荐VueVue因受质疑发布1.0LinusBorg加入萌生全职做Vue想法Vue在恰到好处的时机出现探索经济来源Serah Drasner加入全职投入Vue建设Vue引入国内Vue受拥国内Vue在决策背景方面的独有优势总结本期推荐前言…

JVM垃圾回收系列之垃圾收集器二

随笔 最近两个星期因为要忙公司项目上线的事情以至于发表的文章会显得碌碌庸流&#xff0c;在此以示歉意 引言 本文将介绍HotSpot中的G1GC 参考书籍&#xff1a;“深入理解Java虚拟机” 个人java知识分享项目——gitee地址 个人java知识分享项目——github地址 G1GC 介…

双向链表的操作

什么是双向链表&#xff1f; 指针域&#xff1a;用于指向当前节点的直接前驱节点&#xff1b; 数据域&#xff1a;用于存储数据元素。 指针域&#xff1a;用于指向当前节点的直接后继节点&#xff1b; typedef struct line{struct line * prior; //指向直接前趋&#xff0c;结…

超级简单的机器学习入门

超级简单的机器学习入门 文章目录超级简单的机器学习入门0.写在前面1.机器学习基本概念2.机器学习算法的类型2.1 监督学习2.2 无监督学习2.3 监督学习和无监督学习的对比2.4 强化学习3.机器学习的三个基本要素3.1 模型3.2 学习准则3.2.1 损失函数3.2.2 欠拟合和过拟合&#xff…

MySQL数据库 || 增删改查操作详解

目录 前言&#xff1a; 插入数据 查询数据 全列查询 指定列查询 带表达式查询 去重查询 查询结果排序 条件查询 比较运算符 逻辑运算符 示例 模糊查询 示例 空值比较 分页查询 修改数据 删除数据 注意&#xff1a; 前言&#xff1a; &#x1f388;增删改查…

Flutter——常用布局

Flutter—常用布局效果图widget 树形图左布局Text评分条提示内容右布局应用Stack布局效果图释示例效果图释电影封面电影信息电影演员电影简介应用效果图 widget 树形图 整个界面由一行组成&#xff0c;分为两列&#xff1b;左列包括电影介绍&#xff0c;由上到下垂直排列&…

java计算机毕业设计ssm+jsp线上授课系统

项目介绍 通篇文章的撰写基础是实际的应用需要&#xff0c;然后在架构系统之前全面复习线上授课的相关知识以及网络提供的技术应用教程&#xff0c;以线上授课的实际应用需要出发&#xff0c;架构系统来改善现线上授课工作流程繁琐等问题。不仅如此以操作者的角度来说&#xf…

【JavaSE】关于数组

文章目录数组的创建与初始化数组的初始化静态初始化动态初始化数组的存储null打印数组的三种方式循环遍历打印foreach打印Arrays.toString()打印数组的练习冒泡排序常用的API数组拷贝Arrays.copyOf()数组排序Arrays.sort()数组的快速初始化Arrays.fill()二维数组数组的创建与初…

mysql之MHA的高可用

一、MHA概述 1.什么是 MHA&#xff1a; MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点故障的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作…