繁体   English   中英

如何使用 python 将 itk 图像文件转换为 vtk?

[英]how to convert itk image file to vtk with python?

我正在尝试通过 itk 读取一个 nrrd 文件并通过 vtk 显示它。 但是我在将 itk 转换为 vtk 时遇到了一些麻烦。

import itk


file_name = '/home/yao/workspace/test/1.nrrd'
image_type = itk.Image[itk.UC, 2]
reader = itk.ImageFileReader[image_type].New()
reader.SetFileName( file_name )
reader.Update()

itk_vtk_converter = itk.ImageToVTKImageFilter[image_type].New()
itk_vtk_converter.SetInput(reader.GetOutput())
itk_vtk_converter.Update()

我收到消息

Traceback (most recent call last):   File "ex1.py", line 11, in <module>
    itk_vtk_converter = itk.ImageToVTKImageFilter[image_type].New()   File "/usr/lib/InsightToolkit/WrapITK/Python/itkLazy.py", line 14, in
__getattribute__
    value = types.ModuleType.__getattribute__(self, attr) AttributeError: 'LazyITKModule' object has no attribute 'ImageToVTKImageFilter'

我用的是itk3.20,python2.7。 我该如何解决?

问候。

好像现在有一些函数可以在itk和vtk之间转换图像而无需编译vtkglue

import itk
im_vtk = itk.vtk_image_from_image(im_itk) #itk -> vtk
im_itk = itk.image_from_vtk_image(im_vtk) #vtk -> itk

来源: https://discourse.itk.org/t/convert-vtk-image-to-itk-image-without-itk-vtkglue/3009/2

我的版本:

  • python 3.9
  • itk (5.2.1.post1)

C ++过滤器itk :: ImageToVTKImageFilter没有包装,但可以改用itk.VTKImageImport。您可以在http://www.vtk.org/Wiki/VTK/Examples/Python/vtkWithNumpy上查看 VTKImageImport。 您可以使用itkPyBuffer在numpy数组中转换itkImage

您的代码是正确的。 我认为您可能无法在Python中正确构建itk。 我认为,在Python中使用ITK / VTK的最简单方法是使用Pythonxy。 你可以试试。

使用最新版本的ITK 4,该版本具有这些类的包装器(必须在CMake配置中启用ITKVtkGlue模块)。

我不知道为什么它不起作用,因为我没有直接尝试从ITK到VTk,但是您可以尝试使用此代码。

def itkImageToVtk(image):
    arrayData = sitk.GetArrayFromImage(image)
    print arrayData.flags
    arrayDataC = np.array(arrayData[:,:,1], order='C')
    print arrayDataC.flags
    ArrayDicom = numpy_support.numpy_to_vtk(arrayDataC)

它将2D ITK图像转换为2D VTK

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM