点云补洞算法+代码(Shape Controllable geometry completion for point cloud models)
导读 : 今天为大家带来针对点云的空洞填补,针对点云的补全和补洞算法是比较少见的,大多数算法都只是针对网格的补洞。而针对点云的补洞在三维重建中能够很有效的应用,特别是如泊松重建中因遮挡导致的点云稀疏或缺失的区域,但点云补洞能够很有效的解决该区域的重建问题。本质上讲,点云补洞是个病态问题,所有的补洞方式只能根据洞周围点的特征来补全,但在几何结构将对简单区域,点云补洞能有很好的表现。这篇文章是2017年发表在the virtual computer上的点云补洞算法,总体来说有比较好的补洞效果。
算法论文地址:yanqingan.github.io/docs/tvc16_shape.pdf
摘要
这篇文章提出了一种全新的点云补洞方法,能够在平滑和尖锐的地方都有较好的补洞表现,该方法模仿物理上的扩散模型,将一次洞的边缘收缩分解为法向传播和顶点位置传播,并根据其相应的约束来保持其平滑或尖锐的特性。通过迭代上述过程直到没有新的边缘生成,即完成点云补全。
1.简介
点云模型在过去20多年中有很广泛的应用。直到现在,尽管扫描仪等获取设备的性能有很大的提升,但是或多或少在其扫描的模型上存在有不同的空洞区域。此外,因为物体表面磨损和损坏,也会形成空洞区域。针对点云补洞这个病态问题,现有的大部分工作基于网格步面片的方式。而直接在点云上补洞的相对较少,而且大多只能生成平滑的补洞结果。本文模仿物理中能量扩散的方式进行点云补全,能够有效的生成平滑和尖锐的补洞结果,如下图1所示:
2.算法
本文将洞边缘收缩主要分为两步:
-
法向传播:用于控制填充点的方向和恢复的表面的形状。
-
位置传播:在一次边缘收束中生成新的边界点。
这两个步骤在补洞算法中交替执行,且能够相互优化。这种交替传播方式能够将法相约束插入到法向传播步骤中,以恢复空洞的尖锐特征。
2.1 算法总览
给定带法向的点云作为输入,本文算法首先对输入点云进行预处理去噪,然后提取空洞的边界点,并通过迭代传播的方式缩小空洞区域,直到没有新点生成。
2.2 预处理
为了得到有效的洞的边界,本文采用了二阶段的处理去噪,同时对点云位置和其法向进行双边滤波 [1]操作,从而获得去噪的后的带法向的点云。
2.3 洞边界确定
本文采用分而治之的策略进行边界提取,首先在边界上手动顺序选择少量特征点$f_i’ (i = 1,…,m)B’$中。 因此任意两相邻点间可以看作时局部线性的。
对于相邻点构成的线段,计算其中点, 并选择距离最近的边界上的点,如果该点是新的点,则将该店插入到点集中和之间。通过迭代直到所有相邻点间距离小于阈值,则获得最终的边界点集,以此作为空洞边界。
2.4 法向传播
为了计算收缩后的空洞边界,本文在采样的边界点集上构建法向传播。新填充的点的法向计算方式为:
表示附近半径为r以内的邻近点。和分别是标准差为和的高斯权重。为距离最近的上一轮边界上的点的法向。
2.5 顶点位置采样
以传播的法向作为指导,一轮边界收束的采样点需满足两个目标:
- 新生成的边界与周围区域的表面相匹配
- 新填充的点应该保持合理的分布,保持连续实际的收缩,使得空洞区域变小
为此,文章定义用来度量填充点和周围表面的差异。同时引入弹力来填充点的位置,一个好的候选点应该在受力平衡点附近且受到最小的合力。结合两者,建立了以此边界收缩的目标函数:
3. 生成新的孔洞边界
虽然上述算法给除了顶点采样的目标函数,但是直接求解是非常困难的,因为空间中有无数的位置能满足该函数最小化。因此文章提出了间接的采样方法。
首先,通过上一轮生成的边界点,生成新的边界点的控制曲线。在控制曲线约束下,本轮采样变为沿着控制曲线的1-D采样。 采样到的新的顶点是目标函数(3)的近似解。
然后,对每个采样点根据其邻域和(1)中计算的法向进行位置优化,直到收敛。
3.1 计算洞边缘控制曲线
定义弹力:文章利用高斯函数来对弹力进行仿真并控制邻近点间距离的权重。表示新的候选点沿着上一轮边界点沿着该点传播方向的平衡点,在位置受到的邻域其他点的弹力如下式(4):
其中是邻近点沿着 的平衡点,如图Fig.3所示。
事实上,一旦给定邻域点,则从点受到的弹力仅与到的符号距离有关,其正向为斥力,负向为引力,因而可简化为式 (5),而平衡点的计算公式为式 (6)
边界控制曲线: 边界控制曲线有上一轮生成的边界点计算得到的平衡位置得到。对于边界点 其收缩方向为该点法向与边界方向的叉乘。从而根据式(5)(6)可计算出所有新的平衡点以及该点收到的弹力,并删除受到邻域斥力的平衡点,剩下的作为新一轮的边界曲线采样点。
3.2 位置优化
为保证生成的采样点与局部表面形状匹配,本文提出了位置优化方法,如式(7)
所有的边界点受到邻域点的沿着其法向的引力作用,到新的平衡点,其中和是和式(1)类似的高斯权重,则优化后的顶点位置为:
注意到位置优化后的点的法向与表面不匹配,而重新计算后的法向也会导致优化位置的偏离。因此,理论上可进行交替优化的方式,使之达到收敛。而在实际上收敛速度会比较快,因而采用两轮交替优化即可。
3.4 保持特征一致
在尖锐的洞区域,采用上述方法容易因其区域交叠的问题,如Fig.7所示,可通过设置相应的阈值,在出现位置偏移反向的时候,将其进行剔除,即可剔除该区域多余的顶点。
算法结果
文章在不同的模型上进行了测试,如图Fig.1 所示,不同半径的邻域取值对补洞表面的收敛速度不同。FIg.8 则展示了不同的同算法相对本文算法的补洞结果。本文算法在尖锐和平滑区域都有很好的表现。
特别是在泊松重建之前,本文算法通过提前对点云进行空洞填充,再进行播送重建后能够很好的降低模型空洞粘连的问题,提高模型质量。
代码获取
获取本文源码请微信下列二维码关注本人公众号,并回复 cloudhole 自行获取。
本文为原创,转载请著明出处。
参考文献
[1] Fleishman S, Drori I, Cohen-Or D (2003) Bilateral mesh denoising. In: ACM Transactions on Graphics (TOG), ACM, vol 22, pp 950–953