声明
- 本帖更新中
- 如有问题,望批评指正!
- 如果有人觉得帖子质量差,希望在评论中给出建议,谢谢!
作者列表
FEI HOU(侯飞)、CHIYU WANG、WENCHENG WANG:中国科学院大学
HONG QIN
CHEN QIAN、YING HE
核心思想归纳
如下图1所示,当一条射线从实体 M M M 内部发出并与等值面 F F F 有 2 n + 1 2n+1 2n+1个交点,即奇数个交点。其中 n + 1 n+1 n+1个交点的法向在射线方向上指向内, n n n 个在射线方向上指向外。换句话说如果计算 2 n + 1 2n+1 2n+1法向的和,最终结果肯定是在射线所在直线上指向内,如下图(b)所示。 也就是说,对于交点个数为奇数的射线,其交点法向的和在射线所在直线上大概率指向内部。
(a)原理示意图 | (b) |
---|---|
算法流程
(1)通过HPR算法初始化点云法向;
(2)从点云中深度为
D
D
D的建立八叉树,并根据八叉树节点集
S
\mathcal{S}
S,并利用
S
\mathcal{S}
S来构建一个二叉树;
(3)用Screen PSR算法根据点集
S
\mathcal{S}
S计算指示函数
χ
\chi
χ,并利用octree-oriented marching cube来提取等势面
F
\mathcal{F}
F;
(4)将计算出的平均每个样本点在等势面上相关三角面片上对应的inward normal来更新法向。
机器翻译
动机
在给定具有错误法向的采样点的情况下,PSR可以生成通常高度扭曲且具有多个连通组件的等值面
F
\mathscr{F}
F。每个连通组件都是一个封闭的曲面。图5(第2列)展示了一些示例。设
s
s
s 是任意的采样点。考虑一条射线,从实体
M
M
M 的内部到无穷远,并且垂直于
M
M
M 在
s
s
s 处的曲面法向
∂
M
\partial M
∂M,使得射线可能在接近
s
s
s 的位置与等值面
F
F
F 交叉。关键观察是,如果射线的起点也在等值面
F
F
F 的内部,无论
F
F
F 有多少个连通组件,射线穿过
F
F
F 的次数都是奇数次,假设为
2
n
+
1
2n + 1
2n+1。由于等值面
F
F
F 的所有连通组件都是封闭曲面,我们可以计算每个交点的内部法向,即法向指向该点所属组件的内部。在交点中,有
n
+
1
n + 1
n+1 个点的等值面
F
F
F 的法向指向实体
M
M
M 的内部,其余点的法向指向
M
M
M 的外部。假设法向几乎共线。然后,对这
2
n
+
1
2n + 1
2n+1 个交点的法向进行平均,得到实体
M
M
M 的内部法向。
受到这一观察的启发,我们采用以下策略来更新法向。我们将交点周围的等值面的局部邻域称为“层”。注意,交点位于由 PSR 生成的等值面的奇数层。因此,可以使用每个层上的代表点来修正法向,而无需显式找到交点。
设等值面
F
F
F 被 Marching Cubes [Lorensen and Cline 1987] 离散化。假设离散化分辨率足够高,以保留分层结构的拓扑性,即每个层都有网格顶点采样。对于离散化的等值面的每个三角面,我们找到距离它最近的
k
k
k 个采样点。遍历所有的三角面,我们可以连接输入点与
F
F
F 的三角形。因此,我们可以使用与每个采样点相关联的三角面作为其周围结构的代表。特别地,对于每个采样点
s
s
s,我们计算其关联三角面法向的面积加权和。此外,我们可以将每个层视为一个以法向表示的平面。因此,结果的平均法向可以视为所有层围绕
s
s
s 的法向的平均值。如果采样点
s
s
s 周围有奇数个层,则层法向的平均值朝向实体
M
M
M 的内部。这意味着与每个采样点
s
s
s 相关的代表性三角面的数量的奇偶性并不重要。只要这些面位于层上,它们就可以用来表示分层结构,使得面积加权平均可以得到逼近所有层法向平均的向量。因此,层法向的平均值在概念上等同于沿着从实体
M
M
M 的内部到无穷远的射线上的
2
n
+
1
2n + 1
2n+1 个交点的法向的平均值(这在第4节开始时提到过)。
我们称样本𝑠的局部邻域为“奇数层”(或“偶数层”),如果围绕𝑠有奇数(或偶数)层等值面。当围绕𝑠的点的法向量发生扰动时,指示函数通常会出现振荡,导致局部邻域中的等值面变得小且碎片化。因此,从等值面F的外部点开始,穿过𝑠并向无穷远处移动的光线会产生一个偶数层结构。我们观察到,即使在随机初始化法向量的情况下,第一次迭代计算得到的等值面具有大量的奇数层结构。此外,偶数层结构可以在未来的迭代中变成奇数层结构,但反过来则不成立。因此,通过迭代过程,越来越多的样本展现出它们周围的奇数层结构,而我们的面积加权法向量平均策略可以使法向量越来越准确。有关法向量更新策略的二维示例请参见图2。
概述。我们的方法是算法1中所述的法向量平均策略的一个相当直观的实现。给定一组未定向的点
P
P
P作为输入,我们首先构建一个最大深度为
D
D
D(由用户指定)的八叉树,并将八叉树节点作为样本集合
S
S
S。为了便于样本搜索,我们还为样本构建了一个kd树。在我们的方法中,我们首先为每个样本分配一个随机法向量,然后以迭代方式进行。在每次迭代中,我们将当前法向量应用于样本集合
S
S
S,使用屏蔽的PSR方法得到指示函数
χ
\chi
χ。我们将基于八叉树的Marching Cubes算法[Kazhdan et al. 2006; Kazhdan and Hoppe 2013]应用于等值面
F
F
F,其中等值为1𝑛Í𝑛 𝑖=1 𝜒 (𝑠𝑖 ),其中
n
=
∣
S
∣
n=\vert S \vert
n=∣S∣表示样本数量。然后,我们通过对与
s
s
s关联的三角面的内部法向量求平均值来更新每个样本的法向量。算法在点法向量不再发生变化时继续进行。图4以2D示例形式展示了整个流程,图5展示了4个典型3D模型的迭代结果。接下来我们将介绍更多的实现细节。
基于可见性的初始化。尽管我们的算法在随机初始化的情况下会收敛,但如果给予更好的初始化,它在实践中可以运行得更快。除了随机初始化,我们采用了一个简单的基于可见性的方法[Katz et al. 2007]来估计初始法向量。具体而言,我们将输入点缩放到一个单位立方体,并创建一个边长为3的同心立方体。然后,我们使用大立方体设置26个视点(相机位置):8个位于立方体的角上,6个位于平面中心,12个位于边中点。对于每个视点𝑣𝑖,我们应用隐藏点移除算子[Katz et al. 2007]来确定从𝑣𝑖可见的样本。然后,我们通过对所有可见光线的方向求平均值来为每个样本初始化法向量。如果样本𝑠𝑗对任何视点都是不可见的,我们简单地分配一个固定的法向量[1, 0, 0]。Katz等人的方法由于其线性时间和空间复杂性而简单高效。在Aim@Shape数据集上的实验结果表明,可见性初始化可以在具有100K个点以上的模型上减少45%的迭代次数。
法向量处理。我们首先使用基于八叉树的Marching Cubes算法[Kazhdan et al. 2006; Kazhdan and Hoppe 2013]提取等值面𝜒0,它可能包含多个连接的组件,特别是在前几次迭代中,然后获得一个三角化网格。然后,我们使用叉乘法计算每个面的法向量。对于等值面的每个三角面,我们找到距离最近的前
k
k
k个样本。通过这种方式,我们建立了三角面和样本之间的关系。最后,我们通过计算与𝑠𝑖相关联的面的法向量的平均值来更新每个样本的法向量。在我们的实现中,我们经验性地将
k
k
k设置为10。有关
k
k
k的选择的讨论,请参见第5节。
终止条件。我们计算当前迭代和前一个迭代之间样本的法向量方差。当法向量方差的平均值小于用户指定的阈值
σ
\sigma
σ时,算法终止。
二维玩具示例。图3示例了使用椭圆的等值面的分层结构。(a)每个样本点都初始化为随机法向量。其中,49%的法向量朝内,其余的法向量要么朝外,要么切向曲线。(b)应用屏蔽的PSR方法在第一次迭代中产生许多不相连的闭曲线。我们来看一下样本𝐴、𝐵和𝐶,它们的局部邻域展示出不同的分层结构。样本𝐴是三层结构,样本𝐵是单层结构,样本𝐶是双层结构。通过使用分层结构上代表性点的平均法向量,我们使𝐴和𝐵的法向量朝内,而𝐶的法向量仍然朝外。©法向量平均策略有效改善了法向量,第一次迭代后78%的法向量朝内。(d)将更新后的法向量作为输入,屏蔽的PSR方法产生了一个更好的形状,该形状已经是简单连通的。所有三个代表性样本𝐴、𝐵和𝐶展现了奇数层结构。(e)经过第2次迭代后,100%的法向量朝内。(f)应用屏蔽的PSR方法得到了一个几乎正确的椭圆。(g)展示了(f)的平均法向量。