医学图像配准软件 ANTs(Advanced Normalization Tools)的安装和使用说明

本文是关于医学图像配准软件 ANTs(Advanced Normalization Tools)的安装和使用说明。

ANTs

ANTs 是 Advanced Normalization Tools 的缩写,是基于 C 语言的一个医学图像处理的软件,速度比较快。

ANTs 支持 2D 和 3D 的图片,包括以下格式的文件:
• Nifti (.nii, .nii.gz)
• Analyze (.hdr + .img / .img.gz)
• MetaImage (.mha)
• Other formats through itk::ImageFileWriter / itk::ImageFileWriter such as jpg, tiff, etc. See ITK documentation.

ANTs 的安装

ANTs 的安装主要有两种形式,一种是基于源码的安装,安装完毕后可以直接在命令行调用相应的功能,另一个种是基于 python 的安装,安装完毕后可以在 python 中直接调用相应的包进行使用。两种方式暂时只支持 Linux 和 Mac 系统。

(1) 基于源码安装 ANTs
  • 首先要安装 git , cmak 和 c++ 编译器;

  • 在命令行里运行:

    git clone git://github.com/ANTsX/ANTs.git  #从github上克隆相应的仓库,保存在当前目录下的ANTs文件夹下
    mkdir antsbin  #创建antsbin文件夹
    cd antsbin  #进入antsbin文件夹
    ccmake ../ANTs  #进入cmake界面,然后依次按下'C'键,稍作等待,再按下'C'键和'G'键,分别完成设置和生成后回到命令行
    make -j 4  #进行编译,需要运行较长时间
    

    如果遇到 cmake 或 ccmake 版本不匹配的问题需要将其卸载重装,并更新环境变量。

  • 编译完之后如果在 antsbin 目录下出现 bin 目录,则可以进行下一步了,若没有 bin 目录,需要自己建立 bin 目录,并把三个地方的文件拷贝进去,具体做法如下:

