如何在Python中实现itk图像和SimpleITK图像之间的转换?

时间:2014-01-27 09:17:54

标签: python c++ numpy itk

我知道在C ++中实现itk图像和SimpleITK图像之间转换的方法,这是SimpleITK中的一个例子(Examples / ITKIntegration.cxx)。

  //
  // Extract the itk image from the SimpleITK image
  //
  InternalImageType::Pointer itkImage =
    dynamic_cast <InternalImageType*>( image.GetITKBase() );
  ...
  //
  // Return to the simpleITK setting by making a SimpleITK image using the
  // output of the blur filter.
  //
  sitk::Image blurredImage = sitk::Image( blurFilter->GetOutput() );

但是在Python中,当我使用“sitk.Image(itkImage)”时itkImage是一个itkImage,我得到一个错误“this = _SimpleITK.new_Image(* args) NotImplementedError:重载函数'new_Image'的参数数目或类型错误。在python中,不可能在C ++中转换类似“dynamic_cast”的类型。

有一个可能的解决方案,它使用PyBuffer将itkImage转换为numpy数组,然后使用SimpleITK最终将数组转换为SimpleITK图像。但我在构建itkPyBuffer时失败了。我认为这种方法不能直接解决这个问题。

你能帮我把C ++代码转换成可用的python代码吗?谢谢。

2 个答案:

答案 0 :(得分:2)

这是 ITK 和 SimpleITK 图像之间的转换器: https://github.com/gregpost/itk-SimpleITK-Converter

答案 1 :(得分:0)

我可以复制一个SimpleITK图像无法在Python中从itk图像中实例化。我没有找到解决PyBuffer的方法,所以你可能必须编译。以下是有关可能对您有所帮助的小错误的说明:https://pypi.python.org/pypi/MedPy/0.1.0