我在表面网格的顶点上定义了一个标量函数。我想计算此函数在表面上的近似(广义化,我想是)。

我可以想象每个顶点,取该函数在顶点处的平均值。它是(多跳)邻域,根据其距当前顶点的欧氏距离(在R3中)的高斯乘以它们表示的局部区域加权。如果表面在高斯核的尺度上不太弯曲,则这种近似将很好。但是,它仍然在计算上令人望而却步。

是否存在一种更有效的卷积算法,也许基于某种迭代的“流”或通过网格边缘的部分交换? >网格可以具有三角形或四边形的面-以更方便的方式回答此问题。但是边的长度不是恒定的,因此顶点之间的局部邻域几何形状会有所不同。

评论

您是否需要邻域扩展到直接邻域之外,或者您对基于重复应用最近邻方法的近似值感兴趣?

@trichoplax只要达到10跳标准偏差所需的迭代次数就不会被禁止。 (我想可能不会,因为至少在一维情况下,将最近的邻居混合100次可以达到10跳的偏差。)在这种情况下,我只是不知道如何加权邻居。 >
@joojaa应用于平面/网格时,它是可分离的,但是当每个顶点的边缘沿任意方向偏离时,它仍然可分离吗?

@Museful好吧,迭代式较小的模糊大约更大,因此只能在边缘连接上进行处理,并让迭代扩展效果。这在FEM和流体模拟中使用时效率很高

我不确定,我对FEM的知识还不那么投入。据我所知,它们可以解决不规则网格上的扩散问题,这完全类似于高斯模糊。

#1 楼

几种不同的方法

由于您提到了效率,因此我将考虑您的特定要求的一些变化,我怀疑您的特定要求可能是效率最低的。我还将建议提高效率的方法,而又不会改变您的预期方法,因此您可以权衡其他选择。

将体积而不是表面模糊化希望距离度量为曲面内的3D欧式距离而不是2D欧式距离,则可以对已应用了标量函数的常规3D网格执行模糊处理。然后,您可以使用高斯差的最终结果来计算不规则网格的顶点处的标量值。这样可以避免在计算的大部分过程中都考虑到网格形状。

3D网格的顶点数量可能比2D网格要大得多,但是它们的等距间距都是相同的通过仅考虑6个最近的邻居(始终保持恒定的距离),重复应用小内核模糊,可以实现大内核模糊。这种方法可能涉及更多的计算,但是可以很容易地用GPU加速常规网格。例如,3D网格方法将受到3D标量函数靠近网格但不在网格上的独特区域的影响。根据您的特定目的,这可能是合乎需要的。

使用2D距离而不是3D距离

如果发现需要距离度量为曲面内的2D欧几里得,则可以通过重复应用较小的内核高斯模糊来更好地近似较大的内核高斯模糊。如果网格内的边长没有太大变化,则可以选择一个内核大小,该大小仅允许在每次迭代时将一个边的顶点包括在内。这仅允许使用单边长度来计算顶点贡献的大小,而不是计算2D多边距离。

使用没有体积的表面的3D距离

如果您需要精确地按照问题中的描述进行计算,而不是在网格内而不是在周围体积内进行计算,还需要使用3D欧几里德距离,那么使用最近的邻居和多次迭代将不起作用。除非网格接近平坦,否则重复应用最近的邻居模糊将导致近似于2D欧几里得距离情况,因为这些值只能从一个顶点到另一个顶点出血,而不能直接沿着最短路径出血一口气就可以了。与通过一次遍历计算到距边缘10个边的顶点的3D距离所获得的扩展相比,这将提供较少的扩展。 (自从您在问题评论中提到10跳以来,我已经使用了10条边线。)在10个半径范围内。这将很昂贵,但完全有可能。既然提到效率,那么请考虑一下,如果您有足够的可用内存,就可以消除一些冗余。

在进行高斯差分之前产生的两个模糊将使用相同的3D距离集,直到较小的内核模糊的边缘半径为止。如果可以保存它们,则只需要计算一次,而不是每次模糊计算一次。

此外,每个距离将对每个模糊使用两次-在每个方向上一次作为从顶点A到顶点的长度顶点B与从B到A的长度相同。缓存/记忆这些距离将避免对它们进行两次计算。

任意多个边的影响

如果曲面弯曲因此,距离许多边的某些顶点仍然足够接近以相互影响3D距离,那么您可能需要考虑一定3D半径内的所有顶点,而不是考虑一定距离的边内的顶点,通过边缘的路径长。在这种情况下,可以通过使用空间划分来考虑较少的顶点,选择适合网格的特定方法。

如果不希望曲面的彼此接近的部分相互影响,则您可能想要2D距离度量标准,而不是3D距离度量标准。即使网格相当平坦也可以遍历。同样,您可能需要定义3D距离而不是许多边,并考虑该半径内的所有顶点。

评论


$ \ begingroup $
谢谢。我提到的3D欧式距离可能弊大于利。我只是将其作为昂贵的(且有条件的)近似值来解释。如果无法达到理想的答案,我不会追求这种近似。
$ \ endgroup $
–没用
16年5月14日在23:28

$ \ begingroup $
我理想的追求是您所说的“使用2D距离”。在常规网格(具有一致的局部几何形状)上,这很容易,因为可以在整个网格中(重复)应用相同的对称1跳邻域内核。我的真正问题是从该1跳邻域的局部几何确定每个顶点周围1跳邻域的内核权重。
$ \ endgroup $
–没用
16年5月14日在23:28

$ \ begingroup $
每个顶点的化合价为4,但边的长度和方向不同。 (或者(如果由于某种原因使平面变得更容易解决问题),每个四边形面都可以沿着其最短的对角线分成两个(现在为平面)三角形,在这种情况下,顶点的价数从4变到8,并且边长变得更加多样)
$ \ endgroup $
–没用
16年5月14日在23:29

$ \ begingroup $
最终,我有一个顶点,它的邻居环以不同的距离和角度分布,我需要知道这些邻居的局部核权重。将内核的均值/质心约束为“位于中心”(在这种情况下,这大概意味着沿着平均曲率法线从顶点开始的跨度)已经将2DoF约束在内核的权重中。选择一些方差提供了另一个约束。但是,由于价数> 3,该系统仍然不确定。如何选择重量?
$ \ endgroup $
–没用
16年5月14日23:30



$ \ begingroup $
是的,“使用2D距离”有点模糊。我猜我们应该区分“最短边距”和“曲面内最短距离”(不一定留在边缘)。幸运的是,应用模糊的次数越多,差异的相关性就越不重要(即使多次应用,盒子过滤器也将近似于高斯模糊)。如果您可以确定是否需要具有精确参数的高斯模糊或仅是具有可调参数的高斯模糊,那么您将能够确定重复的箱式过滤器是否足够。
$ \ endgroup $
– trichoplax
16年5月15日在0:44