Python 中的 ITK:是否为 SimpleITK?

ITK in Python: SimpleITK or not?

由于 Python 中的 SimpleITK,我已经开始使用 ITK 工作了一周。虽然目前我对 SimpleITK 很满意,但我注意到 Powell optimization schemeOnePlusEvolutionary 等某些功能在 SimpleITK 中不可用。好像和地标注册方法一样。

所以,我想知道是否有办法在 SimpleITK 中检索 ITKC++)中可用的所有功能,或者是否有必要执行我自己的包装?

如果没有,我稍后会学习 C++ 这样做!

谢谢!

还有 WrapITK,它是 ITK 的 python 包装,您可以启用它以使用 ITK 进行编译(因此,您必须自己编译它,但不需要编写变形代码至少)。请参阅 http://kitware.com/blog/home/post/888, http://www.itk.org/Wiki/ITK/Wrapping , http://www.itk.org/Wiki/ITK/Release_4/Wrapping/WrapITK_Installation.t

但请注意,可能并非所有过滤器都被包装(http://www.itk.org/Wiki/Proposals:Increasing_WrapITK_Coverage#List_of_Unwrapped_Filters,最后一次更新是在 2009 年,所以现在情况可能更好了)。 我遇到的唯一编译的 wrapITK 包是 Devide-RE https://www.youtube.com/watch?v=-b1zS536R2M (with an older version of ITK, 3.2 if I remember correctly), but maybe also Slicer and Vistrail have it (http://www.itk.org/pipermail/insight-users/2009-August/031910.html)

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

这个过程并不十分顺利。我过去曾在 Windows 机器上完成构建,然后注意到我不得不遇到的一些不太顺利的步骤。我会把它们放在这里。由于您没有提到 OS,我将继续解释 Windows 的设置。看看你能不能把它弄起来运行宁。

  • ITK-4.6 + Python2.7 + CMake + VS2008 专业版(均为 32 位)
  • VS2008 之后才能编译生成 python 绑定所必需的 GCCXML
  • 配置CMAKE后,需要额外设置以下标志:
    • ITK_WRAP_PYTHON
    • ITK_WRAP_*(所有类型:float、double 等)
    • ITK_BUILD_SHARED_LIBS(如果设置了第一个标志则自动设置)
  • 在 VS2008 中,仅在 Release 模式下构建。项目资源管理器中的项目数量将超过 500 个。应该构建大约 300-350 个。
  • 构建时,请确保您具有可访问的 Internet 连接以下载 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()