我正在尝试通过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。 我该如何解决?
问候。
瑶
答案 0 :(得分:1)
C ++过滤器itk :: ImageToVTKImageFilter未包装,但您可以使用itk.VTKImageImport。您可以在http://www.vtk.org/Wiki/VTK/Examples/Python/vtkWithNumpy VTKImageImport中查看。您可以使用itkPyBuffer在numpy数组中转换itkImage
答案 1 :(得分:0)
您的代码是正确的。我想你可能无法在Python中正确构建itk。在我看来,在Python中使用ITK / VTK的最简单方法是使用Pythonxy。你可以尝试一下。
答案 2 :(得分:0)
使用最新版本的ITK 4,它包含这些类的包装(您必须在CMake配置中启用ITKVtkGlue模块)。
答案 3 :(得分: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