Meshlab Laplacian Smooth 引入尖峰

Meshlab Laplacian Smooth introduces spikes

我正在使用 MeshLab 平滑通过 marching_cubes 和 pymesh 从 3d numpy 阵列获得的网格。我正在处理一些类似的网格,但只有其中一个给我这个问题。使用的滤波器是 Laplacian Smooth,参数为:

附件是拉普拉斯平滑前后的网格图像。不幸的是,由于隐私问题,必须在感兴趣的区域裁剪图像。
任何有助于追踪问题的帮助或任何调试建议都会非常有帮助。
谢谢!

mesh before laplacian smooth in first region

first spike

mesh before laplacian smooth in second region

second spike

能否提供网格样本? 这可能是一个数值问题,因为 MarchingCubes 可能会导致退化的零面积三角形。原因是拉普拉斯平滑试图沿着表面的切平面移动顶点,这导致零面积三角形未定义。最后,您还可以尝试通过 运行 a merge close vertices 过滤器移除那些退化的三角形。这个问题也会出现,因为桌面 meshlab 在浮动上运行,而其 python 对应的 pymeshlab 在双精度上运行。 最后直接使用 pymeshlab

从 numpy 数组中尝试网格
import numpy as np
import pymeshlab as ml
import k3d

ms = ml.MeshSet()
ms.set_verbosity(True)
ms.apply_filter('implicit_surface',voxelsize=0.050000000001,expr="x*x+y*y+z*z-0.5")
#ms.apply_filter("merge_close_vertices")
ms.apply_filter("laplacian_smooth",stepsmoothnum=1)
ms.apply_filter("compact_vertices")
ms.apply_filter("compact_faces")

plot = k3d.plot()
plot += k3d.mesh(ms.current_mesh().vertex_matrix().astype(np.float32), 
                 ms.current_mesh().face_matrix().astype(np.uint32),color=0xf0f0c0)
plot.display()