簡體   English   中英

Meshlab Laplacian Smooth 引入了尖峰

[英]Meshlab Laplacian Smooth introduces spikes

我正在使用 MeshLab 平滑從 3d numpy 陣列通過 marching_cubes 和 pymesh 獲得的網格。 我正在處理一些類似的網格,其中只有一個給我這個問題。 使用的濾波器是帶有參數的拉普拉斯平滑濾波器:

  • 平滑步驟 = 1
  • 一維邊界平滑 = True
  • 余切加權 = True

附上拉普拉斯平滑前后的網格圖像。 不幸的是,由於隱私問題,必須在感興趣的區域裁剪圖像。
追蹤問題的任何幫助或任何調試建議都會非常有幫助。
謝謝!

第一區域拉普拉斯平滑之前的網格

第一個尖峰

第二區域拉普拉斯平滑之前的網格

第二個尖峰

你能提供一個網格樣本嗎? 由於 MarchingCubes 可能導致退化的零面積三角形,這可能是一個數值問題。 原因是拉普拉斯平滑試圖沿着曲面的切平面移動頂點,導致零面積三角形未定義。 最終,您還可以嘗試通過運行合並關閉頂點過濾器來刪除那些退化的三角形。 這個問題也可能出現,因為桌面 meshlab 運行在浮動上,而其 python 對應的 pymeshlab 運行在 double 上。 最終只需使用 pymeshlab 直接從 numpy arrays 嘗試網格

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM