Почему Python ITK PyBuffer не принимает мой массивный массив? - PullRequest
4 голосов
/ 04 ноября 2011

Я использую python 2.6 с оболочками ITK (из PythonXY 2.6.6.2). Я пытаюсь отправить трехмерное изображение из 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)

Как самому создать пустой массив, который будет принят GetImageFromArray ()?

1 Ответ

6 голосов
/ 04 ноября 2011

Ответ был прост:

  • В python "float" может быть 64-битным (двойным в c).
  • Ink F3 - 32-разрядное число с плавающей запятой.

Указание правильного типа для ndarray заставляет его работать:

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