CGAL的多边形曲面重建

1、介绍

        该软件包实现了一种基于假设和选择的方法,用于从点云重建分段平面对象。该方法将从分段平面对象采样的无序点集作为输入。输出是对输入点集进行插值的紧凑且不透水的曲面网格。该方法假设提供了所有必要的主平面(或者可以使用在形状检测中描述的形状检测方法或任何其他替代方法从输入点集中提取)。

        CGAL中现有的表面重建方法(即泊松表面重建、推进前表面重建和尺度空间表面重建)适用于表示由光滑表面描述的对象的点集。对于建筑物等人造物体,由于重建模型的缺陷和复杂性(即巨大的网格、缺失的区域、噪声和不期望的结构),结果并不令人满意。这主要是因为这些方法倾向于密切关注表面细节。该软件包中引入的算法旨在生成简化且不透水的曲面网格。它可以恢复物体的尖锐特征,并且可以处理大量的噪声和异常值,补充了其他表面重建方法。

        需要混合整数规划(MIP)求解器来解决由该方法制定的约束优化问题。

2、算法

        与传统的分段平面对象重建方法不同,这些方法要么侧重于提取良好的几何基元,要么侧重于获得基元的适当排列,而该方法的重点在于将基元(即平面)相交,并寻求基元的适当组合,以获得流形和不透水多边形表面模型。

        该方法将表面重建视为基于假设和选择策略的二元标记问题。重建包括以下步骤:

        从输入点集中提取平面(如果已知平面或通过其他方式提供,则可以跳过);

        通过将提取的平面基元相交来生成一组候选面;

        通过在硬约束下进行优化来选择候选面部的最优子集,该硬约束强制最终的多边形表面在拓扑上正确。

        (a) 输入点集;(b) 提取的平面片段;(c) 通过成对相交生成的候选面;(d) 通过优化选择的面;(e) 重建模型。

2.1、Energy 

        给定由两两交集产生的N个候选面F={fi|1≤i≤N},通过优化来选择最好地描述物体几何并形成流形和不透水的多边形表面的候选面的最优子集。

        设X={xi|1≤i≤N}表示面的选择(即,如果xi=1,则fi被选择;如果xi=0,则不被选择),目标函数由三个能量项组成:数据拟合、模型复杂性和点覆盖。

        数据拟合。该术语旨在评估面与点云的拟合质量。它的定义是测量对最终重建没有贡献的点的置信加权百分比。

         |P|是P中的总点数。support(fi)是支持点的数量,占适当概念的置信度。

        模型复杂性。该术语旨在鼓励简单的结构(即大平面区域)。它被定义为模型中锐利边缘的比率。 

         |E|表示候选面集合中成对交叉点的总数。 corner(ei)是一个指示函数,其值由ei连接的两个选定面部的配置决定。如果与ei关联的面部在最终模型中引入了尖锐的边缘,则corner(ei)的值为1。否则,corner(ei)的值为零,表示两个面部共面。

        点覆盖。这个术语旨在处理缺失数据。其思想是使最终模型中不受支持的区域(即点未覆盖的区域)尽可能小。该术语被定义为模型中未覆盖区域的比率。

         其中,area(M)、area(fi)和area(Mαi)分别表示最终模型、候选面fi和fi的α-形状网格Mαi的表面积。 area(Mαi)用于近似3D点覆盖的面积。

2.2、面选择

        通过上述能量项,可以在某些硬约束下通过最小化这些项的加权和来获得最优面集合。

        其中∑j∈N(ei)xj表示由边ei连接的面数。该值强制为0或2,这意味着可以选择一个或两个面。这些硬约束保证最终模型的每条边只连接两个相邻的面。 

        两个平面相互交叉,形成四个部分(a)。(b) 至(g)示出了所有可能的组合以确保2倍曲面。(b)和(c)中的边连接两个共面部分,而在(d)到(g)中,它在最终模型中引入了尖锐的边。

3、示例

3.1、点云重构

        该方法假设可以从输入点集中提取所有必要的平面。以下示例首先从输入点云中提取平面,然后重建曲面模型。

3.2、使用用户提供的平面进行重建

3.3、模型复杂性控制

        除了通过鼓励大的平面区域来有利于干净和紧凑的重建结果之外,模型复杂性项还提供了对模型细节的控制,即,增加该项的影响导致重建的3D模型中更少的细节。

        模型复杂性项的影响。通过逐步增加重构模型复杂度项的影响。每个子图下的值是相应优化中使用的权重。

4、性能

4.1、问题的复杂性

        该方法旨在重建具有合理几何复杂度的单个对象。当前的实现方式计算平面段的成对交点,这对于确保拓扑精确的重建是足够的,但不是必要的。在大型复杂对象上运行可能会导致大量的候选面,从而需要解决一个巨大的整数编程问题。

        具有中等复杂度的单个对象的重建时间通常在几秒钟内。在这三个步骤中,当候选面的数量很大(例如,超过5000个)时,面选择步骤主导重建管道。

4.2、数值解算器

        当前实现包含两个开源解算器:GLPK和SCIP。需要注意的是,GLPK只能解决小问题,即结构相当简单的对象。如果您正在重建更复杂的对象,您可能需要考虑更高效的开源解算器(例如CBC),甚至商业解算器,例如Gurobi、CPLEX。下表大致介绍了一些解算器的性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值