保存并写入 .vtk 多数据文件

问题描述 投票:0回答:3

我使用此 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 文件的好方法是什么。 谢谢

python vtk
3个回答
1
投票

您需要将图像(规则网格)转换为多边形网格,才能将其保存为 .vtk 文件。 对于 2D 网格,可以使用

vtkExtractSurface
过滤器来完成。

另一种解决方案是使用另一种格式(.vtk是旧格式):

  • 如果您想保存常规网格,可以使用
    vtkXMLImageDataWriter
    ,它使用 .vti 扩展名。
  • 如果您想要非结构化网格,可以使用
    vtkXMLPolyDataWriter
    ,它使用 .vtp 扩展名并提供多边形网格。您还可以使用
    vtkXMLUnstructuredGridWriter
    ,它使用 .vtu 扩展名并且可以包含 3D 单元。

0
投票

非常感谢。据我了解: 1 读取nifti文件(分段文件) 2 应用itktovtk过滤器 3 创建网格(使用vtkContourFilter) 4 最后将其转换为polydata并保存到.vtk文件

是这样吗?


0
投票

图像和多边形网格是根本不同类型的数据。您不能只是将图像投射到网格中。

要获得网格,您需要进行某种类型的等值面提取。通常,您会选择一些图像强度作为表面的值,然后使用诸如移动立方体之类的算法来创建该值的网格。

在 VTK 中,您可以使用 vtkContourFilter 从图像创建网格。 VTK 示例网站上有许多示例演示如何使用过滤器。这是一个:

https://github.com/lorensen/VTKExamples/blob/master/src/Python/ImplicitFunctions/Sphere.py

© www.soinside.com 2019 - 2024. All rights reserved.