当前位置: 首页 > news >正文

基于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%少可一个点 for4x3=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;endend       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

http://www.lryc.cn/news/341972.html

相关文章:

  • C#三人飞行棋
  • Notes for the missing semester. Useful and basic knowledge about Linux.
  • 【信息系统项目管理师知识点速记】资源管理基础
  • Android性能优化面试题汇总
  • Ansible 自动化运维工具 - 了解和模块应用
  • AI神助攻!小白也能制作自动重命名工具~
  • (读书笔记-大模型) LLM Powered Autonomous Agents
  • 超分辨率重建——BSRN网络训练自己数据集并推理测试(详细图文教程)
  • C语言实现贪吃蛇
  • 高可用系列四:loadbalancer 负载均衡
  • Ruby递归目录文件的又一种方法
  • 【爬虫】爬取A股数据写入数据库(一)
  • 1-38 流资源类结构
  • nginx的前世今生(二)
  • 浏览器跨域详解
  • 华为5700配置
  • 使用Axios从前端上传文件并且下载后端返回的文件
  • open 函数到底做了什么
  • ue引擎游戏开发笔记(32)——为游戏添加新武器装备
  • 【个人博客搭建】(17)使用FluentValidation 参数校验
  • 数据结构===散列表
  • 10G MAC层设计系列-(2)MAC RX模块
  • 解码Starknet Verifier:深入逆向工程之旅
  • 【C++语言】类和对象--默认成员函数 (中)
  • 前端递归常见应用
  • AI工具如何改变我们的工作与生活
  • 深入了解C/C++的内存区域划分
  • C++构造函数和析构函数的调用顺序
  • 智能家居1 -- 实现语音模块
  • Leetcode 3139. Minimum Cost to Equalize Array