文章目录
-
-
-
- 一、算法原理
-
- 1、输入
- 2、初始化
- 3、算法
- 二、代码部分
- 三、代码解释
- 参考文献
-
-
本文,我们将学习如何使用
pcl::RegionGrowing
类中实现的区域生长算法。该算法的目的是合并在平滑度约束方面足够接近的点。因此,该算法的输出是簇的集合,其中每个簇被认为是同一光滑表面的一部分的一组点。该算法基于点法线之间的角度的比较。
一、算法原理
首先,让我们看看该算法是如何工作的。第一步,按曲率值对点进行排序。这样做是因为区域从具有最小曲率值的点开始增长。曲率最小的点位于平坦区域(从最平坦区域开始增长可以减少线段总数)。
这样我们就有了排序后的云。直到点云中没有未标记的点,算法会选取曲率值最小的点并开始区域的增长。该过程如下:
- 选择的点添加到种子集中
- 对于每个种子点,算法都会找到它的近邻点
- 每个邻域都会测试其法线与当前种子点法线之间的角度。如果角度小于阈值,则将当前点添加到当前区域;
- 之后,测试每个邻域的曲率值。如果曲率小于阈值,则将该点添加到种子集中;
- 从种子集中取出当前种子。
如果种子集变空,则意味着算法已经增长了该区域,并且从头开始重复该过程。您可以在下面找到该算法的伪代码。