科 / 研 / 图 / 像 / 处 / 理
Elastix 是一个用于图像刚性和非刚性配准的工具箱,由一系列常用于解决(医学)图像配准问题的算法组成。官网:https://elastix.dev/
elastix支持C++、Python、Java、R、Ruby、C#和Lua等语言。通常安装elastix,需要较为复杂的编译过程。
PyElastix把elastix封装成Python模块,使得调用elastix更加容易:
https://github.com/almarklein/pyelastix
这篇文章会介绍怎样安装 PyElastix,并利用 elastix 对 MRI 图像进行非刚性配准。
一、安装pyelastix
1、安装pyelastix包
首先你需要在电脑上安装Anaconda,生成一个新的环境,方便不同Python包的版本管理:
conda create --name pyelastix
激活该环境:
conda activate pyelastix
安装pyelastix包:
pip install pyelastix
如果pip出错,用conda进行安装:
conda install pyelastix -c conda-forge
安装一些需要用到的包:
pip install scikit-image
pip install scipy
pip install ipykernel
python -m ipykernel install --user --name=pyelastix
2、安装elastix
在 GitHub 上下载 elastix 压缩包:https://github.com/SuperElastix/elastix/releases/tag/5.1.0
或公众号后台回复“elastix”获取安装包。
将 elastix 压缩包解压成文件夹:
打开Windows的系统,打开高级系统设置:
点击环境变量:
在系统变量那里,点击新建,把 elastix 文件夹加入到系统路径:
完成这两个步骤,即完成了 PyElastix 的安装。
二、实例代码
from skimage import io
import pyelastix
ref = io.imread('T1_brain.tif')
mov = io.imread('T2_brain.tif')
ref = ref.astype('float32')
mov = mov.astype('float32')
params = pyelastix.get_default_params()
params.MaximumNumberOfIterations = 200
params.FinalGridSpacingInVoxels = 20
mov_deformed, field = pyelastix.register(mov, ref, params)
io.imsave('mov_deformed.tif',mov_deformed)
这里提供了一个对T1,T2图像进行3D配准的例子。原始输入:
利用 elastix 进行 3D 非线性配准后,输出:
关键代码分析:
ref = ref.astype('float32')
mov = mov.astype('float32')
读入图像后,需要把图像转成float,elastix才能输出正确的结果。
params.MaximumNumberOfIterations = 200
params.FinalGridSpacingInVoxels = 20
MaximumNumberOfIterations,即迭代次数。
FinalGridSpacingInVoxels,设置越小,配准越细节,也更容易出现过拟合。
可以针对自己的图像,调整这两个参数,根据配准结果和速度选择自己的参数。
往期回顾