【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也可实现。

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
ITK(Insight Segmentation and Registration Toolkit)是一个强大的开源软件库,用于图像处理、分割和配准。互信息图像配准ITK中一个常用的配准算法之一。 互信息是一种统计量,用于度量两幅图像之间的相似性。它基于信息论的概念,通过将图像中的像素值看作随机变量来衡量图像之间的相关性。互信息越大,说明图像之间的相似性越高。 互信息图像配准在医学影像领域广泛应用。例如,在脑部MRI图像配准中,互信息可以帮助将两幅图像(例如,不同时间点的MRI扫描)对准以实现更精确的比较和分析。在执行互信息配准时,ITK提供了一些用于计算互信息的方法,例如直方图和正态分布。 ITK的互信息图像配准算法主要包括以下步骤: 1. 加载待配准的图像数据。 2. 预处理图像数据,例如裁剪、平滑和重采样。 3. 定义互信息度量方法,选择合适的参数。 4. 计算图像之间的互信息,可以利用直方图或概率密度函数来实现。 5. 通过最大化互信息来优化配准参数,例如调整图像的平移、旋转和缩放。 6. 应用优化后的参数,将图像进行配准,使其尽可能相似。 7. 检查配准结果是否满足要求,如需要可以进行后处理。 ITK的互信息图像配准提供了一个灵活且可扩展的框架,使用户可以根据具体需求选择适合的参数和方法。同时,ITK还提供了其他类型的配准算法,如基于特征的配准和弹性配准,以便用户根据具体应用场景选择合适的方法。 总之,ITK互信息图像配准是一种有效的配准方法,在医学影像处理中具有广泛的应用和研究价值。它能够提供准确的图像对齐结果,从而帮助医生和研究人员更好地分析和理解图像数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值