【公式详解】【优秀论文解读】EDPLVO: Efficient Direct Point-Line Visual Odometry
前言
多的不说哈 2022最佳优秀论文 来自美团无人机团队
作者提出了一种使用点和线的高效的直接视觉里程计(visual odometry,VO)算法—— EDPLVO 。他们证明了,2D 线上的 3D 像素点由 2D 线端点的逆深度决定,这使得将光度误差扩展到线变得可行。
直接进入正题
公式推导
首先直接看总误差

误差分为三部分:
\(E_{pj}\)误差为光度误差 这个被作者一笔带过了
\(E_{lj}\)误差为本文的重点 会重点讲解
\(E_{L}\)误差为线性约束 这个作者用了小篇幅来讲解
首先扔出光度误差公式:

\(i\)和\(j\)对应两个相机视角 \(x\)就是两个视角看到的点
\(t\)为曝光时间 剩下的贴出来了 大家自行研读吧 或者查一查资料 这里其他的我不太能多解释了

核心误差构建
首先简单说一下普吕克坐标系 是将空间中的一个3D直线用两个在该直线上的3D点进行了表示

\(P_1\)和\(P_2\)就是线上的两个3D点
原理可以自行查阅一下 但是这个结论很清晰明了 不用做太多解释
下面来看 在普吕克坐标系表示下 点到该直线的距离为:

注意 这里用e进行表示了
接下来表示两个空间点:

\(x_1\)和\(x_2\)为2d线的两个端点 \(d_1\)和\(d_2\)分别为这两个三维点的逆深度 那个像π似的是反投影矩阵 得到了这条线上的两个三维点坐标
然后结合上面的普吕克坐标表示的直线 就可以用上面两个三维点来表示直线了

此时又来了一个不同于上面两个三维点的点 这个点依然在3D线上 这个点的光线的方向可以表示为:

这里的 x 是图像坐标 且脑袋上带个横杠表示齐次坐标哈
然后就是很省略的一步 但是依然清晰明了:
我们需要求出上一个公式的 x 的三维坐标点:

不好推但是公式很明白 这里的参数都在上面说过
\([]_x\)表示反对称矩阵哈
然后我们又将上式的这个三维点投影到另一个相机视角中:

就得到了这个东西
这个东西带回到最上面的没太多解释的那个光度误差里 就得到了我们总公式的第二项的一部分
总公式的第二项详细的情况是:

这里的前两项确实仍然是光度误差 第三项为我们刚才三维点投影到相机视角中再带入到光度误差的结果哈
从上面的推导结果可知 第三项只依赖于\(x_1\)和\(x_2\)的逆深度
第三种误差
接下来看第三种误差

\(q\)是两个3D点 也是L的3D端点 \(e\)为定义的点到线的距离
然后还有前面那个东西的倒数 这个东西表示一个3D的L在相机视角下的一个投影2D线的长度 这个影响了\(q\)是否是端点的不确定度
然后这三种误差其实就这样建立起来了
H矩阵对比

图b就是这个算法所得到的H矩阵 可以看出这个H矩阵相对于其他的H矩阵是最小的
原图片的描述贴上:

