CGAL的泊松曲面重构

1、介绍

        该CGAL组件实现了一种曲面重建方法,该方法将具有定向法线的点集作为输入,并计算隐式函数。我们假设输入点不包含异常值和少量噪声。通过使用CGAL曲面网格生成器[4]或可能使用任何其他曲面轮廓算法提取该函数的等值面来生成输出曲面网格。

        更具体地说,核心表面重建算法包括计算隐函数,该隐函数是推断实体的近似指示函数(泊松表面重建-称为泊松)。泊松是一个两步过程:它需要在函数求值之前求解隐函数。 

        本章提供了一个关于表面重建的详细教程,并提供了选择最合适的方法以及预处理和后处理的指南。

2、流程改造

        从点集重建曲面通常是一个连续的过程,包括以下步骤:1)扫描和扫描对齐生成一组点或具有法线的点;2) 异常值去除;3) 简化以减少输入点的数量;4) 平滑以减少输入数据中的噪声;5) 当采集设备尚未提供法线时的法线估计和定向;以及6)表面重建。
        CGAL为上面列出的除对齐以外的所有步骤提供算法。

        第二章点集处理描述了在重建前对点集进行预处理的算法,其中包括简化、异常值去除、平滑、法线估计和法线定向等功能。

3、泊松

        给定一组在3D固体边界上采样的具有方向性的法线(在此之后称为定向点)的3D点,Poisson表面重建方法解决了对于推断的固体的近似指示函数的问题,其梯度最好匹配输入的法线。输出的标量函数以自适应八叉树表示,然后使用自适应游走立方体进行等值轮廓。

        CGAL实现了一种此算法的变体,它在一组3D定向点上构建3D Delaunay三角剖分,并通过Delaunay细化来改进它,从而消除所有非各向同性的四面体并细分为输入定向点的松散边界框。在细化期间添加的Steiner点的法线被设置为零。然后,它作为剖分上的分段线性函数求解指示函数的标量。更具体地说,它在三角剖分的每个顶点上解决Poisson方程 Δf=div(n) 使用稀疏线性求解器。最后,CGAL表面网格生成器提取等值曲面,其函数值默认设置为所有输入点处的f的中值。

4、重构函数

        提供了一个全局函数 poisson_surface_reconstruction_delaunay()。它以具有法线的点作为输入,处理整个重建管道:它计算隐函数;它使用基于Delaunay细分的CGAL表面网格生成器以给定的精度重建表面;它以多边形网格的形式输出结果。

        此函数旨在为泊松重建提供一个快速且用户友好的API。高级用户可能对使用该类(请参阅重建类)感兴趣,该类允许他们使用其他曲面网格或不同的输出结构。

5、重构类

        类模板声明是template<class Gt>class Poisson_rebuildion_function,其中Gt是几何特征类。

        有关详细信息,请参阅:Poisson_rebuildion_function<GeomTraits>

5.1、轮廓

        通过使用CGAL曲面网格生成器,可以将计算的隐函数等值线化以重建曲面:make_surface_mesh()

        参数Tag会影响make_surface_mesh()的行为:

        Manifold_tag:输出网格保证为无边界的流形曲面。

        Manifold_with_boundary_tag:输出网格保证是流形,可能有边界。

        Non_manifold_tag:输出网格没有保证,因此作为多边形汤输出。

5.2、输出

        make_surface_mesh() 重建的表面需要是 SurfaceMeshComplex_2InTriangulation_3 概念的模型,这是一种数据结构,用于表示嵌入到三维三角剖分中的二维复杂体。

        SurfaceMeshComplex_2InTriangulation_3定义了遍历重建表面并将其转换为三角形汤的方法。

        其他CGAL组件提供将重建的表面网格写入对象文件格式(OFF)并将其转换为多面体(当它是流形时)的功能:output_surface_facets_to_off();output_surface_facets_to_polyhedron()

6、指导

        表面重建问题本质上是不适定的,因此所提出的算法并不假装重建具有任意采样条件的各种表面。本节为用户提供了一些关于理想采样和轮廓条件的提示,并描述了当这些条件不匹配时的一些失败案例。

6.1、理想条件

        用户必须记住,泊松曲面重建算法包括两个阶段(从输入点集计算隐函数和绘制该函数的等值面轮廓)。两者都需要在采样条件和参数调整方面给予一定的注意。

