【问题标题】:Meshlab Laplacian Smooth introduces spikesMeshlab Laplacian Smooth 引入了尖峰
【发布时间】:2021-07-02 02:38:27
【问题描述】:

我正在使用 MeshLab 对通过 marching_cubes 和 pymesh 从 3d numpy 数组获得的网格进行平滑处理。我正在处理一些类似的网格,其中只有一个给我这个问题。使用的滤波器是带有参数的拉普拉斯平滑:

  • 平滑步数 = 1
  • 一维边界平滑 = True
  • 余切加权 = True

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

mesh before laplacian smooth in first region

first spike

mesh before laplacian smooth in second region

second spike

【问题讨论】:

    标签: smoothing meshlab laplacian spike


    【解决方案1】:

    你能提供一个网格样本吗? 由于 MarchingCubes 可能导致退化的零面积三角形,这可能是一个数值问题。原因是拉普拉斯平滑试图沿着曲面的切平面移动顶点,导致零面积三角形未定义。最后,您还可以尝试通过运行 merge close vertices 过滤器来移除那些退化的三角形。这个问题也可能出现,因为桌面 meshlab 在 float 上运行,而它的 python 对应 pymeshlab 在 double 上运行。 最终只需使用 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()
    

    【讨论】:

    • 谢谢你,很抱歉回复晚了,很遗憾我不能提供完整的网格,但我可以确认这个解决方案适用于拉普拉斯滤波器引入这些尖峰伪影的情况。奇怪的是,我遇到了另一种情况,在没有 merge_close_vetices 的情况下运行 Laplacian smooth 不会产生尖峰,但是运行此修复程序然后运行 ​​Laplacian smooth 确实(幸运的是,这很容易通过不运行修复程序来修复:D)
    猜你喜欢
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多