基于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/590087.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Mybaties-plus+Vue+elememt+hadoop + redis 医院就诊系统 设计与实现

一.项目介绍 前端:患者注册 、登录、查看首页、医生排班、药品信息、预约挂号、就诊记录、电子病历、处方开药、我的收藏 后端分为: 医生登录:查看当前排班信息、查看患者的挂号情况、设置患者就诊记录、电子病历、给患者开药和个人信息维护 …

安装部署大语言模型 | 通义千问

下载安装 进入ollama的仓库下载 「 qwen 7b 」 libraryGet up and running with large language models.https://ollama.com/library查找阿里的 「 qwen 」 根据自己的电脑配置情况,选择合适的模型 总体来说,模型是越大,效果越好&#xff0c…

Jammy@Jetson Orin Nano - Tensorflow GPU版本安装

JammyJetson Orin Nano - Tensorflow GPU版本安装 1. 源由2. 问题2.1 Tensorflow跑以下示例代码的时候,发现jtop中6个CPU占用率都跑满了。2.2 Jetson Orin Nano运行Tensorflow示例结果不一致 3. 分析3.1 当前版本Tensorflow 2.16.13.2 GPU版本二进制安装3.3 GPU版本…

Nginx深度解析:核心特性、应用场景与全局、events、http等全面配置指南

Nginx是一款高性能的Web服务器与反向代理服务器软件,以其高并发处理能力、低内存消耗和反向代理负载均衡功能闻名。它通过事件驱动、异步非阻塞I/O模型,实现了极高的效率和稳定性,广泛应用于网站部署、API代理、静态资源服务及微服务架构中&a…

边沿JK触发器

边沿JK触发器 电路组成 & 逻辑符号 工作原理 Q n 1 D Q^{n1}D Qn1D J Q n ‾ K Q n ‾ \overline{\overline{JQ^n}KQ^n} JQn​KQn​ ( J Q n ) ( K ‾ Q n ‾ ) (JQ^n)(\overline{K}\overline{Q^n}) (JQn)(KQn​) J K ‾ J Q n ‾ K ‾ Q n Q n ‾ Q n J\over…

《HCIP-openEuler实验指导手册》1.6 Apache静态资源配置(目录访问)

知识点 常用用途: 软件仓库镜像及提供下载服务: 配置步骤 删除网站主目录中的文件(本实验机目录为/home/source ip为192.168.12.137 端口为81) cd /home/source rm -rf *在主目录中新建6个文件夹如下图 mkdir test{1..6}新建…

Eclipse 开创性地集成 Neon Stack,将 EVM 兼容性带到 SVM 网络

2024年5月2日,全球——在塑造区块链网络的战略联盟的过程中,Eclipse 通过集成 Neon EVM 核心团队开发的技术堆栈 Neon Stack,成为首个打破 EVM-SVM 兼容性障碍的生态。 Eclipse 旨在通过结合以太坊和 Solana 的最佳特性,来重构区…

SpringBoot-@Transactional注解失效

Transactional注解失效 Transactional失效场景 以下是一些常见导致Transactional注解失效的场景,配合相应的Java代码演示: 1、方法修饰符非公开(非public) Transactional注解失效的原因在于Spring事务管理器如何实现对事务的代…

LeetCode135:分发糖果

题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果,计算并返回需…

Java -- (part20)

一.Map集合 1.概述 双列集合的顶级接口 2.实现类 HashMap 特点: a.key唯一,value可重复->如果key重复了,会发生value覆盖 b.无序 c.无索引 d.线程不安全 e.可以存null键null值 数据结构: 哈希表 方法: LinkedHashMap 特点: a.key唯一,value可重复->如果ke…

动态规划-回文子串问题

文章目录 1. 回文子串(647)2. 最长回文子串(5)3. 分割回文串 IV(1745)4. 分割回文串 II(132)5. 最长回文子序列(516)6. 让字符串成为回文串的最少插入次数&am…

【千帆平台】使用AppBuilder三步手搓应用创建精准多轮对话agent之K12互动式练习题

欢迎来到《小5讲堂》 这是《千帆平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言创建应用应用头像应用名称应用描述角色指令能力扩展开场白 …

ImportError: DLL load failed while importing win32api: 找不到指定的模块

问题描述 在pip install pywin32后有概率出现import win32api 报错ImportError: DLL load failed while importing win32api: 找不到指定的模块。怎么解决,更新重装都不行。下面给出个人可行的解决方案。 解决方案: 1、打开cmd切换到环境的Scripts文件…

【Linux】常用命令大揭秘,轻松驾驭终端世界

常见命令大全 概念1.1:开源、闭源的区别1.2:应用场景 发行版XShell3.1:使用XShell登入主机3.2:普通用户的增加、删除3.3:查看账户的信息whoami指令who指令 文件和目录基本命令4.1:指令的周边知识文件路径Li…

基于Unity+Vue通信交互的WebGL项目实践

unity-webgl 是无法直接向vue项目进行通信的,需要一个中间者 jslib 文件 jslib当作中间者,unity与它通信,前端也与它通信,在此基础上三者之间进行了通信对接 看过很多例子:介绍的都不是很详细,不如自己写&…

大语言模型在人类层面预测未来的研究与应用

概述 这项研究将探讨语言模型(LM)能否预测未来事件。在这项研究中,将开发一个系统来自动收集信息、生成和汇总预测结果。将从一个竞争性预测平台收集有关问题的数据,以评估 LM 的预测能力。结果表明,LM 可以与具有竞争…

STL中常见的算法及其应用(一)

总述: 一、常见的遍历算法 1、for_each//遍历容器 函数原型: for_each(iterator beg, iterator end, _func); beg:开始迭代器; end:结束迭代器; _func:函数或者函数对象; 总结:for_each函数在STL中十分重要,需要熟练掌握 示例: std::for_each 是 C++ 标准…

C#语言入门

一、基础知识 1. 程序语言是什么 用于人和计算机进行交流,通过程序语言让计算机能够响应我们发出的指令 2. 开发环境 IDE,集成开发环境。它就是一类用于程序开发的软件,这一类软件一般包括了代码编辑、编译器、调试器、图形用户界面等等工…

基于缓存注解的时间戳令牌防重复提交设计

文章目录 一,概述二,实现过程1、引入pom依赖2、定义缓存管理3、时间戳服务类4、模拟测试接口 三,测试过程1, 模拟批量获取2, 消费令牌 四,源码放送五,优化方向 一,概述 API接口由于…

IDEA 多模块项目报错 Cannot Save Settings 问题

IDEA 多模块项目报错 Cannot Save Settings 问题 Cannot Save Settings: Module "spring_cloud_sentinel_demo" must not contain source root "D:\java_test\Intesij_idea\spring_cloud_sentinel_demo\order_service_rest\src\main\resources"…