从这里也可以看到这个论文的优点。
主要贡献
在不增加变量数量和优化难度的情况下将线特征加入到了约束中,在不增加运算量的情况下提高了准确率。
【公式详解】【优秀论文解读】EDPLVO: Efficient Direct Point-Line Visual Odometry的更多相关文章
- Java网络编程和NIO详解8:浅析mmap和Direct Buffer
Java网络编程与NIO详解8:浅析mmap和Direct Buffer 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NI ...
- 设计模式相关面试问题-Builder基础详解与代码解读
java的builder模式详解: 概念:建造者模式是较为复杂的创建型模式,它将客户端与多含多个组成部分(或部件)的复杂对象的创建过程分离. 使用场景:当构造一个对象需要很多参数的时候,并且参数的个数 ...
- Java网络编程与NIO详解8:浅析mmap和Direct Buffer
微信公众号[黄小斜]作者是蚂蚁金服 JAVA 工程师,目前在蚂蚁财富负责后端开发工作,专注于 JAVA 后端技术栈,同时也懂点投资理财,坚持学习和写作,用大厂程序员的视角解读技术与互联网,我的世界里不 ...
- 贝塞尔曲线 WPF MVVM N阶实现 公式详解+源代码下载
源代码下载 效果图: 本程序主要实现: N阶贝塞尔曲线(通用公式) 本程序主要使用技术 MVVM InterAction 事件绑定 动态添加Canvas的Item 第一部分公式: n=有效坐标点数量 ...
- Lucene TFIDFSimilarity评分公式详解
版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/zteny/article/details/ ...
- Vue生命周期钩子详解【个人解读】
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 论文解读《Momentum Contrast for Unsupervised Visual Representation Learning》俗称 MoCo
论文题目:<Momentum Contrast for Unsupervised Visual Representation Learning> 论文作者: Kaiming He.Haoq ...
- (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...
- SQL中CONVERT()函数用法详解
SQL中CONVERT函数格式: CONVERT(data_type,expression[,style]) 参数说明: expression 是任何有效的 Microsoft® SQL Server ...
- LESS详解之编译LESS
掌握LESS,必须先掌握LESS的编译.因为LESS是CSS预处理语言的一种,是一种动态语言.LESS可以运行在各种语言和环境中,包括浏览器端.服务器端等.就因为是一种CSS预处理语言,所以需要编 ...
随机推荐
- 7. url反向解析和静态文件
一.代码中url出现的位置 1.模版[html]中 1.<a href='urk'>超链接点击跳转<a/> 2.<form action='url' method='po ...
- jQuery+bootstrap实现有省略号的数据分页
1.前言 在前端通过ajax请求数据后,可以通过bootstrap实现分页.由于bootstrap只提供分页的按钮的样式.数据分页我们需要实现页码跳转,上一页下一页,数据过多显示省略号,点击省略号能快 ...
- 为什么 softmax 计算时要先减去最大值
根据 softmax 最基本的定义,计算公式如下所示: $$S_i=\frac{e^{x_i}}{\sum_j e^{x_j}}$$ 原理也很简单,将原向量变为分布的形式(和为1). 看似很美好,但是 ...
- KeeWiDB的高性能修炼之路:架构篇
数据也有冷热之分,你知道吗? 根据访问的频率的高低可将数据分为热数据和冷数据,访问频率高的则为热数据,低为冷数据.如果热.冷数据不区分,一并存储,显然不科学.将冷数据也存储在昂贵的内存中,那么你想,成 ...
- Java安全之反序列化(1)
序列化与反序列化 概述 Java序列化是指把Java对象转换为字节序列的过程:这串字符可能被储存/发送到任何需要的位置,在适当的时候,再将它转回原本的 Java 对象,而Java反序列化是指把字节序列 ...
- 【翻译】Thymeleaf – Spring Security集成模块
原文链接:Thymeleaf - Spring Security integration modules 来源:thymeleaf/thymeleaf-extras-springsecurity自述文 ...
- Mysql InnoDB多版本并发控制MVCC
参考书籍<mysql是怎样运行的> 系列文章目录和关于我 一丶为什么需要事务隔离级别 mysql是一个客户端/服务断软件,对于同一个服务器来说,可以有多个客户端进行连接,每一个客户端进行连 ...
- C#多线程之高级篇(上)
前言 抛开死锁不谈,只聊性能问题,尽管锁总能粗暴的满足同步需求,但一旦存在竞争关系,意味着一定会有线程被阻塞,竞争越激烈,被阻塞的线程越多,上下文切换次数越多,调度成本越大,显然在高并发的场景下会损害 ...
- 基于SpERT的中文关系抽取
SpERT_chinese 基于论文SpERT: "Span-based Entity and Relation Transformer"的中文关系抽取,同时抽取实体.实体类别和关 ...
- 【Java并发008】原理层面:ReentrantLock中 await()、signal()/signalAll()全解析
一.前言 上篇的文章中我们介绍了AQS源码中lock方法和unlock方法,这两个方法主要是用来解决并发中互斥的问题,这篇文章我们主要介绍AQS中用来解决线程同步问题的await方法.signal方法 ...