# 在 antsbin 目录下
mkdir bin #在antsbin下建立bin目录
cp ./ANTS-build/Examples/* ./bin # 将ANTS-build/Examples下的文件复制到bin目录中
cp ./staging/bin/* ./bin #将staging/bin下的文件复制到bin目录中
cp ../ANTs/Scripts/* ./bin #将ANTs/Scripts下的文件复制到bin目录中
  • 设置环境变量,更改.bashrc或.profile文件
cd ~  #回到home文件夹下
vi ~/.bashrc  #打开vi进行编辑,按'i'进入插入模式,并在文档末尾插入以下内容
export ANTSPATH=/home/username/antsbin/bin/
export PATH=“$ANTSPATH:$PATH” 
#以上路径要和真实路径一致,然后依次按'ESC'键,'Shift'+':'键,'w'键和'q'键,然后回车保存并退出
source ~/.bashrc  #激活相应的环境配置

ANTs 的使用

在 ANTs/Scripts 路径下有各种各样的 .sh 文件,较为常用的有antsRegistrationSyN.sh 等,为了方便调用可以将 .sh 文件的路径添加到环境变量中去:

vi ~/.bashrc  #打开.bashrc文件并在末尾添加以下内容
export PATH=$PATH:/home/username/ANTs/Scripts
#保存并退出
source ~/.bashrc  #使环境变量生效

然后直接在命令行使用 antsRegistrationSyN.sh ,如果给出该命令的使用方法,则配置成功,如果给出报错信息则配置失败。

因为我手中没有 .nii 格式的配准数据,就用 .jpg 格式的图像做的实验,使用的 fixed image(上图)和 moving image(下图)如下:

fixed_img

moving_img

配准命令为:

antsRegistrationSyN.sh -d 2 -f fixed_img.jpg -m moving_img.jpg -o output

其中 -d 2 表示数据是 2 维图像,-f fixed_img.jpg 是 fixed image 对应的图像名称,-m moving_img.jpg 是 moving image 对饮的图像名称,-o output 是输出结果的前缀名。输出的数据如下:

ants_output

output0GenericAffine.mat , output1Warp.nii.gz 分别表示线性变换和非线性变换估计出的映射关系,outputWarped.nii.gz 表示将 moving_img.jpg 配准到 fixed_img.jpg 后的图像,outputInverseWarped.nii.gz 表示将 fixed_img.jpg 配准到 moving_img.jpg 后的图像。outputWarped.nii 和 outputInverseWarped.nii 的图片如下:

ants_registration

inverse

(2) 基于 python 安装 antspy

安装方法请参考github

antspy现在应该只支持macos和linux系统,windows暂不支持,我ubuntu下是用以下命令安装的:

git clone https://github.com/ANTsX/ANTsPy
cd ANTsPy
python3 setup.py install

antspy的使用方法可以见官方使用手册,如果是做配准相关的,只需要看Core和Registration对应的内容,下面我也对配准中常用的函数做了下整理:

import os
import glob
import ants
import numpy as np
import SimpleITK as sitk

# ants图片的读取
f_img = ants.image_read("./data/f_img.nii.gz")
m_img = ants.image_read("./data/m_img.nii.gz")
f_label = ants.image_read("./data/f_label.nii.gz")
m_label = ants.image_read("./data/m_label.nii.gz")

'''
ants.registration()函数的返回值是一个字典:
    warpedmovout: 配准到fixed图像后的moving图像 
    warpedfixout: 配准到moving图像后的fixed图像 
    fwdtransforms: 从moving到fixed的形变场 
    invtransforms: 从fixed到moving的形变场

type_of_transform参数的取值可以为:
    Rigid:刚体
    Affine:仿射配准,即刚体+缩放
    ElasticSyN:仿射配准+可变形配准,以MI为优化准则,以elastic为正则项
    SyN:仿射配准+可变形配准,以MI为优化准则
    SyNCC:仿射配准+可变形配准,以CC为优化准则
'''
# 图像配准
mytx = ants.registration(fixed=f_img, moving=m_img, type_of_transform='SyN')
# 将形变场作用于moving图像,得到配准后的图像,interpolator也可以选择"nearestNeighbor"等
warped_img = ants.apply_transforms(fixed=f_img, moving=m_img, transformlist=mytx['fwdtransforms'],
                                   interpolator="linear")
# 对moving图像对应的label图进行配准
warped_label = ants.apply_transforms(fixed=f_img, moving=m_label, transformlist=mytx['fwdtransforms'],
                                     interpolator="linear")
# 将配准后图像的direction/origin/spacing和原图保持一致
warped_img.set_direction(f_img.direction)
warped_img.set_origin(f_img.origin)
warped_img.set_spacing(f_img.spacing)
warped_label.set_direction(f_img.direction)
warped_label.set_origin(f_img.origin)
warped_label.set_spacing(f_img.spacing)
img_name = "./result/warped_img.nii.gz"
label_name = "./result/warped_label.nii.gz"
# 图像的保存
ants.image_write(warped_img, img_name)
ants.image_write(warped_label, label_name)

# 将antsimage转化为numpy数组
warped_img_arr = warped_img.numpy(single_components=False)
# 从numpy数组得到antsimage
img = ants.from_numpy(warped_img_arr, origin=None, spacing=None, direction=None, has_components=False, is_rgb=False)
# 生成图像的雅克比行列式
jac = ants.create_jacobian_determinant_image(domain_image=f_img, tx=mytx["fwdtransforms"][0], do_log=False, geom=False)
ants.image_write(jac, "./result/jac.nii.gz")
# 生成带网格的moving图像,实测效果不好
m_grid = ants.create_warped_grid(m_img)
m_grid = ants.create_warped_grid(m_grid, grid_directions=(False, False), transform=mytx['fwdtransforms'],
                                 fixed_reference_image=f_img)
ants.image_write(m_grid, "./result/m_grid.nii.gz")

'''
以下为其他不常用的函数:

ANTsTransform.apply_to_image(image, reference=None, interpolation='linear')
ants.read_transform(filename, dimension=2, precision='float')
# transform的格式是".mat"
ants.write_transform(transform, filename)
# field是ANTsImage类型
ants.transform_from_displacement_field(field)
'''

print("End")
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值