Python | ANTs 多模态医学影像配准

文摘   科学   2024-10-29 13:48   中国  

科 / 研 / 图 / 像 / 处 / 理

ANTs (Advanced Normalization Tools) 是专为医学图像设计的 C++ library,是目前 State of Art 的医学影像配准和分割工具,在神经影像学领域具有广泛应用。


GitHub地址:

https://github.com/ANTsX/ANTs


ANTs 可以对多模态的图像进行配准、分割等操作。在医学影像中,ANTs常用于对不同序列的扫描或患者之间的图像进行配准。



从而将数据标准化到一个共同的参考框架,从而更容易追踪时间变化或在人群之间进行数据比较。


ANTsPy 打包了 ANTs 的 C++ library,可以之间用 Python 直接调用,非常方便。


GitHub地址:

https://github.com/ANTsX/ANTsPy


官网说明:


https://antspy.readthedocs.io/en/latest/index.html


这篇文章会介绍怎样安装 ANTsPy,将 MRI 的 T1 图像配准到 CT 图像上,实现多模态医学影像配准。


最终效果:

dataset来源:https://rire.insight-journal.org/




一、安装 ANTsPy


首先你需要在电脑上安装 Anaconda,生成一个新的环境,方便不同 Python 包的版本管理:

conda create -n antspy python=3.10pip install antspyxpython -m ipykernel install --user --name=ANTsPy


激活该环境:

conda activate allensdk


安装 ANTsPy:

pip install antspyx


安装一些可能需要用到的包:

pip install ipykernelpip install jupyterpython -m ipykernel install --user --name=ANTsPy



二、实例代码

import antsimport numpy as npfrom scipy.ndimage import zoom
# read images as ants classimg_CT = ants.image_read('CT_demo.tif')img_T1 = ants.image_read('T1_demo.tif')

# convert ants class to numpy for further manipulation img_CT = img_CT.numpy()img_CT = zoom(img_CT, (0.5, 0.5, 1))
# convert numpy array to ants class for registrationimg_CT = ants.from_numpy(img_CT)
# do ANTs registrationmytx = ants.registration(fixed=img_CT , moving=img_T1, type_of_transform='SyNRA' )
# get warped image and save itimg_T1_warped = mytx['warpedmovout']ants.image_write(img_T1_warped, 'T1_warped.tif')



三、关键代码分析


(1)读取图像

# read images as ants classimg_CT = ants.image_read('CT_demo.tif')img_T1 = ants.image_read('T1_demo.tif')

利用 ants.image_read 读入的图像属于 ANTsImage 类,如果直接 print 可以看到相关的图像信息:




(2)ants class 和 numpy array 之间相互转换

# convert ants class to numpy for further manipulation img_CT = img_CT.numpy()img_CT = zoom(img_CT, (0.50.51))
# convert numpy array to ants class for registrationimg_CT = ants.from_numpy(img_CT)

读入的图像属于 ANTsImage 类,如果需要更灵活的操作,可以将这个类转为 Numpy array,进行各种 Array 操作和变换。


这里是将图像的X和Y方向缩小到原来的一半,然后再把 Numpy array 转为 ANTsImage 类。

ANTs Registration的输入需要是ANTsImage类。



(3)Ants registration

# do ANTs registrationmytx = ants.registration(fixed=img_CT , moving=img_T1, type_of_transform='SyNRA' )

这里需要注意 type_of_transform 需要根据自身图像来做选择。

ANTs 中可以选择各种各样的变换类型,其中一部分:



因为 Demo 的两个模态的数据存在位移,所以这里选择 'SyNRA' 的变换类型,即:Rigid+Affine+Nonlinear.


(4)变换后图像保存

# get warped image and save itimg_T1_warped = mytx['warpedmovout']ants.image_write(img_T1_warped, 'T1_warped.tif')


mytx 这个变量包含了:

  • 'warpedmovout',变换后moving图像

  • 'warpedfixout',反变换的fixed图像

  • 'fwdtransforms',变换矩阵的保存路径

  • 'invtransforms',反变换矩阵的保存路径


这里需要注意变换矩阵通常会默认保存在 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\'



创作不易,点个关注再走吧
如果有任何问题,欢迎在文章下方留言
 

作者 | Treasure琛
排版 | 小乐喵喵   



往期回顾


Python | 实现 3D Slice Viewer

Python | 读取显微镜图像格式

Python | pyStackReg 图像配准

Python | 小鼠标准脑图谱(CCFv3)下载和使用

Python | PyElastix 非刚性配准


科研图像处理
科研图像处理一站式解决方案,原知乎《ImageJ实用教程》
 最新文章