视觉slam线匹配算法

Posted Kris_u

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视觉slam线匹配算法相关的知识,希望对你有一定的参考价值。

线特征广泛存在于人为环境中,可以提供额外的约束。视觉SLAM中线特征的挑战是先特征的匹配问题。

LSD是一种局部提取直线的算法,速度比Hough要快。 LSD是一种直线检测分割算法,它能在线性的时间内得出亚像素级精度的检测结果。该算法被设计成自适应模式,无需手动调参。

opencv使用头文件及命令空间

#include <opencv2/line_descriptor/descriptor.hpp>
using namespace cv::line_descriptor;

LBD: line binary descriptor 线二进制描述符

  • opencv描述线特征的二进制描述子
Ptr<BinaryDescriptor> lbd = BinaryDescriptor::createBinaryDescriptor();
lbd->compute(img, keylines, mLdesc);   //mLdesc是矩阵格式

比较著名的点线特征融合的VSLAM方案:

  • PL-SLAM: a Stereo SLAM System through the Combination of Points and Line Segments(双目纯视觉)开源代码
  • PL-VIO: Tightly-Coupled Monocular Visual–Inertial Odometry Using Point and Line Features(单目视觉惯性)
    开源代码

PL-SLAM: a Stereo SLAM System through the Combination of Points and Line

This paper proposes PL-SLAM, a stereo visual SLAM system that combines both points and line segments to work robustly in a wider variety of scenarios, particularly in those where point features are scarce or not well-distributed in the image.

PL-SLAM leverages both points and line segments at all the instances of the process: visual odometry, keyframe selection, bundle adjustment, etc. We contribute also with a loop-closure procedure through a novel bag-of-words approach that exploits the combined descriptive power of the two kinds of features.

通过线特征的长度和方向的比较,通过剔除异常值来解决特定于线段的跟踪和匹配问题,而对于残差计算,我们用线段的端点坐标表示地图中的线段。因此,通过图像平面上这些端点的投影与与被观测线段相关的无穷多条直线之间的距离来计算被观测线段与其在地图中的对应直线之间的残差。这样,我们就可以构建一个一致的成本函数,无缝地包含点和线特性。这两种特征也被用于在相机导航期间鲁棒地检测循环闭合,这是一种新的单词包(BoW)方法,它结合了使用它们执行位置识别的优点。

B. 特征跟踪

从一系列立体图像帧中跟踪图像特征(点和段),并计算它们的三维位置及其由协方差矩阵表示的相关不确定性。然后将三维地标投影到新的摄像机姿态,并且最小化投影误差,以获得与该估计相关的摄像机姿势增量和协方差。这个过程在每一个新的帧中重复,只执行帧到帧的VO,直到一个新的KF被插入到映射中。
点特征:对于特征点的处理,由于其高效性和良好的性能,我们采用了ORB检测器和描述符。为了减少异常值的数量,我们只考虑互为最佳匹配的测量值,即左图像中的最佳匹配对应于右图像中的最佳匹配。为了保证对应关系足够有意义,还检查了描述空间中两个最近匹配之间的距离是否高于某个阈值,该阈值设置为最佳匹配距离的两倍。还使用bucketing方法确保在输入图像上公平分布点,该方法将图像分成16个桶,并尝试在每个桶中添加至少20个特征
线特征:采用直线段检测器(LSD,具有较高的精度和重复性。然而,它耗时,这是它在实时应用方面的主要弱点。为了缓解这种情况,我们在两幅立体图像中以并行框架检测线段。对于立体匹配和帧到帧跟踪,我们首先计算每行的LBD描述符,然后根据它们的局部外观特征进行匹配。类似于点的情况,我们检查两个特征是否相互最佳匹配,以及最好的两个匹配在描述空间中是否充分分离。我们利用线段所提供的有用的几何信息来过滤掉那些方向和长度不同的直线匹配,以及那些在端点差异上有很大差异的直线匹配

运动估计
一旦建立了两个立体帧之间的对应关系,就把关键点和线段从第一帧投影到下一帧。然后通过一个鲁棒的高斯-牛顿最小化线和关键点投影误差迭代估计摄像机的自我运动。为了处理异常值,使用了一个伪Huber损失函数并执行了两步最小化。

测试数据集:EuRoC or KITTI

PL-SLAM将点和线特征应用在slam全过程。通过线特征的长度和方向的比较,通过剔除异常值来解决特定于线段的跟踪和匹配问题,而对于残差计算,我们用线段的端点坐标表示地图中的线段。

PL-VIO: Tightly-Coupled Monocular Visual–Inertial Odometry Using Point and Line Features

 

普吕克坐标表示用线特征方向向量和线特征与相机坐标系原点所构成的平面的法向量表示

以上是关于视觉slam线匹配算法的主要内容,如果未能解决你的问题,请参考以下文章

线特征LSD and 描述子LBD

点线特征融合的单目视觉里程计

视觉SLAM之RANSAC算法用于消除图像误匹配的原理

ZYNQ 激光视觉SLAM算法移植与设计

视觉SLAM算法框架解析 ORB-SLAM

视觉SLAM算法框架解析 SVO