PCL 区域生长法原理及伪代码
作者:互联网
PCL 区域生长法原理及伪代码
原理
首先,它按曲率值对点进行排序。之所以需要这样做,是因为该区域从具有最小曲率值的点开始增长。这样做的原因是曲率最小的点位于平坦区域(从最平坦的区域增长可以减少段的总数)。
算法选取曲率值最小的点并开始区域的增长,直到点云中没有点为止。这个过程发生如下:
- 选取的点被添加到称为种子的集合中。
- 对于每个种子点,算法找到它的相邻点。
- 测试每个邻居的法线和当前种子点的法线之间的角度。如果角度小于阈值,则将当前点添加到当前区域。
- 之后,测试每个邻居的曲率值。如果曲率小于阈值,则将此点添加到种子中。
- 当前种子从种子中移除。
- 如果种子集变空,这意味着算法已经扩大了区域,并且从头开始重复该过程。
伪代码
PointCloud A; // A 代表点云
R_list; // 存放分类后的点云
while (! A.empty()) // A 不为空
{
// 初始化当前分类区域 R = 0
// 初始化当前种子集合 S = 0
// 从 A 中选取 曲率最小的点 Pmin
// 将 Pmin 加入种子集合 S, 当前分类区域 R, 从点云集合 A 中去除
for(;;) // 遍历种子集合 S
{
// 从种子集合中取出一个种子,寻找种子的近邻点,存至集合 R 中
for (;;) // 遍历近邻点集合 R
{
// 逐一从 R 中取出各点
if () // 判断该点的法线与种子点法线差值是否小于阈值
{
// 满足条件,将该点加入当前分类区域 R,从点云集合 A 中删除
if () // 判断该点的曲率与种子点曲率差值是否小于阈值
{
// 满足条件,将该点加入种子集合 S
}
}
}
}
// 将当前分类区域 R 加入分类列表 R_list 中
}
标签:当前,区域,代码,曲率,该点,种子,PCL,集合,原理 来源: https://blog.csdn.net/weixin_45867382/article/details/122017715