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.hqwc.cn/news/300398.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[PyTorch][chapter 8][李宏毅深度学习][DNN 训练技巧]

前言: DNN 是神经网络的里面基础核心模型之一.这里面结合DNN 介绍一下如何解决 深度学习里面过拟合,欠拟合问题 目录: DNN 训练常见问题 过拟合处理 欠拟合处理 keras 项目 一 DNN 训练常见问题 我们在深度学习网络训练的时候经常会遇到下面…

20231225在WIN10下使用SSH连接Ubuntu20.04.6

20231225在WIN10下使用SSH连接Ubuntu20.04.6 2023/12/25 23:03 https://jingyan.baidu.com/article/5552ef479e1856108ffbc9e3.html Win10怎么开启SSH功能 Win10怎么开启SSH功能,下面就一起来看看吧! 工具/原料 华硕天选4 Windows10 方法/步骤 点击左下角的开始菜单,打开Wind…

XStream 反序列化漏洞 CVE-2021-39144 已亲自复现

XStream 反序列化漏洞 CVE-2021-39144 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建 修复建议总结 漏洞名称 漏洞描述 在Unmarshalling Time处包含用于重新创建前一对象的类型信息。XStream基于这些类型的信息创建新实例。攻击者可以控制输入流并替换或注入对象&am…

nosql--RedisTemplate定制化

nosql--RedisTemplate定制化 1、序列化2、如果使用redis中保存数据会使用默认的序列化机制,导致redis中保存的对象不可视2.1将所有的对象以JSON的形式保存2.2配置reids自定义配置2.3转化成功2.4配置文件代码 3redis客户端 1、序列化 stringRedisTemplate RedisTemp…

YOLOv8改进 | 主干篇 | RevColV1可逆列网络(特征解耦助力小目标检测)

一、本文介绍 本文给大家带来的是主干网络RevColV1,翻译过来就是可逆列网络去发表于ICLR2022,其是一种新型的神经网络设计(和以前的网络结构的传播方式不太一样),由多个子网络(列)通过多级可逆连接组成。这种设计允许…

【机器学习】Boosting算法-梯度提升算法(Gradient Boosting)

一、原理 梯度提升算法是一种集成学习方法,它可以将多个弱分类器或回归器组合成一个强分类器或回归器,提高预测性能。梯度提升算法的核心思想是利用损失函数的负梯度作为残差的近似值,然后用一个基学习器拟合这个残差,再将其加到之…

【Hadoop】ZooKeeper数据模型Znode

ZooKeeper 数据模型ZnodeZooKeeper 中的时间ZooKeeper 节点属性 ZooKeeper 数据模型Znode 前面提过,Zookeeper相当于文件系统通知机制。既然是文件系统,那就涉及数据模型。 ZooKeeper 的数据模型在结构上和Unix标准文件系统非常相似,都是采用…

周赛377

文章目录 周赛377[2974. 最小数字游戏](https://leetcode.cn/problems/minimum-number-game/)模拟 [2975. 移除栅栏得到的正方形田地的最大面积](https://leetcode.cn/problems/maximum-square-area-by-removing-fences-from-a-field/)贪心 [2976. 转换字符串的最小成本 I](htt…

时序预测 | Matlab实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络时间序列预测

时序预测 | Matlab实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 | Matlab实现SSA-CNN-BiLSTM麻雀算法优化卷积双向长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SSA-CNN-BiLSTM麻雀算…

[Python进阶] 操作注册表:winreg

5.22 操作注册表:winreg 5.22.1 注册表概念 在Windows系统中,注册表本质上就是一个数据库,其中存放着硬件、软件、用户、操作系统以及程序相关设置信息。我们除了使用Windows系统自带的regedit程序,也可以通过Python编程读取并操…

w15php系列之基础类型

一、计算100之内的偶数之和 实现思路 所有的偶数除2都为0 代码实现 <?php # 记录100以内的偶数和 $number1; $num0; while($number<100){if($number%20){ $num$number;}$number1; } echo $num; ?>输出的结果 二、计算100之内的奇数之和 实现思路 所有的奇数除…

IPC之十:使用共享文件进行进程间通信的实例

IPC 是 Linux 编程中一个重要的概念&#xff0c;IPC 有多种方式&#xff0c;常用的 IPC 方式有管道、消息队列、共享内存等&#xff0c;但其实使用广大程序员都熟悉的文件也是可以完成 IPC 的&#xff0c;本文介绍如何使用共享文件实现进程间通信&#xff0c;本文给出了具体的实…