4

我正在使用带有 ITK 包装器的 python 2.6(来自 PythonXY 2.6.6.2)。我正在尝试将 3D 图像从 numpy/scipy 发送到 itk 进行处理。

import itk
imageType = itk.Image.F3
buf =  scipy.zeros( (100,100,100), dtype = float) 
itkImage = itk.PyBuffer[imageType].GetImageFromArray(buf)

GetImageFromArray() 失败并出现以下错误:

RuntimeError: Contiguous array couldn't be created from input python object

但是,如果我自己不创建缓冲区,而是让 ITK 创建图像,GetImageFromArray() 会突然起作用:

import itk
imageType = itk.Image.F3
itkImage1 = imageType.New(Regions=[256, 256, 256])
buf = itk.PyBuffer[imageType].GetArrayFromImage(itkImage1)
itkImage2 = itk.PyBuffer[imageType].GetImageFromArray(buf)

我如何自己创建一个 numpy 数组,它将被 GetImageFromArray() 接受?

4

1 回答 1

6

答案很简单:

  • 在 python 中,“浮点数”可能是 64 位(c 中的双精度)。
  • 在 itk F3 是一个 32 位浮点数。

为 ndarray 指定正确的类型使其工作:

import itk
imageType = itk.Image.F3
buf =  scipy.zeros( (100,100,100), dtype = numpy.float32)
itkImage = itk.PyBuffer[imageType].GetImageFromArray(buf)
于 2011-11-04T15:07:32.827 回答