我使用此 puyhon 代码将 nifti 文件转换为 .vtk 多数据网格
import itk
import vtk
input_filename = '/home/nour/Bureau/7ans/244/whatIneed/244seg_pve_2.nii.gz'
reader=itk.ImageFileReader[itk.Image[itk.UC,3]].New()
reader.SetFileName(input_filename)
reader.Update()
itkToVtkFilter = itk.ImageToVTKImageFilter[itk.Image[itk.UC,3]].New()
itkToVtkFilter.SetInput(reader.GetOutput())
myvtkImageData = itkToVtkFilter.GetOutput()
print("myvtkImageData")
以及保存和写入我使用的 .vtk 文件
writer = vtk.vtkPolyDataWriter()
writer.SetInputData()
writer.SetFileName("/home/nour/Bureau/7ans/244/whatIneed/Output.vtk")
writer.Write()
这里的错误: 错误:在 /work/standalone-x64-build/VTK-source/Common/ExecutionModel/vtkDemandDrivenPipeline.cxx 中,第 809 行 vtkCompositeDataPipeline (0x4d9cac0):算法 vtkPolyDataWriter(0x4de3ea0) 的输入端口索引 0 上的连接索引 0 的输入属于 vtkImageData 类型,但需要 vtkPolyData。
我想知道编写 vtk Polydata 文件的好方法是什么。 谢谢
您需要将图像(规则网格)转换为多边形网格,才能将其保存为 .vtk 文件。 对于 2D 网格,可以使用
vtkExtractSurface
过滤器来完成。
另一种解决方案是使用另一种格式(.vtk是旧格式):
vtkXMLImageDataWriter
,它使用 .vti 扩展名。vtkXMLPolyDataWriter
,它使用 .vtp 扩展名并提供多边形网格。您还可以使用 vtkXMLUnstructuredGridWriter
,它使用 .vtu 扩展名并且可以包含 3D 单元。非常感谢。据我了解: 1 读取nifti文件(分段文件) 2 应用itktovtk过滤器 3 创建网格(使用vtkContourFilter) 4 最后将其转换为polydata并保存到.vtk文件
是这样吗?
图像和多边形网格是根本不同类型的数据。您不能只是将图像投射到网格中。
要获得网格,您需要进行某种类型的等值面提取。通常,您会选择一些图像强度作为表面的值,然后使用诸如移动立方体之类的算法来创建该值的网格。
在 VTK 中,您可以使用 vtkContourFilter 从图像创建网格。 VTK 示例网站上有许多示例演示如何使用过滤器。这是一个:
https://github.com/lorensen/VTKExamples/blob/master/src/Python/ImplicitFunctions/Sphere.py