如何使平滑的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函数进行了编辑。