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