基于Delaunay三角网的边缘检测

1、背景介绍

      Delaunay三角网是一种在平面上对一组点构造三角网格的方法,其中任何点都不在由其周围点形成的任何三角形的外接圆内部。这种方法确保了三角形尽可能接近等边三角形,从而避免了狭长的三角形。如下图所示,为利用平面上点集构建生成的 Delaunay三角网,包括若干个三角形,而每个三角形所处位置不同,比如有的位于三角网边缘处,有的位于内部。因此,根据这一特性,可以根据Delaunay三角网进行边缘检测,实现效果如右图所示,其将边缘点连接起来线段。

2、Delaunay属性及边界点提取原理

      python中专门构建Delaunay的第三方库,在scipy库中。生成的三角网,其包括2类属性:三角形顶点索引、近邻三角网索引。

2.1 三角形顶点索引

      三角形顶点索引是记录组成三角形顶点,在原始点中的序列号。如下图所示,总共5个点,编号分别为0、1、2、3、4。Delaunay共生成4个三角。那么三角形索引,则是记录每个三角形中三个顶点,由这5个顶点中哪3个顶点组成。可知:

三角形 1:4 1 0

三角形2:    4 2 1

三角形3: 4 1 3

三角形4:    4 2 3

2.2 三角形邻域信息

      三角形邻域信息,则是记录与该三角形相邻的信息。上述Delaunay三角网的三角形邻域信息如下。对于非零数字,表示与之相邻的三角形,其索引号;对于-1数字,则表明没有邻域三角形与之对应。

第一行[1, 3, -1]表示第一个三角形的邻域信息

  • 第一个邻域三角形的索引是1
  • 第二个邻域三角形的索引是3
  • 第三个边没有邻域三角形(因为它位于整个Delaunay三角剖分的边界上),所以标记为-1

  第二行[0, 2, 3]表示第二个三角形的邻域信息:

  • 第一个邻域三角形的索引是0
  • 第二个邻域三角形的索引是2
  • 第三个邻域三角形的索引是3
Neighbors: [[1, 3, -1],[0, 2, 3],[1, 3, -1],[0, 1, 2]]

3.3 基于Delaunay三角网提取边缘点原理

        因此,根据上述介绍,可以采用如下步骤提取边缘点:对于每个三角形,对其每个邻域信息进行判断。若邻域信息中存在-1,则表明该三角网中存在边界边。将边界边提取出来,即可实现边缘点提取。

3、代码测试与结果分析

    本程序基于python代码进行编写,在pycharm平台上进行运行,结合三方库scipy中Delaunay构建三角网。源代码下载链接:​​​​​​https://download.csdn.net/download/qq_32867925/89562829

 3.1  简单图形测试

     使用5个点构成的简单图形进行测试,测试结果如下图所示。5个点共生成4个三角形,提取的边界点连接,生成的多边形如右图,提取效果比较理想

Delaunay三角网边界点连接成的边(红色)

 3.2  简单图形测试

       随机生成100个平面点,生成的三角网如下。利用提取的边界点,生成的边界边效果还算比较理想。

Delaunay三角网边界点连接成的边(红色)

4、总结

     介绍了利用Delaunay三角网提取点云边缘的原理,并给出测试结果。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch使用教学2-Tensor的维度

在PyTorch使用的过程中,维度转换一定少不了。而PyTorch中有多种维度形变的方法,我们该在什么场景下使用什么方法呢? 本小节我们使用的张量如下: # 一维向量 t1 torch.tensor((1, 2)) # 二维向量 t2 torch.tensor([[1, 2, 3], …

【数据结构--查找】

目录 一、查找(Searching)的概念1.1、基本概念1.2、算法的评价指标 二、顺序查找2.1、算法思想2.2、算法实现2.2.1、常规顺序查找2.2.2、带哨兵的顺序查找 2.3、效率分析2.4、优化2.4.1、针对有序表2.4.2、被查效率不相等 三、折半查找3.1、算法思想3.2、…

mysql面试(四)

前言 本章节有些长,主要的篇幅是介绍缓存页的算法,如何快速的定位哪些是没有用过的,哪些是用过的,哪些是要淘汰掉的。 建议可以阅读一下这里面LRU算法相关的内容,和很多组件里面基本原理都是想通的,比如re…

总结20个Python接单赚钱的平台,兼职月入6000+_让你早日实现财富自由

今天就给大家盘点几个基本入门接私活的资源,让你轻松学python,实现经济独立。 一、Python兼职种类: 接私活刚学会python那会,就有认识的朋友介绍做一个网站的私活,当时接单赚了4K,后又自己接过开发网站后…

Delphi5实现随机数生成并查找最大值

效果图 输入框不可修改 设置edit控件的readonly属性为true。 生成随机数 Randomize 函数通过获取系统时钟的当前时间(或其他系统特定的随机源)来自动设置随机数生成器的种子。这样,每次程序运行时,由于系统时间的不同&#xff…

NLP之词的向量化

文章目录 前言One-hot编码one-hot编码-缺点 word2vec-词向量基于语言模型的训练方式基于窗口——CBOW基于窗口——SkipGram 前言 向量对于机器学习非常重要,大量的算法都需要基于向量来完成。对于机器来说,字符是没有含义的,只是有区别。只使用字符无法去…

