赞
踩
各位也知道,我们在之前的博客中,介绍了很多回环的方法,比如Scan Context,Lris, BoW3D等方法。之前作者也在《重定位解析与思考》一文中,给到了一些回环检测算法的介绍。最近林博新开源了一个回环检测算法《STD: A Stable Triangle Descriptor for 3D place recognition》。我们从小乌坞博主中的实验中发现,确实效果不错,同时相关的代码也已经在Github上开源了。
图1。(a)显示从查询点云中提取的稳定三角形描述符(STD)。(b)显示从历史点云中提取的STD。(c)显示了这两帧点云之间STD匹配的示例。正确匹配的STD描述符由白色框标示,并且通过STD提供的姿态进行点云配准。这两帧点云是由一个小视场角激光雷达(Livox Avia)在相反方向移动收集的,导致点云重叠度低且视角变化剧烈(请查看我们的YouTube附带视频: youtu.be/O-9iXn1ME3g)。
本文开发了一种新的描述符:STD,它用三角形对场景中的任意三个关键点进行编码。与其他描述符中使用的多边形相比,三角形更稳定,因为三角形的形状是根据边长(或夹角)唯一定义的。与关键点周围的局部描述符相比,三角形的形状完全是旋转和平移不变的。为了提取三角形描述符的关键点,作者在平面上进行点云投影,并在边界上提取关键点,然后将关键点组成三角形。匹配是基于三角形的相似度进行的。
典型的STD位置识别案例如图所示,在同一位置成功识别了两个从相反视角采集的点云。具体而言如下:
在后面几节中,我们描述如何从点云中提取稳定三角形描述符。接下来,我们介绍如何构建描述符字典以及如何选择环路候选项。最后,我们提出了基于RANSAC的环路检测和几何验证,用于完整的环路检测流程。我们的方法的整体流程如图2所示。
图2. 我们算法的工作流程。我们的方法从关键帧中计算三角形描述符。然后使用哈希表作为描述符的数据库,以进行快速存储和匹配。具有前10个描述符匹配分数的帧将被选为候选项。一旦通过几何验证,环路候选项将被视为有效的环路。在触发环路时,还将获得环路帧和候选帧之间的相对变换。
受[26]的启发,为了提高分割的稳定性,我们在关键帧上执行环路检测,这些关键帧具有从几个连续的扫描中积累的点,因此具有增加的点云密度,而不管具体的LiDAR扫描模式。具体而言,我们使用LiDAR里程计[28]将每个新进入的点云注册到当前关键帧中。当子帧数累积到一定数量时,将创建一个新的关键帧。给定点云的关键帧时,我们首先通过区域生长进行平面检测。具体而言,我们将整个点云分成给定大小的体素(例如1m)。每个体素包含一组点 p i ( i = 1 , … , N ) p_i(i = 1,…,N) pi(i=1,…,N);然后我们计算点协方差矩阵 Σ Σ Σ:
设 λ k λ_k λk为矩阵 Σ Σ Σ的第 k k k大特征值。平面判定原则为:
其中 σ 1 σ_1 σ1和 σ 2 σ_2 σ2是预设的超参数。根据这个判定标准,我们可以检查体素中的点是否形成一个平面,如果是,则称该体素为平面体素。然后,我们从任何一个平面体素开始初始化一个平面,并通过搜索其相邻的体素来扩展平面。如果相邻的体素是相同的平面(具有相同的平面法线方向,距离低于阈值),则它们将被添加到正在生长的平面中。否则,如果相邻的体素不在同一个平面上,则将其添加到平面的边界体素列表中。上述生长过程重复,直到所有添加的相邻体素被扩展,或者到达边界体素(参见图4)。
图4. 平面扩展过程
对于边界体素,我们将其包含的点投影到相应的平面上(参见图5(a)和图5(b))。对于每个平面,我们创建一个图像,其中图像平面与平面重合,每个像素表示包含在平面的边界体素中的点的最大距离。然后,我们选择一个点,在其5 * 5邻域中具有最大像素值,作为关键点(参见图5(c))。每个提取的关键点对应于输入点云中的一个3D点,并且可以附加其从中提取的平面的法线。
使用关键帧中提取的关键点,我们构建一个k-D树,并为每个点搜索20个近邻点以形成三角形描述符。具有相同边长的冗余描述符将被消除。每个三角形描述符包含三个顶点 p 1 p_1 p1、 p 2 p_2 p2和 p 3 p_3 p3,具有投影法线向量 n 1 n_1 n1、 n 2 n_2 n2和 n 3 n_3 n3。此外,三角形的顶点按照边长规则按升序排列(参见图3)。我们总结一个三角形描述符 ∆ ∆ ∆的内容如下:
p 1 、 p 2 、 p 3 p_1、p_2、p_3 p1、p2、p3:三个顶点,
n 1 、 n 2 、 n 3 n_1、n_2、n_3 n1、n2、n3:三个投影法线向量,
l 12 、 l 23 、 l 13 l_{12}、l_{23}、l_{13} l12、l23、l13:三个边, l 12 ≤ l 23 ≤ l 13 l_{12}≤l_{23}≤l_{13} l12≤l23≤l13,
q q q:三角形的重心,
k k k:对应于描述符的帧号。
除了描述符,我们还将保存从该关键帧提取的所有 n n n个平面 Π = ( π 1 , π 2 , … , π n ) Π = (π_1,π_2,…,π_n) Π=(π1,π2,…,πn),用于以下的几何验证步骤。
图5. (a) 边界体素中的点以黄色着色。(b) 将这些点投影到相邻的平面上(蓝色点)。©平面图像,其中每个像素表示边界体素中的点到平面的最大距离(以厘米为单位)。如果一个点在其5 * 5邻域中具有最大像素值,它将被视为关键点(红色点)。
由于一个关键帧中可以提取出数百个描述子,为了快速查询和匹配描述子,我们使用哈希表来存储所有描述子。我们在描述子中使用具有旋转和平移不变性的六个属性来计算哈希键,这些属性是边长 l 12 、 l 23 、 l 13 l_{12}、l_{23}、l_{13} l12、l23、l13以及法向量投影向量 n 1 ⋅ n 2 , n 2 ⋅ n 3 , n 1 ⋅ n 3 n_1·n_2,n_2·n_3,n_1·n_3 n1⋅n2,n2⋅n3,n1⋅n3的点积。具有所有六个类似属性的描述子将具有相同的哈希键,因此存储在同一个容器中。对于一个查询关键帧,我们提取其所有描述子,如3节所述。对于每个描述子 ∆ i ∆_i ∆i,我们计算其哈希键,将其定位到哈希表中相应的容器,并为在此容器中具有描述子的关键帧投票一次。当查询关键帧中的所有描述子 ∆ i ∆_i ∆i都被处理时,匹配过程结束。获得前10个票数的关键帧将被选为具有匹配描述子的候选项,并保存供环检测步骤使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。