PCL中的点云分割算法

介绍

点云分割算法是点云处理中非常重要的一部分内容,扫描出来的点云往往是整幅场景,没有办法对其直接处理,这个时候就需要一些点云分割算法。

PCL是一个强大的库,已经帮我们封装好了许多分割算法,像平面模型、圆柱模型、立方体等一些规则模型的分割,和基于聚类方法的非规则模型的分割。

下面来具体介绍下PCL中主要的点云分割算法。

规则物体的模型分割

这种分割算法主要针对规则物体,比如球、圆柱、平面、立方体,因为这些模型可以很方便的建立起数学模型,后面通过RANSAC算法进行拟合,得出最终的分割模型,若一个场景中有多个规则模型,可以根据拟合的模型进行逐一分割,对相同规则的模型,则是从大到小开始分割。

基于聚类算法的分割

聚类算法在数据分析中应用非常广泛,同样,也适用于三维空间。基于k-means聚类算法,可以分割指定类别的点云。除了k-means,还有自适应类别分割算法。

区域蔓延分割

区域生长分割算法广泛应用于图像分割中,二维图像常常采取区域生长分割算法实现图像分割,由于其分割的高效性,现已被应用于3D分割中,PCL中的类pcl::RegionGrowing用来实现点云的区域生长分割。区域生长分割是基于点云法线的分割算法,算法的主要思路如下:

(1)根据点的曲率值对点云进行排序,曲率最小的点叫做初始种子点,区域生长算法从曲率最小的种子点开始生长,初始种子点所在区域为最平滑区域,从初始种子点所在的区域开始生长可减小分割片段的总数,从而提高算法的效率。

(2)设置一空的聚类区域C和空的种子点序列Q,选好初始种子点,将其加入种子点序列,并搜索该种子点的领域点,计算每一个领域点法线与种子点法线之间的夹角,小于设定的平滑阀值时,将领域点加入到C中,同时判断该领域点的曲率值是否小于曲率阀值,将小于曲率阔值的领域点加入种子点序列Q中,在Q中重新选择新的种子点重复上述步骤,直到Q中序列为空,算法结束。

基于欧几里德距离的分割算法

具体的实现方法大致是:

  1. 找到空间中某点p10,有kdTree找到离他最近的n个点,判断这n个点到p的距离。将距离小于阈值r的点p11,p12,p13…放在类Q里。
  2. 在 Q\p10 里找到一点p11,重复1。
  3. 在 Q\p10,p11 中找到一点,重复1,找到p12,p13,p14…全部放进Q里。
  4. 当 Q 再也不能有新点加入了,则完成搜索了。

你可能感兴趣的:(PCL点云处理)