无人驾驶中的激光雷达(二)2019 IROS 点云分割论文复现

前言

这次为发表在2019年IROS会议上的一篇论文,名称为《Curved-Voxel Clustering for Accurate Segmentation of 3D LiDAR Point Clouds with Real-Time Performance》
在这里插入图片描述
与其他聚类方式比较
在这里插入图片描述

一、论文内容

论文主要使用了一种较为传统的方法,也就是将三维点云划分为三维体素再进行邻域搜索聚类的形式,但论文中使用的不是一般的方格聚类,而是采用了基于球坐标的扇形栅格进行划分,如下图所示。
在这里插入图片描述
图中主要参数包括两个角度,一个距离, Δ ϕ \Delta\phi Δϕ 为垂直角度划分大小, Δ θ \Delta\theta Δθ为水平划分角度大小, Δ ρ \Delta\rho Δρ为球坐标半径划分大小,网格的分辨率也是基于此进行划分的。

论文中指出这样划分的目的是因为点云在不同距离处点云密度不同,近密远疏,而基于此划分可以一定程度上可以自适应点云的密度分布。

论文里也对不同距离的聚类适应情况进行了展示
在这里插入图片描述
进行网格划分后采用27邻域的搜索方式进行邻域聚类,聚类中类别冲突处理的步骤则是参照早些年的一篇文章:《A clustering method for efficient segmentation of 3D laser data》

具体步骤如下图所示:
在这里插入图片描述
伪代码如下:
在这里插入图片描述
这里为了聚类提速,在划分网格的时候采用hash表的方式存储,便于查找。

最终结果:

不同距离对点云聚类的效果比较
在这里插入图片描述
在不同数据集上的聚类速度比较:
在这里插入图片描述

二、复现

github链接:https://github.com/wangx1996/Lidar-Segementation

这里只把论文里的东西复现并写成了接口的形式,可以自行更改用于其他框架下

具体使用:

 vector<PointAPR> papr;
 calculateAPR(*cloud_gr,papr);
 unordered_map<int, Voxel> hvoxel;
 build_hash_table(papr,hvoxel);
 vector<int> cluster_index = CVC(hvoxel,papr);
 vector<int> cluster_id;
 most_frequent_value(cluster_index, cluster_id);

calculateAPR用于计算点云每个点的两个角度和距离值;
build_hash_table用于划分网格并构建hash表;
CVC实现聚类方法
most_frequent_value进行类别汇总

输出为vector形式,长度与点云数量相同,index与点云一一对应表示该点云的类别序号

最终的一个结果:
在这里插入图片描述

总结

这篇论文相对来说思想比较简单,效果实际使用比较依赖三个阈值的选取,并且在聚类时有时候会把十分近的两个物体分为两个类别。

猜你喜欢

转载自blog.csdn.net/weixin_43885544/article/details/111304506