6.2、点集

        理想情况下,泊松表面重建方法的当前实现期望密集的3D定向点集,并在闭合、光滑的表面上采样。这里的“定向”是指所有3D点必须具有指向推断曲面的一致定向法线。下图说明了满足这些理想条件的情况。

         泊松重建。左图:雕像上采样的120K点(美能达激光扫描仪)。右图:重建的曲面网格。

        左图:雕像上采样的120K点(美能达激光扫描仪)。右图:重建的曲面网格。 

        该算法对各向异性采样和噪声具有相当的鲁棒性。它还通过填充相应的孔对缺失数据具有鲁棒性,因为该算法旨在重建推断实体的指示函数

        左上角:手上采样的65K点(Kreon激光扫描仪)。左下:由于扫描技术,点集具有高度各向异性。右图:重建的曲面网格和特写。这些孔已适当闭合。 

        该算法通常对异常值不具有鲁棒性,尽管少数异常值并不总是会导致故障,

        左图:在象上采样的70K点,很少有异常值用磁盘强调。右图:重建的曲面网格。

         即使当推断的曲面由几个连接的组件组成时,该算法也能很好地工作,前提是所有法线都得到了正确的估计和定向(当前的CGAL法线定向器算法在某些情况下可能会失败,请参见mst_orient_normals()),并且最终的轮廓绘制算法对每个组件都进行了正确的播种。当推断的曲面由几个嵌套的连接组件组成时,应注意交替(向内/向外)定向每个组件的法线,以便最终的轮廓绘制阶段选择适当的轮廓绘制值。

6.3、轮廓参数

        我们的泊松曲面重建算法的实现计算了一个隐函数,该隐函数表示为3D Delaunay三角剖分的四面体上的分段线性函数,该三角剖分由输入点构建,然后通过Delaunay精化进行精化。因此,任何等参曲面也是分段线性的,因此可能包含尖锐的折痕。由于轮廓算法make_surface_mesh()期望平滑的隐式函数,当设置较小的网格大小或曲面近似误差参数时,这些尖锐的折痕可能会在最终重建的曲面网格中创建虚假的顶点簇(见下图)。

        避免这些虚假聚类的一种方法是调整网格大小和表面近似参数,使其与平均采样密度(通过compute_average_spacing()获得)相比足够大,以便轮廓算法感知平滑的等参表面。我们建议使用以下轮廓参数:

        最大三角形半径:至少为平均间距的100倍。

        近似距离:至少为平均间距的0.25倍。

         左图:用近似距离=0.25*平均间距重建的曲面。右图:用近似距离=0.15*平均间距重建的曲面。注意脸颊上的假簇。

6.4、退化条件

        上面列出的条件是相当严格的,在实践中并不是所有条件都能在申请中得到满足。我们现在说明了在采样、法线方向错误、噪声和尖锐折痕等条件不满足时算法的行为。

6.5、稀疏采样

        重建算法期望一个足够密集的点集。尽管由于算法的变分性质,在某些密度条件下没有正式的证据证明其正确性,但我们的实验表明,当局部间距至多为局部特征大小的十分之一(到中轴的距离,它完全捕捉曲率、厚度和分离度)时,该算法能很好地重建所有薄特征。当不满足此条件时,重建不会重建薄的欠采样特征.

        左图:海王星三叉戟上的50万个采样点。在这种情况下,重建(未示出)是成功的。右图:点集简化为1K个点,然后重建(所有输入点都用法线表示)。不重建薄特征。

6.6、大孔

        重构被设计为求解隐函数,该隐函数是推断实体的近似指示函数。因此,轮廓算法总是提取一个闭合的表面网格,因此能够填充由于采集过程中的遮挡等原因而丢失数据的小孔

        左图:一只手上采样的65K个点,腕基处没有捕捉到数据。右图:重建的曲面网格。表面在手指上适当闭合,在手腕上也闭合,但方式不太合理。 

        在大孔的情况下,该算法仍然将它们全部闭合,但由于用于求解的3D Delaunay三角剖分在孔被填充的地方非常粗糙,因此所得到的分段线性隐式函数可能表现出大的三角形补丁和尖锐的折痕。这可以通过两次通过的方法来避免。点子集的第一步用于获得孔处曲面的近似值。然后,该曲面用于计算具有完整点集的第二遍的更平滑的3D Delaunay三角测量。

Left: The wrist. Middle: one pass. Right: two passes.

6.7、错误的法线方向

        泊松曲面重建方法求解梯度与一组输入法线最匹配的隐式函数。因为它在最小二乘法的意义上解决了这个问题,所以它对少数孤立的方向错误(翻转)的法线是稳健的。然而,一组方向错误的法线会导致不正确的隐函数,从而导致虚假的几何失真甚至拓扑失真。

        左图:在具有方向错误法线簇的球体上采样的点。右图:重建的曲面网格带有虚假凸起。 

