如何在Python中扩展ITK类?

时间:2016-02-24 15:44:13

标签: python itk image-registration

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

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

2 个答案:

答案 0 :(得分:4)

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指标。基本上,您只需修改前缀为GetValue()的文件中的GetValueAndDerivative()itk函数即可实现您的指标。如果要通过参数映射将参数传递到度量标准,则需要修改前缀为elx的文件,并使用CMakeLists文件向构建系统注册度量标准。参数映射是键值对,允许您配置包括度量标准在内的注册组件。您可以在SimpleElastix documentationelastix manual

中详细了解参数地图

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

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

答案 1 :(得分:1)

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

最好使用CK级别的ITK来完成类和调整算法。

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