python - Python 中的 ITK : SimpleITK or not?

标签 python c++ image-processing itk

借助 Python 中的 SimpleITK,我已经开始使用 ITK 一周了。尽管目前我对 SimpleITK 很满意,但我注意到一些功能,例如 Powell 优化方案OnePlusEvolutionary 并不理想在 SimpleITK 中可用。这似乎与基于地标的注册方法相同。

所以,我想知道是否有一种方法可以在 SimpleITK 中检索 ITK(在 C++ 中)中可用的所有功能,或者如果有必要自己包装吗?

如果没有,我稍后会学习 C++ 来做到这一点!

谢谢!

最佳答案

你是对的。 SimpleITK 的功能有限。然而,可以使用 WrapITK 接口(interface)访问 Python 中的整个 ITK 库。这是一个旧界面,我相信已经有一段时间没有更新了。但是,仍然可以从源代码编译新版本并使用 WrapITK。

这个过程并不顺利。我过去曾在 Windows 机器上完成过构建,然后注意到我必须遇到的一些不太顺利的步骤。我会把它们放在这里。由于您没有提到您的操作系统,我将继续解释 Windows 的设置。让我们看看您是否能够启动并运行它。

  • ITK-4.6 + Python2.7 + CMake + VS2008 专业版(全部 32 位)
  • VS2008 之后的版本都可以编译 GCCXML,这是生成 python 绑定(bind)所必需的
  • 配置 CMAKE 后,还需要设置以下标志:
    • ITK_WRAP_PYTHON
    • ITK_WRAP_*(所有类型:浮点型、 double 型等)
    • ITK_BUILD_SHARED_LIBS(如果设置了第一个标志,则自动设置)
  • 在 VS2008 中,仅在 Release模式下构建。项目浏览器中的项目数量将超过 500 个。应该构建大约 300-350 个。
  • 构建时,请确保您有可访问的互联网连接来下载 GCCXML(在 VS2008 中开始构建后可能会下载该文件)。验证下载时不应出现错误。如果有,可能是目录创建权限错误。
  • 项目构建时应该没有错误
  • WrapITK.pth 文件从 ITK build/Wrapping/Generators/Python/Release 复制到 Python/Lib/site-packages
  • 将以下内容添加到您的 Path 变量中:
    • C:\ProgramLibs\ITK\build2008\lib\Release
    • C:\ProgramLibs\ITK\build2008\bin\Release
    • C:\ProgramLibs\ITK\build2008\lib
  • 现在 ITK 应该可以正常工作(下面是一个测试 python 文件,您可以使用它对构建运行健全性检查)。除了每次在程序中或在 Python 解释器上第一次调用 itk.Image 时,都会出现十几个警告,并且执行这些警告需要时间。这是一个已知的问题。一旦你过了这个阶段,一切就顺利了。

测试文件

import itk
pixelType = itk.UC
imageType = itk.Image[pixelType, 2]
readerType = itk.ImageFileReader[imageType]
writerType = itk.ImageFileWriter[imageType]
reader = readerType.New()
writer = writerType.New()
reader.SetFileName("<input image file location>")
writer.SetFileName("D:/Output.png")
writer.SetInput( reader.GetOutput() )
writer.Update()

关于python - Python 中的 ITK : SimpleITK or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31285492/

相关文章:

linux - gmic apply_video 的正确语法是什么

java - 图像裁剪,使用 Java 去除图像中不需要的白色部分

python - 如何使用 numpy 保存和读回多维字符串数组(可能)?

c++ - CUDA 设备代码支持哪些真正的 C++ 语言结构?

c++ - g++ 的严格别名警告准确性

c++ - 图像处理术语 : Bit Depth

java - 如何使用 Java 加密消息,然后使用 Python 为 AES GCM 算法解密消息

python - 与 contains() 的两级深度一对多关系

python - 无法在 Windows 上运行 Pangolin pyexamples

c++ - 如何在 LIBSVM 中定义不同标准的交叉验证?