1

我正在尝试通过 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。我该如何解决?

问候。

4

4 回答 4

1

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

于 2012-10-24T14:39:40.073 回答
0

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

于 2014-08-23T04:12:11.513 回答
0

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

于 2014-01-27T09:39:18.583 回答
0

我不知道为什么它不起作用,因为我没有尝试直接从 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

于 2016-10-06T16:18:33.110 回答