【ITK学习笔记】刚性配准实践

这里介绍通过simpleITK,实现两组图像的配准。这里具体应用场景是CT图像和MRI图像的配准。

目录

simpleITK实现的流程PipeLine

 对应代码的具体实现

配准参数的解释和设置

代码实现

配准结果显示

小结


simpleITK实现的流程PipeLine

simpleITK有提供了一个配准框架,实现迭代优化。其中,本人总结了simpleITK刚性配准的实现模板,此处与大家分享。

 对应代码的具体实现

配准参数的解释和设置

• 相似性度量,互信息(Mattes MI):
        • 直方图分类数,50。
        • 抽样百分比,1%。
• 插值器,sitkLinear。
• 优化器,梯度下降:
        •  学习率,参数空间中沿遍历方向的步长,1.0。
        • 迭代次数,最大迭代次数,100。
        •  收敛最小值,用于结合在给定窗口大小 1e-6 中估计的相似性度量的能量分布进行收敛检查的值。
        • 收敛窗口大小,用于估计相似性度量能量分布的相似性度量值的数量,10。

代码实现

下面是实现功能的python 代码

#2.【图像配准对象】
registration_method = sitk.ImageRegistrationMethod()

# 2.1Similarity metric settings.【互信息方法】
registration_method.SetMetricAsMattesMutualInformation(numberOfHistogramBins=50)
#【取样条件】
registration_method.SetMetricSamplingStrategy(registration_method.RANDOM)
registration_method.SetMetricSamplingPercentage(0.01)
#2.3【设定 插值方法 线性/临近替换/样条线】
registration_method.SetInterpolator(sitk.sitkLinear)

# 2.2 Optimizer settings.【优化器参数配置: 步长学习率,迭代次数,收敛验证的窗宽】
registration_method.SetOptimizerAsGradientDescent(learningRate=1.0, numberOfIterations=200, convergenceMinimumValue=1e-6, convergenceWindowSize=10)
#2.4 SetOptimizerScalesFromPhysicalShift【优化 平移mm 和 旋转degree 的变化尺度,】
registration_method.SetOptimizerScalesFromPhysicalShift()

# Setup for the multi-resolution framework.  
#2.5【多分辨率,金字塔逼近算法】
#registration_method.SetShrinkFactorsPerLevel(shrinkFactors = [4,2,1])
#registration_method.SetSmoothingSigmasPerLevel(smoothingSigmas=[2,1,0])
#registration_method.SmoothingSigmasAreSpecifiedInPhysicalUnitsOn()

# Don't optimize in-place, we would possibly like to run this cell multiple times.
#3.1设定一个初始值【变换矩阵初始值设定】,这里简单的拿图像中心几何对齐,为初始点
registration_method.SetInitialTransform(initial_transform, inPlace=False)

# Connect all of the observers so that we can perform plotting during registration.
#4.1【添加,事件响应的 方式】这里在不同事件,触发绘图等方法
registration_method.AddCommand(sitk.sitkStartEvent, rgui.start_plot)
registration_method.AddCommand(sitk.sitkEndEvent, rgui.end_plot)
registration_method.AddCommand(sitk.sitkMultiResolutionIterationEvent, rgui.update_multires_iterations) 
registration_method.AddCommand(sitk.sitkIterationEvent, lambda: rgui.plot_values(registration_method))

#5.1【执行,sitk配准对象的 内嵌Run Exe】
final_transform = registration_method.Execute(fixed_image, moving_image)

# Always check the reason optimization terminated.
print('Final metric value: {0}'.format(registration_method.GetMetricValue()))
print('Optimizer\'s stopping condition, {0}'.format(registration_method.GetOptimizerStopConditionDescription()))

配准结果显示

小结

图像配准前期的数据处理同样,simpleITK也提供了,很多做数据准备的工具。

在传统刚性基础上,也可实现非刚体配准,如Bspline 或者变形场。simpleITK也可实现。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值