医学图像配准工具SimpleElastix和Elastix的使用——解决参数文件的重采样插值方式(ResampleInterpolator)的影响

Elastix是常用的配准工具,而SimpleElastix是综合了SimpleITK库和Elastix使之能够在Python上运行。
详细的配置和入门教程可见:
医学图像配置工具Elastix的配置和入门
医学图像配准工具SimpleElastix的配置和入门
由于Elastix和SimpleElastix进行配准工作需要先读取相应的参数文件,参数文件的设置直接关系到配准结果的好坏,下面主要以SimpleElastix为主进行介绍。

一、问题描述

我在用SimpleElastix对CT和CBCT图像进行刚性配准,参数文件是直接调用官网提供的刚性配准参数文件Parameters_Rigid.txt
获得Transform文件后在用Transformix对label_CT进行相应的变换,但是发现了问题,得到的结果存在虚影也就是各个区域从原来的不连续变成连续,如下图:
在这里插入图片描述

二、更改原始参数文件的重采样插值方式

通过查看原始的刚性配准的参数文件发现此处采用的B样条重采样插值
在这里插入图片描述
于是分别更改重采样插值方式:
在这里插入图片描述
得到的配准结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过结果可以发现,只更改原始的刚性配准文件的重采样插值方式后,
B样条:Transformix后的配准结果有虚影;
最近邻:Elastix配准后的结果会出现莫名的移位,Transformix后的结果过相对正常
线性插值:Transformix后的结果依旧问题

因此,单单改动原始刚性配准文件的重采样插值方式是不够的,并且
Elastix的结果:线性插值>B样条>最近邻,
Transformix的结果:最近邻>线性插值>B样条

三、解决方案

通过以上对比可知,对于我手头的数据,通过更改原始刚性配准文件的重采样插值方式为线性插值方式并且将得到的Transform参数文件的重采样插值方式改为最近邻插值方式的结果是最好的
SimpleElastix代码如下:

# 获得transform
elastixImageFilter = sitk.ElastixImageFilter()
elastixImageFilter.SetFixedImage(sitk.ReadImage(r'.../CBCT_path'))
elastixImageFilter.SetMovingImage(sitk.ReadImage(r'.../CT_path'))
elastixImageFilter.SetParameterMap(sitk.ReadParameterFile(r'.../Parameters_Rigid.txt'))
elastixImageFilter.LogToConsoleOn()
elastixImageFilter.Execute()
sitk.WriteImage(elastixImageFilter.GetResultImage(), r'.../outdir')

# Instantiate SimpleTransformix
transformixImageFilter = sitk.TransformixImageFilter()
# Read Input
transformixImageFilter.SetMovingImage(sitk.ReadImage(r'.../label_path'))
tranformixMap = transformixImageFilter.SetTransformParameterMap(elastixImageFilter.GetTransformParameterMap())

# 更改label配准后重采样的插值方式
tranformixMap["ResampleInterpolator"] = ["FinalNearestNeighborInterpolator"]  # 方法1,更改ResampleInterpolator
# tranformixMap["FinalBSplineInterpolationOrder"] = ["0"]                     # 方法2, 若初始的配准方案是B样条则可通过更改FinalBSplineInterpolationOrder实现
sitk.WriteParameterFile(tranformixMap, ".../TransformParameters.0.txt")

# Perform warp
transformixImageFilter.LogToConsoleOn()
transformixImageFilter.Execute()
# Write result image
sitk.WriteImage(transformixImageFilter.GetResultImage(),r'.../outdir')

结果:
在这里插入图片描述

关于Parameter Maps的详细介绍可见SimpleElastix社区:https://simpleelastix.readthedocs.io/ParameterMaps.html

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Elastix是一个开源的基于Asterisk的通信解决方案,用于构建企业级电话系统。以下是Elastix使用方式: 1. 下载和安装:首先,在Elastix的官方网站上下载适合您的操作系统的最新版本。安装过程中,您需要遵循安装向导的指示来完成安装。 2. 配置:安装完成后,您需要进行一些基本的配置,比如设置网络参数、语言选择、时区、admin密码等。这些配置步骤都可以通过Elastix的Web管理界面来完成。 3. 添加电话线路:在Elastix中,电话线路需要被添加到系统中才能够进行拨打和接听电话。您可以通过界面的“Trunks”选项来添加电话线路,并配置相应的参数,如提供商信息、拨号规则等。 4. 配置分机:在Elastix中,分机是与电话终端设备相关联的虚拟电话号码。您可以通过界面的“Extensions”选项来添加和配置分机,包括分机号码、密码、语音信箱等。 5. 设定呼叫规则:Elastix允许用户自定义呼叫规则,以便根据需要将呼叫路由到特定的电话线路或分机。您可以根据不同的条件设置呼叫规则,如时间条件、呼叫者ID等。在界面的“Outbound Routes”选项中进行配置。 6. 配置呼叫特征:Elastix提供了一系列的电话特征,如呼叫转移、呼叫等待、呼叫会议等。您可以通过界面的“Feature Codes”选项来配置这些电话特征。 7. 监视和管理:Elastix提供了实时监视和管理电话系统的选项。您可以通过Web管理界面来监视系统的状态,如连接数、呼叫日志等。您还可以配置系统的安全选项、备份和还原数据等。 总之,Elastix通过其友好的Web界面,使得用户可以方便地进行电话系统的配置和管理。无论是中小型企业还是个人用户,都可以使用Elastix来搭建稳定、高效的电话系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值