爬虫开发中AttributeError的快速解决方法

在网络爬虫开发过程中,AttributeError是一个常见且令人头疼的问题。这个错误通常是由于尝试访问一个对象中不存在的属性而引发的。本文将概述如何快速定位和解决AttributeError,并提供使用爬虫代理IP和多线程技术提高爬取效率的示例代码。 概述 Attrib…

mysql 数据库空间统计sql

mysql 数据库空间统计 文章目录 mysql 数据库空间统计说明一、数据库存储代码二、查询某个数据库的所有表的 代码总结 说明 INFORMATION_SCHEMA Table Reference 表参考 information_schema是‌MySQL中的一个特殊数据库,它存储了关于所有其他数据库的元数据信息。…

物理机 gogs+jenkins+sonarqube 实现CI/CD

一、部署gogs_0.11.91_linux_amd64.tar.gz gogs官网下载&#xff1a;https://dl.gogs.io/ yum -y install mariadb-serversystemctl start mariadbsystemctl enable mariadbuseradd gittar zxvf gogs_0.11.91_linux_amd64.tar.gzcd gogsmysql -u root -p < scripts/mysql.…

xLua | xLua Framework | 2 加载

0. 基础 0.1 不同加载模式 测试用 编辑器模式&#xff1b;打包模式&#xff1b;更新模式 public enum GameMode {EditorMode,PackageBundle,UpdateMode, } 0.2 加载资源步骤与接口 private void LoadAsset(string assetName, Action<Object> action) {if (AppConst.G…

c++ 求解质因数(细节详解)

定义 这里先来了解几个定义&#xff08;如已了解&#xff0c;可直接看下一个板块&#xff09; 因数&#xff1a;又称为约数&#xff0c;如果整数a除以整数b&#xff08;b0&#xff09;的商正好是是整数而没有余数&#xff0c;我们就说b是a的因数 质数&#xff1a;又称为素数…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十章 Linux设备树

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

儿童洗衣机什么牌子质量好?五款质量上乘机型推荐

在当今繁忙的生活中&#xff0c;儿童洗衣机已成为我们日常生活中不可或缺的家电。但是&#xff0c;面对市场上众多品牌的儿童洗衣机&#xff0c;那么&#xff0c;到底儿童洗衣机哪个牌子好&#xff1f;本次我将在这篇文章中探讨儿童洗衣机的选购策略&#xff0c;以帮助大家找到…

Logitech Media Server已更名为Lyrion Music Server

还以为是个新软件&#xff0c;折腾之后来才发现 &#xff0c;Lyrion Music Server 原名叫 Logitech Media Server&#xff0c;只是现在它已不再由 Logitech 拥有和维护&#xff0c;已完全移交给社区&#xff0c;因此更名&#xff0c;但简称依然还是 LMS。镜像目前还是延续了 lo…

Python Flask入门到精通:详细教程和实战案例

前言 Flask是一个轻量级的Web框架&#xff0c;用于快速开发Web应用程序。它的设计理念是简洁、灵活和易于扩展&#xff0c;非常适合于从简单的单页应用到复杂的大型项目。通过Flask&#xff0c;可以创建各种Web应用程序&#xff0c;比如博客、电子商务网站、RESTful API等。 …

在 LCD 上显示 png 图片-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

在 LCD 上显示 png 图片 PNG 简介 无损压缩&#xff1a;PNG 使用 LZ77 派生算法进行无损压缩&#xff0c;确保图像质量不受损&#xff0c;且压缩比高 体积小&#xff1a;通过高压缩比&#xff0c;PNG 文件体积小&#xff0c;适合网络传输 索引彩色模式&#xff1a;PNG-8 格式…

结合el-upload上传组件,验证文件格式及大小

结合el-upload上传组件&#xff0c;验证文件格式及大小 效果如下&#xff1a; 代码如下&#xff1a; upgradeFirmwareInfo.vue页面 <template><div><el-dialog title"新增固件升级包" :visible.sync"dialogFormVisible"top"7vh&qu…

一年八百倍!刘邦不装杯!——早读(逆天打工人爬取热门微信文章解读)

台风格美&#xff0c;是比较倾向内陆的&#xff0c;大家注意安全 引言Python 代码第一篇 洞见 读懂了刘邦的人性哲学&#xff0c;你迟早脱离底层第二篇 看看新闻了 不小心越写越俗结尾 引言 这行情我TM真的越来越看不懂 现在的互联网太恐怖了 以前还好 很多散户都是懵懂懂的 现…

Java语言程序设计基础篇_编程练习题**15.28(显示一个转动的风扇)

**15.28(显示一个转动的风扇) 编写一个程序显示一个转动的风扇&#xff0c;如图15-33c所示。Pause、Resume和Reverse按钮用于暂停、继续和反转风扇的转动 可修改编程练习题14_9的代码 习题思路&#xff1a; 新建一个BorderPane&#xff0c;一个Pane和一个HBox&#xff0c;P…

javafx的ListView代入项目的使用

目录 1. 创建一个可观察的列表&#xff0c;用于存储ListView中的数据,这里的User是包装了用户的相关信息。 2.通过本人id获取friendid&#xff0c;及好友的id&#xff0c;然后用集合接送&#xff0c;更方便直观一点。 3.用for遍历集合&#xff0c;逐个添加。 4.渲染器&…