Python 中的 ITK:是否为 SimpleITK?
ITK in Python: SimpleITK or not?
由于 Python
中的 SimpleITK
,我已经开始使用 ITK
工作了一周。虽然目前我对 SimpleITK
很满意,但我注意到 Powell optimization scheme
或 OnePlusEvolutionary
等某些功能在 SimpleITK
中不可用。好像和地标注册方法一样。
所以,我想知道是否有办法在 SimpleITK
中检索 ITK
(C++
)中可用的所有功能,或者是否有必要执行我自己的包装?
如果没有,我稍后会学习 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()
由于 Python
中的 SimpleITK
,我已经开始使用 ITK
工作了一周。虽然目前我对 SimpleITK
很满意,但我注意到 Powell optimization scheme
或 OnePlusEvolutionary
等某些功能在 SimpleITK
中不可用。好像和地标注册方法一样。
所以,我想知道是否有办法在 SimpleITK
中检索 ITK
(C++
)中可用的所有功能,或者是否有必要执行我自己的包装?
如果没有,我稍后会学习 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
文件从 ITKbuild/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()