【问题标题】:How to extend an ITK class in Python?如何在 Python 中扩展 ITK 类?
【发布时间】:2016-02-24 15:44:12
【问题描述】:

SimpleITK 提供易于使用的 Python 界面。我可以从那里扩展课程吗?

我需要解决一个注册问题,这需要我编写自定义的注册类,尤其是相似度度量。如何在 Python 中扩展 SimpleITK 以供我使用?

【问题讨论】:

    标签: python itk image-registration


    【解决方案1】:

    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 documentationelastix manual 中阅读有关参数映射的更多信息。

    要使用 SimpleElastix 包装您的指标,请克隆 the repository 并按照指南 how to build SimpleElastix manually 进行操作,但您将 ELASTIX_DIR 设置为修改后的 elastix 版本。 elastix 构建系统将负责将您的指标包装在 elastix 中,而 SimpleElastix 构建系统将负责将 elastix 包装在 python 中。

    免责声明:我是 SimpleElastix 的作者。

    【讨论】:

    • 这听起来非常接近我正在寻找的东西。您能否详细说明在实现后如何包装我自己的指标(我假设在 C++ 中)?或者我可以直接在 Python 中实现指标吗?谢谢!
    • 用有关如何使用 SimpleElastix 包装指标的信息更新了答案。不幸的是,使用这种方法,您无法直接在 python 中实现您的指标。
    【解决方案2】:

    Python 的封装 SimpleITK 接口不提供扩展或派生的接口。 SimpleITK ImageRegistrationMethods 的选项是可用的选项。

    派生类和调整算法最好在 C++ 级别使用 ITK。

    您也许可以将一个带有 SimpleITK 和 Python 组件的小注册框架放在一起。例如,您可以使用 SimpleITK 中的 ResampleImageFilter 和 Transform 类以及 scipy 优化器和自定义指标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 2010-09-07
      • 2012-08-27
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多