如何使平滑的vtk网格顶点均匀分布?
用下面的代码对立方体匹配生成的轮廓进行平滑处理后如何使平滑的vtk网格顶点均匀分布?,vtk,Vtk,用下面的代码对立方体匹配生成的轮廓进行平滑处理后 contour=vtk.vtkMarchingCubes() smoother = vtk.vtkWindowedSincPolyDataFilter() 结果如下所示。有些顶点分布不均匀。有没有办法让它们更“均匀分割” 对于从本帖中寻找答案的其他用户: C++使用VTK 使用pyvista/VTK的python ($pip安装pyacvd) 将SimpleTk二进制图像转换为VTK polydata的函数中使用pyacvd的示例: impo
contour=vtk.vtkMarchingCubes()
smoother = vtk.vtkWindowedSincPolyDataFilter()
结果如下所示。有些顶点分布不均匀。有没有办法让它们更“均匀分割”
对于从本帖中寻找答案的其他用户: C++使用VTK 使用pyvista/VTK的python ($pip安装pyacvd) 将SimpleTk二进制图像转换为VTK polydata的函数中使用pyacvd的示例:
import numpy as np
import SimpleITK as sitk
import vtk
from vtk.util import numpy_support
import pyvista as pv
import pyacvd
def sitk2vtk(self, sitk_pointer, nb_points=None):
numpy_array = sitk.GetArrayFromImage(sitk_pointer)
size = list(sitk_pointer.GetSize())
origin = list(sitk_pointer.GetOrigin())
spacing = list(sitk_pointer.GetSpacing())
label = numpy_support.numpy_to_vtk(num_array=numpy_array.ravel(), deep=True, array_type=vtk.VTK_FLOAT)
# Convert the VTK array to vtkImageData
img_vtk = vtk.vtkImageData()
img_vtk.SetDimensions(size)
img_vtk.SetSpacing(spacing)
img_vtk.SetOrigin(origin)
img_vtk.GetPointData().SetScalars(label)
MarchingCubeFilter = vtk.vtkDiscreteMarchingCubes()
MarchingCubeFilter.SetInputData(img_vtk)
MarchingCubeFilter.GenerateValues(1, 1, 1)
MarchingCubeFilter.Update()
if nb_points:
# wrapper vtk polydata to pyvista polydata
pv_temp = pv.PolyData(MarchingCubeFilter.GetOutput())
cluster = pyacvd.Clustering(pv_temp)
cluster.cluster(int(nb_points))
remesh = cluster.create_mesh()
remesh_vtk = vtk.vtkPolyData()
remesh_vtk.SetPoints(remesh.GetPoints())
remesh_vtk.SetVerts(remesh.GetVerts())
remesh_vtk.SetPolys(remesh.GetPolys())
return remesh_vtk
else:
return MarchingCubeFilter.GetOutput()
老实说,这些顶点在我看来相当不错。直接从行进中的立方体看起来不那么均匀,如果你在网格上运行抽取,它们看起来会更加不均匀。虽然这个链接可能会回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@JinLee抱歉,我通过提供python函数进行了编辑。