6.8、噪声和异常值

        大量的噪声不可避免地会影响重建(见下图顶部),并且当前的实现没有提供任何用数据拟合来换取平滑度的方法。然而,如果信噪比足够高和/或为绘制等参表面轮廓而设置的表面近似和尺寸参数相对于噪声水平较大,则输出表面网格将看起来平滑(未示出)。如果用户想要生成平滑而详细的输出曲面网格,我们建议通过jet_smooth_point_set()应用平滑。

        左上角:在球体上采样并被大量噪声破坏的点。右上角:重建的曲面网格。左下:平滑的点集。右下角:重建的曲面网格。

        对于大量的异常值,故障情况(未显示)转化为虚假的小连接部件和推断表面附近的巨大失真。在这种情况下,必须通过remove_outliers()删除异常值。

6.9、尖锐的折痕

        当前的重建算法不能恢复推断表面中存在的尖锐折痕和角。这转化为平滑的尖锐折痕。

        左图:在具有尖锐特征(折痕、飞镖和角)的机械零件上采样的5K点。右图:具有平滑折痕的重建曲面网格。

7、性能

        我们提供了一些扫描数据的性能数字。我们测量泊松隐函数的计算时间、一系列近似距离的轮廓绘制时间、内存占用以及点集简化的影响。

7.1、泊松隐函数

        为确定泊松隐函数基准而选择的点集是Bimba con Nastrino点集(160万点)。我们测量该点集以及通过随机简化获得的简化版本的泊松隐式函数计算(即,对Poisson_reformation_function::compute_implicit_function()的调用,在下文中用泊松解表示)。下表提供了越来越多点的泊松求解计算时间(以秒为单位)。

Number of points (x1000)

Poisson solve duration (in s)
6015
10025
25096
500150
1,000249
1,800478

7.2、轮廓

        为确定轮廓阶段的基准而选择的点集是简化为100k点的Bimba con Nastrino点集。我们测量一系列近似距离的轮廓绘制(即调用make_surface_mesh())持续时间和重建误差。重建误差表示为从输入点到重建表面的平均距离,单位为毫米(Bimba con Nastrino雕像高324毫米)。

Approx. distance (*average spacing)Contouring duration (in s)Reconstruction error (mm)
0.119.20.055
0.256.90.106
0.53.20.18
11.650.36
20.80.76

         简化为100k点的Bimba con Nastrino点集的轮廓持续时间(以s为单位)和重建误差(mm)与几个近似距离参数的关系。

7.3、内存

        我们测量了重建完整Bimba con Nastrino点集(180万点)以及简化版本的内存占用率。

        当使用稀疏线性求解器求解泊松线性系统时,泊松隐函数计算具有记忆峰值。

Number of points (x1000)Memory occupancy (MBytes)
60180
100270
250790
5001300
1,0002200
1,8003800

7.4、点集简化

        由于上述内存限制,我们建议简化激光扫描仪捕获的点集。

        我们测量了Bimba con Nastrino点集(1.6M个点)以及简化版本的重建误差。所有重建都使用推荐的轮廓参数近似距离=0.25*输入点集的平均间距。重建误差表示为从输入点到重建表面的平均距离,单位为毫米(Bimba con Nastrino雕像高324毫米)。

Number of points (x1000)Reconstruction error (mm)
600.27
1200.15
2500.11
5000.079
1,0000.066
1,5000.061
1,6000.06

 

        具有1.6M个点的Bimba con Nastrino点集以及简化版本的重建误差(mm)相对于点的数量。 

CGAL 5.6 - Poisson Surface Reconstruction: User Manual

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

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

相关文章

如何在业务中体现 TCC 事务模型?

在分布式系统设计中,随着微服务的流行,通常一个业务操作被拆分为多个子任务,比如电商系统的下单和支付操作,就涉及到了创建和更新订单、扣减账户余额、扣减库存、发送物流消息等,那么在复杂业务开发中,如何…

Linux驱动开发学习笔记2《LED驱动开发试验》

目录 一、Linux下LED灯驱动原理 1.地址映射 二、硬件原理图分析 三、实验程序编写 1.LED 灯驱动程序编写 2.编写测试APP 四、运行测试 1.编译驱动程序和测试APP (1)编译驱动程序 (2)编译测试APP 2.运行测试 一、Linux下…

探究Spring Boot 中实现跨域的几种方式

文章目录 前言1. 使用CrossOrigin注解2. 使用WebMvcConfigurer配置3. 使用Filter配置4. 使用全局配置结束语 前言 在现代Web应用中,由于安全性和隐私的考虑,浏览器限制了从一个域向另一个域发起的跨域HTTP请求。解决这个问题的一种常见方式是实现跨域资…

编程实战:类C语法的编译型脚本解释器(九)编译语句

系列入口:编程实战:类C语法的编译型脚本解释器(系列)-CSDN博客 前文已经介绍了编译入口,核心就是语句,本文介绍语句的编译。 目录 一、代码概览 二、辅助函数 2.1 tokens.IsPosNotToken(pos) 2.2 toke…

LT8668SXC DP转VBO/HDMI2.1/EDP 最高可支持到8k60hz

