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

Posted

技术标签:

【中文标题】如何在 Python 中实现 itk 图像和 SimpleITK 图像之间的转换?【英文标题】:How can I implement the conversion between itk image and SimpleITK image in Python? 【发布时间】:2014-01-27 09:17:53 【问题描述】:

我知道如何在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 中,当我使用其中 itkImage 是 itkImage 的“sitk.Image(itkImage)”时,出现错误“this = _SimpleITK.new_Image(*args) NotImplementedError: 重载函数“new_Image”的参数数量或类型错误。而在 python 中,不可能在 C++ 中转换类型如“dynamic_cast”。

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

虽然这似乎是一个有效的答案,但您应该提供更多信息,了解这些信息如何为该问题提供重要的解决方案。请尝试改进您的答案。 请为任何链接添加上下文,以便您的答案是独立的,这意味着答案需要在答案本身中。见"Provide context for links"。如果您可以在此处用自己的话回答问题并仅作为参考链接,那将是更可取的。请注意,此帖子可能会被删除。它是如何使用的?展示它如何回答问题。【参考方案2】:

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

【讨论】:

感谢您的回答。我避免通过将所有关于 itk 的文件从名为 DeVIDE(ohloh.net/p/DeVIDE) 的软件复制到 python itk 目录来进行编译,因为 DeVIDE 中的 itk 具有“PyBuffer”并且 DeVIDE 本身很容易安装。我的解决方案听起来很奇怪,但确实有效。

以上是关于如何在 Python 中实现 itk 图像和 SimpleITK 图像之间的转换?的主要内容,如果未能解决你的问题,请参考以下文章

尝试注册 ImageIOFactory 时出现 ITK 构建错误

如何在配置了 ITK 的 Visual Studio 中使用 C++ 读取和写入图像

如何使用 ITK 将调色板图像读取为标量图像?

如何在ios的页面控件中实现水平和垂直滚动

如何在寻呼机中实现图像视图和按钮

如何在android中实现图像视图的缩放效果?