暑期研习系列:线、面SLAM从零入门(一)

暑假研习系列

线、面SLAM从零入门

一、线特征及描述子

0. 点、线特征优缺点对比
  • 线特征:优点 在于具有天然的光照及视角不变性,同时更高级的特征也使追踪的鲁棒性和准确性有所提高。特别是在特定的人造场景(室内,走廊)等场景,能够克服无纹理或者不可靠纹理带来的干扰。缺点 在于线段的检测及匹配耗时相对特征点更大。同时在后端也没有一个标准且通用的SLAM优化及回环模块。线特征匹配也是较为困难的,如线段易断裂,不具备强有力的几何约束(如极线几何约束),在纹理缺失处不具有较强的辨识度等。
  • 点特征:优点 最为普及和常用的特征,便于存储和匹配,速度较快。缺点 在于在纹理重复,纹理缺失场景下容易误匹配,特征丢失等。
1. 端点检测与直线检测

端点检测在SLAM系统中是不可靠的,因为视角变化及相机视野的情况下并不能稳定的检测出来。因此,采用观测视角变换前后,直线是否观测到同一条直线,这一方法更加可靠。

2. 直线自由度问题

理论上直线应该有6个自由度,但是由于线绕着自身的方向轴旋转和移动,直线还是这个直线,所以自由度为4。

3. 线特征检测与特征提取问题
  1. canny算子+霍夫直线检测:实时性不高,并且会产生误检。

  2. LSD(a Line Segment Detector,线分割检测器)[4]:是一种能在线性时间内得到亚像素级精度的局部提取线段的算法。其核心思路是将梯度方向相近的像素点合,并进行误差控制

    • 优点 该算法被设计成可以在任何数字图像上都无需参数调节。它可以自己控制误检的数量:平均而言,每张图有一个误检。它的速度比Hough要快
    • 缺点 设置了每个点是否USED,因此每个点只能属于一条直线,若有相交必有至少一条直线被割裂为两条。又因为其基于梯度,直线交点梯度值往往又较小(不被检测为边缘点),因此很有可能相交的两条直线在交点处被割裂为四条线段;对于长线段被遮挡、局部模糊等原因经常割裂为多条直线。这些缺点在Hough变换中不存在。
    • 整体流程如下(具体计算细节详见参考[2]):
      • LSD首先计算对图像进行高斯下采样(s=0.8),目的是为了消除锯齿效应。
      • 计算图像每个像素点的梯度幅值与梯度方向。
      • 所有像素点的梯度构成梯度场【即,根据梯度值对所有点进行梯度从小到大的伪排序(pseudo-ordered),这里的排序也用了技巧来加速排序(将梯度值划分为1024个等级{bins},这1024个等级涵盖了梯度由0~255的变化范围,以链表形式存储 ),能够在线性时间内完成。另建立状态列表,所有点设置为UNUSED,之后使用小梯度值抑制方法将梯度值小于ρ的点状态表中相应位置设置为USED】。
      • 接着合并梯度场里方向近化相同的像素点,构成一个区域,该区域被称为线段支持域( line support regions)【即,取出列表中梯度最大(伪排列的首位)的点作为种子点(seed),状态列表中设为USED,然后以seed为起点,搜索周围UNUSED并且方向在阈值[ -t, t]范围内的点(一般取角度误差22.5),状态改为USED】。
      • 对线段支持域生成一个最小外接矩形,这个可以看做宽度为R的宽,长度为R的长的候选直线,统计最小外接矩形的主方向(矩阵最小特征值对应特征向量的角度)。若区域内某一像素点的梯度方向与主方向的角度差在设定阔值内,那么这个点被称作同性点(aligned pt)。对每个点进行设定时,将同步更新矩形框。
      • 利用最小外接矩巧内支持点的比例来判定这个线段支持域是否是一条线段【即,判断同性点密度是否满足阈值D(文章提供D=0.7),若不满足,截断R变为多个矩形框,直至满足】。
      • 利用NFA(the number of false alarms)公式计算拟合矩形精度误差 。改变R使NFA的值更小直至NFA <= ε (文章中ε =1),R加入输出列表;如果改变了还不满足或者矩形区域太小,舍去 。【关于NFA公式有a contrario approach and the Helmholtz principle两个准则(在完美噪声图像图像中不应该检测到目标和一个不会检测到目标的噪声图像),在[3]中直观的解释为:引入一个新的模型a contrario model,这个模型可以理解为一个完美噪声图像。如果目标图像矩形框内的aligned points个数小于了噪声图像矩形框内的aligned points个数,那么目标图像矩形框内的aligned points就有理由推断为是由图像噪声引起的,表明当前矩形与contrario model中相同位置越相似,就越不可能是真实框】
    • 修正算法[1]:解决一条直线被分割为多段的问题
      • 使用LSD提取线段特征,并计算所有线段特征对应的描述子(LBD)。
      • 对于任意两对线段,计算主方向差、点线距离、端点距离、描述子距离,小于阈值被认为是一条直线
      • 最小二乘拟合直线,实行合并
      • 检查长度是否大于合并前长度,大于保留,小于舍去。
  3. LBD(line binary descriptor,线二进制描述符)[5]:描述了一种用于定义线段特征的描述符,并且基于该描述符可以对两幅图中的线段特征进行匹配操作。

    • 它在MSLD的基础上进行改进提出了LBD描述子,在保留前者光照、旋转不变性及与长度无关的优点外,还引入了全局和局部的高斯权重系数。相比于MSLD,具有更优的匹配效果,计算速度更快,并在构建线段对关系图的时候,结合线段的局部外观和几何约束两种特征

    • 算法组成:

      • 特征提取部分:EDLines算法。
      • 特征描述部分:类似于Sift统计梯度直方图作为描述子,LBD采用了对像素梯度进行统计并计算统计量的平均向量与标准方差作为描述子。
    • 整体流程如下[9]:

      • 构建高斯金字塔【即,用尺度因子scale factors和高斯模糊Gaussian blurring对原图进行下采样】。

      • 对金字塔中每一层的图片都进行一次EDLine算法的线特征提取。这里内容主要参考相关论文[6],笔记对此进行了展开解说,详见下面一小节 “补充:EDLine算法内容”。通过EDLine算法,能在每一层空间里都能够获得一组线段。然后我们将尺度空间里的线进行重组,以发现对应线段。对于每一个从尺度空间里取出的线段,如果他们在图像中是相同的线段,但是在不同的尺度空间里,我们都安排一个唯一ID并将其存入到同一个LineVec变量中。换句话说,就是将不同尺度下的直线线段一一对应,减少了图匹配问题的维度。

      • 条带(Band)来表示线的支持域。首先在线段处建立一个矩形,该矩形称为线段支持域LSR(Line Support Region),并定义了方向 d L d_L dL(线的方向)和方向 d 丄 d_丄 d

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值