公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系dianyunpcl@163.com。未经作者允许请勿转载,欢迎各位同学积极分享和交流。
segmentation模块
PCL(Point Cloud Library)中的分割模块提供了一系列用于对点云数据进行分割算法。
主要内容
pcl::ConditionalEuclideanClustering是基于欧几里得距离对点云进行聚类分割,可以实现不同大小、形状和密度的物体分离,ConditionalEuclideanClustering算法可以设置条件参数,可以实现更加精细的点云分割。例如在欧几里得距离上设置条件限制,从而只聚类距离相近的点云,达到更好的分割效果。
pcl::CPCSegmentation是一个用于平面分割的模块,它是基于凸包的几何方法实现的,可以在复杂场景中快速高效地进行平面分割,原理是基于点云的局部凸包构建的,它首先将点云划分为多个局部区域,然后对每个区域构建凸包,最后将凸包进行分割,得到平面的集合。
pcl::EuclideanClusterExtraction 是用于对欧几里得聚类(Euclidean Clustering)的实现,它将输入点云中的点分割为不同的聚类,每个聚类由一组近邻的点组成。
pcl::LabeledEuclideanClusterExtraction可以用于从点云数据中提取聚类,并为每个聚类分配唯一的标签,它是pcl::EuclideanClusterExtraction的扩展,增加了对点云中噪声点和离群点的处理,并且可以为每个聚类分配唯一的标签,该模块基于欧几里得距离聚类,通过设置距离阈值和最小聚类大小来控制聚类的粒度,聚类的过程中,还可以设置聚类的范围,比如只聚类点云数据中的一个区域,这样可以避免处理无关的点云数据。
pcl::ExtractPolygonalPrismData 是 PCL 库中的一个滤波器,用于提取多边形的柱状体(Polygonal Prism)内的点云数据。其主要原理是在 3D 空间中定义一个多边形,并且指定其高度,然后提取多边形的柱状体内的所有点。
pcl::GrabCut是一个基于图像分割的算法,用于对点云进行分割。该算法基于机器学习方法,结合了颜色和空间信息,能够对点云中的目标进行精确分割。算法步骤:
1. 初始化:首先,对点云中的每个点进行标记,将其标记为前景或背景。这一步可以通过手动标记或者基于物体边界框进行自动标记来完成。
2. 能量函数:能量函数包括数据项和平滑项。数据项表示每个点在当前标记下属于前景或背景的概率,由高斯模型计算得出。平滑项表示相邻点之间标记不同的代价。
3. 图割算法:使用图割算法求解能量函数的最小割,即找到一个最优的标记方式,使得数据项和平滑项的代价最小。
4. 迭代优化:根据当前标记结果,重新计算高斯模型,并重新求解能量函数的最小割。迭代进行,直到达到收敛条件。
pcl::segmentation::detail::RandomWalker用于实现基于随机游走的分割算法,它的原理是将点云分割成多个区域,并将每个区域分配一个标签,分割的过程基于随机游走算法,它会计算点云中所有点之间的距离,并通过比较距离来决定哪些点应该属于同一区域,在分割的过程中,RandomWalker将点云看作是一个图形,每个点作为一个节点,相邻的点之间的距离作为边。通过计算每个节点到其他节点的距离,可以得到一个节点与节点之间距离的权重矩阵,然后根据这个权重矩阵来运行随机游走算法。
pcl::LCCPSegmentation用于将点云数据分割为不同的聚类,LCCP代表Local Convexity Concavity Preserving。该模块使用基于图的凸凹保持的方法进行分割,可以识别出由凸面、凹面和平面构成的聚类。
基本原理:该方法使用了一种基于图的分割方法,通过构建一个基于图的表示来对点云数据进行分割,算法的核心是在局部区域中进行凸凹性分析,以保持聚类的局部凸凹性质,具体来说,该算法使用点云数据的曲率信息和邻域信息来计算每个点的凸凹性质,并使用这些信息来构建基于图的表示,然后,使用图论中的标签传播算法,将点云数据分割为不同的聚类,在分割过程中,保留局部凸凹性质,以获得更加准确的聚类结果。
pcl::RegionGrowing使用了一种基于区域增长的方法来分割点云数据,该算法使用一种增长策略,将种子点作为开始点,不断将邻近点添加到同一个区域中,它的主要思路是对于每个种子点,寻找与之相邻的所有点,并将这些点与种子点放在同一个区域中,这样就得到了一个较大的区域,然后,对于每个边缘点,判断它是否应该属于当前区域,并将其添加到区域中,当没有边缘点可以添加到区域时算法结束。
pcl::RegionGrowingRGB是基于RGB颜色信息进行区域生长分割的模块,它基于局部颜色相似性度量邻域内点之间的相似性,并在此基础上将相似的点合并成一个聚类。
pcl::SACSegmentation用于估计点云中符合特定模型的参数以及对应的点集。它支持对于多种基础的模型进行拟合,如平面、球、圆柱、圆锥等,SACSegmentation采用随机抽样一致性(RANSAC)算法来实现,可以在噪声点云数据中快速鲁棒地估计模型参数。该模块使用时主要涉及到以下几个步骤:
1. 选择模型类型:通过设置SACSegmentation对象的模型类型,如SACMODEL_PLANE(平面)、SACMODEL_SPHERE(球)等,来指定需要估计的模型类型。
2. 设置点云数据:将需要进行模型拟合的点云数据通过setInputCloud()函数设置进去。
3. 设置模型拟合参数:通过setModelType()函数来设置模型类型后,可以通过setMethodType()函数来设置模型拟合所采用的方法类型,如SAC_RANSAC(随机抽样一致性)或SAC_LMEDS(最小中值平方差)等。此外,还需要设置一些其他的参数,如采样的最大迭代次数、采样时随机选择的最小点数、距离阈值等。
4. 进行模型拟合:通过调用SACSegmentation对象的segment()函数来进行模型拟合。
5. 获取拟合结果:可以通过调用SACSegmentation对象的getResult()函数来获取拟合的结果,包括拟合的模型参数以及对应的点集等信息。
pcl::SACSegmentationFromNormals用于从带有法向量信息的点云数据中分割出一个特定模型,该模块的原理是基于采样一致性(Sample Consensus,SAC)算法的。
pcl::SeededHueSegmentation是一个基于色调的点云分割算法,它可以根据种子点(seed)和颜色信息将点云分割成多个颜色相似的部分。
pcl::SegmentDifferences它可以用于对两个点云数据进行分割,找出它们之间的差异部分,该模块可以接收两个点云数据,分别为源点云和目标点云,找出两者之间的差异点云。原理是将目标点云数据逐个点与源点云数据进行比较,找出不同点云数据,将不同点云数据打上标记。标记可以是一些自定义的颜色或者其它形式,以便于后续的分析处理。
pcl::SupervoxelClustering是PCL库中用于超像素分割的模块,它基于传统的区域生长方法实现,旨在将3D点云数据分割为连续的超像素群体,以便在处理大规模点云数据时提高计算效率。原理:该算法基于颜色空间中的RGB值和3D坐标信息计算每个超像素的特征,使用k-means算法对特征进行聚类,将相邻的超像素合并到一起形成连续的超像素群体,其中,颜色空间中的RGB值和3D坐标信息是可以自定义的,可以根据不同应用场景自行选择特征信息。
资源
自动驾驶及定位相关分享
【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法
自动驾驶中基于激光雷达的车辆道路和人行道实时检测(代码开源)
更多文章可查看:点云学习历史文章大汇总
SLAM及AR相关分享
结构化PLP-SLAM:单目、RGB-D和双目相机使用点线面的高效稀疏建图与定位方案
更多详细内容后台发送“知识星球”扫码加入知识星球查看原文。
智驾全栈与3D视觉学习星球:主要针对智能驾驶全栈相关技术,3D/2D视觉技术学习分享的知识星球,将持续进行干货技术分享,知识点总结,代码解惑,最新paper分享,解疑答惑等等。星球邀请各个领域有持续分享能力的大佬加入我们,对入门者进行技术指导,对提问者知无不答。同时,星球将联合各知名企业发布自动驾驶,机器视觉等相关招聘信息和内推机会,创造一个在学习和就业上能够相互分享,互帮互助的技术人才聚集群。
以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除
扫描二维码
关注我们
让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入知识星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。
分享及合作方式:微信“920177957”(需要按要求备注) 联系邮箱:dianyunpcl@163.com,欢迎企业来联系公众号展开合作。
点一下“在看”你会更好看耶