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


    一、公式及符号约定

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

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

    二、基于点线的直接法

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

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

    B、线段的光度误差计算

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

    看完DPLVO之后才发现,这个线段的光度误差是在DPLVO的基础上增加的,这也是改进点之一,原本在DPLVO里面只有点的重投影误差和共线约束两部分,这里又增加了线的重投影误差,其实本质上应该算是采样点的重投影误差,由于采样点的2d位置确定后,其3d位置只取决于起点终点的深度,所以在不增加参量的情况下,给残差增加了新的约束。

    C、线段的共线约束

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

    所谓共线约束,实际上就是指一条线段在所有观测到的图像上检测的2d线段,反过来投影其端点应该保持共线,利用这一点,可以写出公式:
    在这里插入图片描述
    这里的共线约束,应该和DPLVO里面的共线约束是一个东西,不过这里从公式来看,是没有区分锚图和关联图的,而是对所有图一视同仁,并且使用的不再是采样点,而是只使用的端点,要求端点到空间直线的距离尽可能小。应该是处于计算开销的简化处理。

    D、完整的残差公式

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

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

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

    F、两步优化策略

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

    三、前端

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

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

  • 相关阅读:
    第七章 块为结构建模 P5|系统建模语言SysML实用指南学习
    【WINDOWS / DOS 批处理】call命令的变量延迟展开特性
    Linux —— OpenCv编译安装
    pm2使用
    参数优化文档介绍
    光芯片-汽车-自动驾驶-新能源分析
    AI 边缘计算平台 - 爱芯元智 AX620A 爱芯派开箱
    Go插件:轻松实现模块化开发与动态功能扩展
    Java:实现两个数字的GCD最大公约数的实现算法(附完整源码)
    【LeetCode】2285. 道路的最大总重要性
  • 原文地址:https://blog.csdn.net/weixin_43849505/article/details/127719623