DP1.4a/eDP1.4b Receiver ▪ Compliant with DisplayPort specification 1.4a for 1.62Gbps, 2.7Gbps, 5.4Gbps and 8.1Gbps ▪ Compliant with Embedded DisplayPort specification version 1.4b ▪ Support DisplayPort 1/2/4 lanes ▪ Support HDCP 1.3/2.3 ▪ …

JVM 执行引擎篇

机器码、指令、汇编语言 机器码 各种用二进制编码方式表示的指令,叫做机器指令码。开始,人们就用它采编写程序,这就是机器语言。机器语言虽然能够被计算机理解和接受,但和人们的语言差别太大,不易被人们理解和记忆&a…

德迅抗D盾是如何防护攻击的

德迅抗D盾是针对游戏行业面对的DDoS、CC攻击推出的针对性的网络安全解决方案,相比高防IP,除了能针对大型DDoS攻击(T级别)进行有效防御外,还具备彻底解决游戏行业特有的TCP协议的CC攻击问题能力,防护成本更低…

基于Java SSM框架实现超市管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现超市管理系统演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识&#…

多人聊天作业

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

如何评估数据资产的价值?哪种方法更容易实现?

今年可以称之为数据年&#xff0c;从去年年底党中央发布《数据20条》&#xff0c;对数据领域的一系列的制度建设做了提纲起领的作用。在财经领域今年的下半年&#xff0c;密集出台一系列跟数据资产相关的政策&#xff0c;包括8月21日发布的《企业数据资源会计处理的暂行规定》以…

最小生成树算法与二分图算法

文章目录 概述 P r i m Prim Prim 算法 - 稠密图 - O ( n 2 ) O(n^2) O(n2)思路概述时间复杂度分析AcWing 858. Prim算法求最小生成树CODE K r u s k a l Kruskal Kruskal 算法 - 稀疏图 - O ( m l o g m ) O(mlogm) O(mlogm)思路解析时间复杂度分析AcWing 859. Kruskal算法求…

探索HarmonyOS_开发软件安装

随着华为推出HarmonyOS NEXT 宣布将要全面启用鸿蒙原声应用&#xff0c;不在兼容安卓应用&#xff0c; 现在开始探索鸿蒙原生应用的开发。 HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 鸿蒙官网 开发软件肯定要从这里下载 第一个为微软系统(windows)&#xff0c;第…

逆向修改Unity的安卓包资源并重新打包

在上一篇文章中,我已经讲过如何逆向获取unity打包出来的源代码和资源了,那么这一节我将介绍如何将解密出来的源代码进行修改并重新压缩到apk中。 其实在很多时候,我们不仅仅想要看Unity的源码,我们还要对他们的客户端源码进行修改和调整,比如替换资源,替换服务器连接地址…

【C/C++】函数参数默认值

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

深度学习实战64-黑白照片着色的模型应用,快速部署实现黑白图片快速上色的功能

大家好,我是微学AI,今天给大家介绍一下深度学习实战64-黑白照片着色的模型应用,快速部署实现黑白图片快速上色的功能。图片上色是一个具有多模态不确定性和高度不适定性的挑战性问题。直接训练深度神经网络通常会导致错误的语义颜色和低色彩丰富度。虽然基于Transformer的方…

人工智能AIGC培训讲师叶梓介绍及AI强化学习培训提纲

叶梓&#xff0c;上海交通大学计算机专业博士毕业&#xff0c;高级工程师。主研方向&#xff1a;数据挖掘、机器学习、人工智能。历任国内知名上市IT企业的AI技术总监、资深技术专家&#xff0c;市级行业大数据平台技术负责人。个人主页&#xff1a;大数据人工智能AI培训讲师叶…

9大高效的前端测试工具与框架!

在每个Web应用程序中&#xff0c;作为用户直接可见的应用程序外观&#xff0c;“前端”包括&#xff1a;图形化的用户界面、相应的功能、及其整体站点的可用性。我们可以毫不夸张地说&#xff1a;如果前端无法正常工作&#xff0c;您将无法“拉新”网站的潜在用户。这也正是我们…

MySQL:update set的坑

目录 一、问题描述 二、为何会出现这样的问题&#xff1f; 三、正确的方案 一、问题描述 我在修改mysql数据表时&#xff0c;看到下面的现象。 我表中原始数据如下&#xff1a; 执行了下面的修改&#xff0c;显示执行成功。 update user_function_record_entity set open_…

MySQL_1. mysql数据库介绍

shell脚本差不多快完结了接下来会为大家更新MySQL系列的相关的基础知识笔记&#xff0c;希望对大家有所帮助&#xff0c;好废话不多说&#xff0c;接下来开始正题&#xff01; 1.mysql数据库介绍 mysql 是一款安全、跨平台、高效的&#xff0c;并与 PHP、Java 等主流编程语言…