CGAL的三角曲面网格骨架化

1、介绍

马模型的曲线骨架。 

        骨架是用于分割、形状匹配、重建、虚拟导航等的有效形状抽象。顾名思义,曲线骨架是曲线结构的图(1D)。对于3D几何体来说,它不是由表面(2D)组成的中轴。如图所示,形状的曲线骨架捕捉其基本拓扑。在这个包中,我们实现了中描述的平均曲率骨架算法,该算法通过迭代收缩输入的三角曲面网格,从无边界的三角曲面中提取曲线骨架。

2、使用

2.1、输入输出

        输入是一个三角表面网格,FaceListGraph 概念的模型(CGAl::Surface_mesh,CGAL::Polyhedron_3),它没有边界,只有一个连接的组件。骨架以 boost::adjacency_list 类型的图提供。骨架的每个顶点都与一个 3D 位置点和一组输入顶点相关联,这些输入顶点与该骨架顶点相联系。请注意,由于骨架的构造过程,骨架顶点可能没有相应的输入顶点。

        此软件包需要稀疏线性求解器,我们建议使用 Eigen 3.2 或更高版本。

        输入和输出如图所示。

         左图:章鱼的输入三角曲面网格模型;中:使用该包提取的平均曲率流骨架;右:输入曲面的每个顶点都与一个骨架顶点相关联。

2.2、自由函数

        如果FaceListGraph概念的CGAL模型(如CGAL::Surface_mesh或CGAL::Polyhedron_3)用作三角化输入曲面网格,Eigen 3.2或更高版本可用,并且定义了CGAL_EIGEN3_ENABLED,则函数CGAL::extract_mean_curvature_flow_skeleton()可用于使用默认参数从输入曲面网格提取平均曲率流骨架,其在大多数情况下工作良好。

2.3、函数对象的高级用法

        类CGAL::Mean_curvature_flow_skeletonization允许使用低级别函数,如contract_geometry()和collapse_edges()。该类还允许更改算法的参数,例如通过调用set_is_medially_centered()。该类允许用户完全控制算法的每一步以及中间收缩网格(称为细观骨架),如图所示。

        图中马的平均曲率流量收缩的三次迭代。红色点表示曲面局部退化为曲线结构的顶点。 

2.4、通过骨骼化进行分割

        作为概念验证,我们展示了如何使用骨架以及输入顶点与骨架的关联,使用包“三角曲面网格分割”来计算输入三角曲面网格的分割。分割算法包括为输入网格的每个面计算形状-直径函数,然后解决图形切割问题。在这里,我们使用骨架来定义一个新的形状-直径函数。具体来说,对于每个面,我们将直径值计算为其三个入射顶点与其相应骨骼点之间的平均距离。该分割的结果如图所示。

        左图:从三角曲面网格中提取的曲线骨架;右图:分割使用骨架来计算形状直径函数。 

3、性能

        大象模型用于说明平均曲率流骨架化过程的性能。使用了通过循环细分获得的模型的不同分辨率。
        如图所示,曲面采样越多,骨架在模型内就越好。

        大象模型的头部骨架。左图:使用原始网格(2775个顶点);中间:在一个循环细分步骤(11112个顶点)之后;右:在两个循环之后细分步骤(44460个顶点)。 

        extract_mean_curvature_flow_skeleton()的运行时间(以毫秒为单位),使用多面体3<Simple_cartesian<double>>作为输入数据结构。如果使用Surface_mesh<Simple_cartesian<double>::Point_3>,则运行时类似。当“特征”可用时,使用的解算器是默认解算器。

Number of loop subdivision of elephant.offNumber of verticesRuntime in s
02,7750.46
111,1121.26
244,4605.64
3177,85226.26

 4、其他

        Mean_curvature_flow_skeletonization::contract_geometry是CGAL库中的一个函数,用于在骨架化过程中收缩几何体。

        Mean_curvature_flow_skeletonization::collapse_edges是CGAL库中的一个函数,用于在骨架化过程中折叠边。

        Mean_curvature_flow_skeletonization::split_faces是CGAL库中的一个函数,用于在骨架化过程中分割面。

        Mean_curvature_flow_skeletonization::detect_degeneracies是CGAL库中的一个函数,用于在骨架化过程中检测退化情况。

        Mean_curvature_flow_skeletonization::contract是CGAL库中的一个函数,用于在骨架化过程中收缩骨架。

        Mean_curvature_flow_skeletonization::contract_until_convergence是CGAL库中的一个函数,用于在骨架化过程中持续收缩骨架,直到收敛为止。

        Mean_curvature_flow_skeletonization::convert_to_skeleton是CGAL库中的一个函数,用于将骨架化结果转换为骨架。

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

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

相关文章

VMvare虚拟机之文件夹共享防火墙设置

目录 一.jdk的配置&TomCat的配置 1.1 jdk配置 1.2 tomcat配置 二.文件夹共享功能 2.1 作用 2.2.高级共享和普通共享 三.防火墙设置 3.1 入站规则和出站规则 四.附图-思维导图 一.jdk的配置&TomCat的配置 建立一个共享文件夹,将jdk文件和tomcat文…

嵌入式——RTC内置实时时钟

学习目标 理解原理图RTC设计部分掌握初始化RTC掌握设置时间掌握读取时间学习内容 RTC原理图 RTC结构框图 RTC时钟 开发流程 加载依赖。gd32f4xx_rtc.c,gd32f4xx_pmu.c初始化RTC。时钟配置。获取时钟。RTC初始化 // 电池管理加载 rcu_periph_clock_enable(RCU_PMU); pmu_back…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Progress进度条组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Progress进度条组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Progress组件 进度条也是UI开发最常用的组件之一,进度条组件…

