基于alpha shapes的点云边缘点提取(python编程)

1、原理介绍

       由Edelsbrunner H提出的alpha shapes算法是一种简单、有效的快速提取边界点算法。如下图所示,对于任意形状的平面点云,若一个半径为a的圆,绕其进行滚动,其滚动的轨迹形成的点为轮廓点。需要注意的是,alpha shapes算法只能探测二维点的轮廓点。因此在提取点云轮廓点直线,需要将点投影在二维平面上,一般是XOY平面,此时将所有点的z坐标均设置成相同的常数即可,如z=0。

 

2、部分代码解析

      基于python的alpha shapes算法进行边缘检测,其涉及到2个库,可视化库matplotlib,搜索近邻点库scipy。测试可视化结果包括原始点云可视化、边缘提取结果可视化、边缘点与原始点云可视化、滚动圆可视化四部分。

      基于python编写的源代码下载链接:https://download.csdn.net/download/qq_32867925/89431667

   文件包括程序脚本alphashapes提取边缘.py以及3个测试数据,如下图所示。

    将py文件直接在pycharm中打开,并点击绿色三角进行运行即可,如下图所示。

2.1 点云读取    

      在测试时,利用列表结构将文本点云数据进行存储,如下:

with open('E:\\圆形.txt', 'r') as file:
    # 初始化一个列表来存储所有的点
    points2D = []
    points3D = []

    # 逐行读取数据
    for line in file:
        # 去除行尾的换行符并分割字符串
        x, y, z= line.strip().split(',')
        # 将字符串转换为浮点数
        x = float(x)
        y = float(y)
        z = float(z)
        # 将点添加到列表中
        points2D.append((x, y))

2.2 判断点是否为边缘点

      判断一个点是否为边缘点,即所有点到计算的两个圆距离,若均大于半径,则为边缘点,否则为非边缘点。不分代码如下:

        if count == len(nearpts)-1: #全部属于某一个圆
            bounpts.append((x,y))
            circle_XY.append((x2,y2))
            break
        elif count01 == len(nearpts)-1:#全部属于某一个圆
            bounpts.append((x,y))
            circle_XY.append((x21,y21))
            break

3、结果测试

      源代码基于python编写,在pycharm平台上运行,下载链接如下:https://download.csdn.net/download/qq_32867925/89431667?spm=1001.2014.3001.5503

3.1 无孔洞点云

      如下图为一圆形形状点云边缘点提取结果,可以发现提取的边缘点比较理想,边缘点都被准确提取出。同时,滚动圆位于边缘点,符合算法原理,即滚动圆绕圆进行滚动,滚动轨迹即为边缘点。

原始点云可视化边缘点可视化
边缘点与原始点云可视化滚动圆提取边缘点可视化

   3.2 有孔洞点云

         有些特殊形状的点云,如包含内部孔洞,alpha shapes仍可以准确提取出来,且效果不错,如下图所示,滚动圆在内部进行滚动,提取出轮廓边缘点,效果理想,说明程序运行正确。

原始点云可视化边缘点可视化
边缘点与原始点云可视化滚动圆提取边缘点可视化

3.3 滚动圆半径对结果影响

       如下图所示,展示了不同滚动圆半径对提取结果的影响,其中左边图轮廓点,与右边滚动圆相对应。

4、总结

      介绍了基于python语言,根据alpha shapes算法提取轮廓点,并使用图像对原理进行展示。

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: PCL(Point Cloud Library)是一个用于点云数据处理的开源库,它提供了大量的算法和工具来处理点云数据。而PCL alpha shapes方法是PCL中的一种算法,用于提取平面点云边界特征。 平面点云是在三维空间中表示表面的的集合。而平面点云边界特征是指该点云边界形状和结构。PCL alpha shapes方法基于alpha形状,能够自动从点云提取出平面点云边界特征。 alpha形状是指包围点云的一系列形状,其中每个形状都由一组alpha值确定。alpha值控制了形状的光滑程度,较大的alpha值会产生更平滑的形状,而较小的alpha值会产生更多边的形状。PCL alpha shapes方法会通过调整alpha值来生成一系列形状,并计算每个形状的体积。最终选择体积最大的形状作为平面点云边界特征。 使用PCL alpha shapes方法进行平面点云边界特征提取的步骤如下: 1. 从点云数据中提取出平面点云,例如通过使用平面拟合算法提取平面模型。 2. 根据提取到的平面点云,构建点云对象。 3. 初始化PCL alpha shapes方法的参数,例如设置alpha值的范围和步长。 4. 调用PCL alpha shapes方法,通过遍历不同的alpha值进行形状计算和体积计算。 5. 选择体积最大的形状作为平面点云边界特征。 6. 可以根据需要进一步处理和分析边界特征,例如提取边界边界曲线。 总的来说,PCL alpha shapes方法可以有效地提取平面点云边界特征,为后续的点云处理和分析提供基础。它可以应用于许多领域,例如三维建模、地形分析和机器人导航等。 ### 回答2: pcl alpha shapes是一种用于平面点云边界特征提取的方法。它基于alpha形状的概念,将点云分为内部和外部两部分。alpha形状是在点云中定义的一个凸体,具有不同的形状和大小。 首先,我们需要通过点云数据构建有向无环图(DAG)。这个DAG可以表示点云中的拓扑结构,每个节代表一个,节之间的边代表之间的邻近关系。然后,我们需要计算alpha值,它是一个介于0和无穷大之间的阈值。alpha值越小,形状越平滑;alpha值越大,形状越复杂。 然后,我们需要根据alpha值对DAG进行拓扑排序,并从最小的alpha开始处理。对于每个alpha,我们找到对应的alpha形状。我们通过从内部到外部构建alpha形状来获得点云边界特征。每当遇到重叠的alpha形状时,我们计算边界alpha形状,并将其添加到结果中。 在计算alpha形状时,我们使用增量算法来优化计算效率。通过添加和移除来逐步构建alpha形状,直到满足alpha值的约束条件。对于每个,我们计算其球半径,并与alpha值进行比较。如果球半径大于alpha值,则将被舍弃,否则将被添加到alpha形状中。 通过这种方式,pcl alpha shapes可以提取平面点云边界特征。它能够识别点云边界结构,并返回一个表示点云边界的几何形状。这对于物体识别、三维建模和场景分析等应用非常有用。 ### 回答3: PCL Alpha Shapes 是一种用于平面点云边界特征提取的算法。它的主要目标是从点云数据中提取曲面边界信息,通过计算点云Alpha形状,来获得边界特征。 具体来说,Alpha形状是一个可以描述几何体边界的参数。Alpha形状的计算是基于一系列重心相邻三角形,其中每个三角形的边长都小于或等于Alpha值。当Alpha值很小时,Alpha形状就会更接近于一个紧凑的表面形状,而当Alpha值增大时,形状则会变得更加平滑。 使用PCL Alpha Shapes算法进行平面点云边界特征提取的步骤如下: 1. 通过某种方法从点云中移除噪声和离群,以减小Alpha形状的计算误差。 2. 利用PCL库中的函数计算每个Alpha形状。 3. 根据Alpha形状的计算结果,可以获得不同形状的边界特征,例如:圆形、椭圆形等。 4. 可进一步根据需求,设置Alpha值的范围来控制边界形状的复杂度。 5. 最后,可以通过可视化工具将提取到的边界特征呈现出来,以便直观地观察和分析结果。 总而言之,通过使用PCL Alpha Shapes算法,可以快速而准确地提取平面点云中的边界特征,帮助我们更好地理解和分析点云数据的几何结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云实验室lab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值