我正在尝试从存储在txt文件中的3D坐标点创建3D蒙版模型。我使用Marching cubes算法。它看起来不能连接单独的点,因此在模型中创建了孔。
步骤:(by https://lorensen.github.io/VTKExamples/site/Cxx/Modelling/MarchingCubes/)
首先,从文件中加载3D点作为vtkPolyData。
然后,使用vtkVoxelModeller
将voxelModeller输出转化为MC算法,最终实现可视化
有什么想法吗?
谢谢
发布于 2018-11-13 23:31:00
该示例采用球面网格(也称为形成封闭的3D形状的一组三角形),将其转换为体素表示(网格外部的体素为黑色而内部的体素不是的3D图像),然后使用Marching Cubes算法将其转换回网格。在实践中,示例的输入和输出是非常相似的网格。
在您的示例中,加载这些点并尝试创建它们的体素表示。问题是你的点集不足以定义一个体积,它们不是一个封闭的网格,只是一个点的列表。
为了复制示例,您应该执行以下操作:
1)从你的点构建一个3D网格(你没有给出这些点是什么/代表什么的信息,所以我对这个任务没有太大的帮助)。换句话说,您需要告诉这些点是如何连接在一起的,然后形成一个3D形状(vtkPolyData)。VTK不能猜测你的点是如何连接的,你必须告诉它。
2)一旦你有了网格,如果你需要它的体素表示(vtkImageData),你可以使用vtkVoxelModeller或vtkImplicitModeller。此时,您可以使用需要vtkImageData作为输入的vtk过滤器。
3)最后,为了将体素转换回网格(vtkPolyData),您可以使用vtkMarchingCubes (或更好的vtkFlyingEdges3D,这是一个非常类似的算法,但速度更快)。
编辑:不清楚您想要的图形应该是什么,但您可以尝试使用vtkImageOpenClose3D,因此步骤如下:
首先,从文件中加载3D点作为vtkPolyData。
然后,使用vtkVoxelModeller
将voxelModeller输出转换为vtkImageOpenClose3D算法,然后将vtkImageOpenClose3D算法输出为MC (change to vtkFlyingEdges3D)算法,最后进行可视化
VtkImageOpenClose3D示例:https://www.vtk.org/Wiki/VTK/Examples/Cxx/Images/ImageOpenClose3D
https://stackoverflow.com/questions/53283555
复制相似问题