分类预测 | Matlab实现SCSO-SVM基于沙猫群优化算法优化支持向量机的多变量分类预测【23年新算法】

分类预测 | Matlab实现SCSO-SVM基于沙猫群优化算法优化支持向量机的多变量分类预测【23年新算法】 目录 分类预测 | Matlab实现SCSO-SVM基于沙猫群优化算法优化支持向量机的多变量分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SCSO-…

docker部署kafka zookeeper模式集群

单机模式链接:https://blog.csdn.net/wsdhla/article/details/133032238 kraft集群模式链接:部署Kafka_kafka 部署-CSDN博客 zookeeper选举机制举例: 目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5…

如何通过内网穿透实现远程访问本地Linux SVN服务

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

Nature | 大型语言模型(LLM)能够发现和产生新知识吗?

大型语言模型(LLM)是基于大量数据进行预训练的超大型深度学习模型。底层转换器是一组神经网络,这些神经网络由具有自注意力功能的编码器和解码器组成。编码器和解码器从一系列文本中提取含义,并理解其中的单词和短语之间的关系。通…

python 通过opencv及face_recognition识别人脸

效果: 使用Python的cv2库和face_recognition库来进行人脸检测和比对的 0是代表一样 认为是同一人。 代码: pip install opencv-python pip install face_recognition# 导入cv2库,用于图像处理 import cv2 # 导入face_recognition库&#…

跨域 - CORS跨域资源共享介绍

目录 1,介绍2,简单请求判定交互规范 3,非简单请求交互规范1,发送预检请求2,预检请求响应3,浏览器发送真实的请求,服务器完成真实的响应。 附带身份凭证 相关内容: 浏览器同源策略和跨…

C# WPF上位机开发(MySql访问)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了数据库sqlite,不过这是一种小型的数据库,作为内部使用还可以。但是,如果要与外面的其他供应商进…

doris数据模型,06-Aggregate(聚合模型)

聚合模型的特点 将表中的列分为Key和Value。 Key是数据的维度列,比如时间,地区等等。key相同时会发生聚合。 Value是数据的指标列,比如点击量,花费等等。 每个指标列还会有自己的聚合函数,如:sum&#xff…

路由器常见故障分析及处理方法!

对当前的大多数网络来说,无论是实现网络互连还是访问Internet,路由器是不可或缺的。 由于路由器的重要性,对它的管理就成了维护人员的日常工作中重要的一部分,而路由器的故障分析和排除也是令许多维护人员极为困扰的问题之一。 路…

蓝牙物联网在智慧医疗中的应用

物联网技术开启了万物互联的时代,并且随着智慧城市建设的加速推进及物联网技术对各行业的逐步渗透,“智慧”概念应运而生,诸如智慧能源、智慧交通、智慧医疗等“遍地开花”,可以说,物联网技术给各行业带来了产业模式上…

asp.net core 教程

asp.net core 教程 写在前面新建项目Get和PostGETPOST MVC-模型控制视图如何通俗理解MVC代码实例 API模型(前后端分离)前端代码后端代码 文件配置优先级优先级顺序 从数据库读取配置文件数据缓存 写在前面 学了快一年多的C#了! 我最开始学的…

【数据结构入门精讲 | 第五篇】栈知识点及考研408、企业面试练习

在上一篇中我们进行了表的专项练习,在这篇文章中我们将介绍栈的相关知识点。 目录 基础概念顺序栈链栈判断题选择题填空题函数题R6-1 在一个数组中实现两个堆栈 编程题R7-1 汉诺塔的非递归实现R7-2 表达式转换R7-3 出栈序列的合法性R7-4 包装机R7-1 彩虹瓶 基础概念…

QT TCP通信:用QT制作一个TCPServer与TCPClient的通信

文章目录 前言1. TCP通信原理和流程阐述1.1 TCP 通信原理简述1.2 TCP服务端建立与通信流程1.3 TCP客户端通信流程 2. 关键源码阐述2.1 服务端代码2.2 客户端代码 总结 前言 之前项目上用到了TCP通信,作为TCP的服务端上位机与下位机进行控制信号传输。 这篇博客就对…

<meta name=“Keywords“ content=““ >、<meta name=“Description“ content=““ > 等用法解释

今天在看网站代码&#xff0c;发现类似<meta name"Keywords" content"" >、<meta name"Description" content"" >这样的写法&#xff0c;不知道具体代表什么意思&#xff0c;于是上网搜了一下&#xff0c;下面是在网上找到…

【Linux--信号】

目录 一、信号的概念1.1查看系统的信号1.2信号的处理方式 二、信号的产生方式2.1通过终端按键2.2kill命令2.3系统调用2.4软条件产生信号2.5硬件异常产生信号 三、信号的保存3.1概念的认识3.2sigset_t3.3信号集操作函数3.4sigprocmask && sigpending3.4.1sigprocmask3.4…

Java基础回顾——JDBC

文章目录 介绍使用JDBC事务JDBC BatchJDBC连接池 介绍 Java为关系数据库定义了一套标准的访问接口&#xff1a;JDBC&#xff08;Java Database Connectivity&#xff09; JDBC是Java程序访问数据库的标准接口 好处&#xff1a; 各数据库厂商使用相同的接口&#xff0c;Java…

udp广播的例子

以下是一个使用C语言描述广播发送和接收的简单示例&#xff1a; 发送端&#xff08;广播发送&#xff09;&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #inclu…