2014-01-27 23 views
2

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

// 
    // 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,当我使用其中itkImage是itkImage “sitk.Image(itkImage)”,我得到一个错误“这个= _SimpleITK.new_Image(*参数) NotImplementedError:错误数量或类型的重载函数'new_Image'“的参数。而在Python中,不可能像C++中的“dynamic_cast”那样转换类型。

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

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

回答

0

我可以复制一个SimpleITK图像无法在Python中从itk图像实例化。我没有找到解决PyBuffer的方法,所以你可能需要编译。这里有一个关于可能帮助你的小错误的描述:https://pypi.python.org/pypi/MedPy/0.1.0

+0

谢谢你的回答。我已经避免通过将名为DeVIDE(http://www.ohloh.net/p/DeVIDE)的所有关于itk的文件复制到python itk目录中,因为它在DeVIDE中具有“PyBuffer”并且DeVIDE本身就是易于安装。我的解决方案听起来很奇怪,但它工作。 – ghk