【发布时间】:2016-02-24 15:44:12
【问题描述】:
SimpleITK 提供易于使用的 Python 界面。我可以从那里扩展课程吗?
我需要解决一个注册问题,这需要我编写自定义的注册类,尤其是相似度度量。如何在 Python 中扩展 SimpleITK 以供我使用?
【问题讨论】:
标签: python itk image-registration
SimpleITK 提供易于使用的 Python 界面。我可以从那里扩展课程吗?
我需要解决一个注册问题,这需要我编写自定义的注册类,尤其是相似度度量。如何在 Python 中扩展 SimpleITK 以供我使用?
【问题讨论】:
标签: python itk image-registration
SimpleElastix 包是 SimpleITK 的扩展,除了标准的 SimpleITK 方法外,它还包括 elastix 注册库。您可以在 elastix 中编写指标,并使用 SimpleElastix 将指标包装在 Python(或 SimpleITK 支持的任何其他语言)中。然后,您将使用 SimpleElastix 执行注册。要在 SimpleElastix 中使用您的潜在指标:
import SimpleITK as sitk
SimpleElastix = sitk.SimpleElastix()
SimpleElastix.SetParameter("Metric", "NameOfYourMetric")
SimpleElastix.SetFixedImage(sitk.ReadImage("fixedImage.nii"))
SimpleElastix.SetMovingImage(sitk.ReadImage("movingImage.nii"))
resultImage = SimpleElastix.Execute()
Elastix 本身是 ITK v3 注册库的扩展,因此如果您对 ITK 感到满意,elastix 代码库对您来说不会陌生。您可以通过查看src/Components/Metrics 目录中的示例来了解指标是如何实现的。例如,看一下 AdvancedMeanSqaures 指标。基本上你只需要修改以itk为前缀的文件中的GetValue()和GetValueAndDerivative()函数来实现你的度量。然后,如果您想通过参数映射和 CMakeLists 文件将参数传递给指标以将指标注册到构建系统,则需要修改前缀为 elx 的文件。参数映射是键值对,允许您配置注册组件,包括您的指标。您可以在SimpleElastix documentation 或elastix manual 中阅读有关参数映射的更多信息。
要使用 SimpleElastix 包装您的指标,请克隆 the repository 并按照指南 how to build SimpleElastix manually 进行操作,但您将 ELASTIX_DIR 设置为修改后的 elastix 版本。 elastix 构建系统将负责将您的指标包装在 elastix 中,而 SimpleElastix 构建系统将负责将 elastix 包装在 python 中。
免责声明:我是 SimpleElastix 的作者。
【讨论】:
Python 的封装 SimpleITK 接口不提供扩展或派生的接口。 SimpleITK ImageRegistrationMethods 的选项是可用的选项。
派生类和调整算法最好在 C++ 级别使用 ITK。
您也许可以将一个带有 SimpleITK 和 Python 组件的小注册框架放在一起。例如,您可以使用 SimpleITK 中的 ResampleImageFilter 和 Transform 类以及 scipy 优化器和自定义指标。
【讨论】: