基于alpha shapes的边缘点提取(matlab)

1、原理介绍

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

2、测试结果

      基于MATLAB的alpha shapes的边缘点提取,主要包括原始点云可视化、提取边缘点可视化、原始点云与提取边缘点可视化、滚动圆可视化4块部分。

     代码下载链接:https://download.csdn.net/download/qq_32867925/89252183

     在测试数据时,只需要将load中加载数据进行修改即可。使用是,将matlab软件当前路径设置为alphashapedetectbounpts.m文件所在路径。

    部分代码展示:

   使用kdtree搜索近邻点:

[idx,D]=rangesearch(data,data,2*r);%使用kdtree搜索近邻点

判断一个点是否为边缘点:

        for k=1:knn-1%少可一个点 for4
            x3=currentKNN(k,1);
            y3=currentKNN(k,2);
            d1=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
            d2=sqrt((x3-x21)*(x3-x21)+(y3-y21)*(y3-y21));           
            if (d1>r)
                count=count+1;
            elseif(d2>r)
                count01=count01+1;
            end
        end       
        if (count==knn-1)
             bounpts=[bounpts;data(i,1),data(i,2)];
             circle_XY=[circle_XY;x2,y2];
             break;
        elseif (count01==knn-1)
            bounpts=[bounpts;data(i,1),data(i,2)];  
            circle_XY=[circle_XY;x21,y21];
            break;%终止for3  

2.1无孔洞点云

      如下图为无孔洞点云,alpha shapes提取的边缘点符合真实情况,将边缘点构成的圆进行可视化,可以发现滚动圆均位于外侧,表明该算法提取的边缘点,类似一个滚动圆滚动点云而得到。

原始点云 边缘点提取结果
原始点与边缘点 滚动圆与边缘点

2.2有孔洞点云

      如下图为无孔洞点云,alpha shapes提取的边缘点符合真实情况,将边缘点构成的圆进行可视化,可以发现滚动圆均位于外侧,表明该算法提取的边缘点,类似一个滚动圆滚动点云而得到。同时,位于内部的边缘点,也被准确提取出,效果理想。

原始点云 边缘点提取结果
原始点与边缘点 滚动圆与边缘点

3、总结

      基于alpha shapes提取边缘时,该方法只能提取位于一个平面上的点云数据的边缘,且只与滚动圆半径相关,提取效果一般比较理想。

基于matlab的源码下载链接:https://download.csdn.net/download/qq_32867925/89252183

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 11:56:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 11:56:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 11:56:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 11:56:06       18 阅读

热门阅读

  1. C++ QT设计模式:备忘录模式

    2024-05-10 11:56:06       9 阅读
  2. Visual Studio和Visual Studio Code适用于哪些编程语言

    2024-05-10 11:56:06       10 阅读
  3. DevOps技术栈(Nginx)

    2024-05-10 11:56:06       10 阅读
  4. c#:求所有水仙花数的和

    2024-05-10 11:56:06       9 阅读
  5. 1329. 将矩阵按对角线排序

    2024-05-10 11:56:06       13 阅读
  6. RUST编程语言入门基础2024

    2024-05-10 11:56:06       13 阅读
  7. 算法题:动态规划

    2024-05-10 11:56:06       12 阅读
  8. webpack4和webpack5区别4---自动清除打包目录

    2024-05-10 11:56:06       9 阅读
  9. .net 生成二维码图片

    2024-05-10 11:56:06       8 阅读
  10. 对话机器人技术解说

    2024-05-10 11:56:06       10 阅读
  11. 金融名词剖析:77个“支付近义词”辨析

    2024-05-10 11:56:06       12 阅读