配准工具SimpleElastix的安装与使用


写在前面

Elastix是一种常用的配准软件,而SimpleElastix则综合了Elastix工具和SimpleITK库,它是一个功能强大的Python版配准工具包。然而,我们不能通过pip、conda等命令直接获取这个工具包,而是需要自己动手进行编译与安装。
本文将以Windows系统为例,对SimpleElastix的安装流程进行总结,最后将给出该工具包的一个Demo。

Python生成工具编译器操作系统
3.6.15CMake 3.x.xVisual Studio 2015Win10 / Win11

注:此处中给出的只是笔者所用的环境配置,仅供参考


1. 编译安装

1.1. 准备各种环境

(1)准备较低版本的Python环境

  • 建议用Anaconda专门为其创建一个新环境:
conda create -n py36 python=3.6.15
  • 请不要提前安装SimpleITK
pip uninstall SimpleITK
  • 请记得更新virtualenv
pip install --upgrade virtualenv

(3)安装CMakeGit,各版本均可

(4)准备好Visual Studio,建议使用VS2015:

  • 此处下载VS2015 U3安装包:
  • 进入安装程序,勾选“Win10 SDK”以及“ATL/MFC SDK”并安装:

1.2. 使用CMake构建项目

(1)使用Git工具下载SimpleElastix项目

git clone https://github.com/kaspermarstal/SimpleElastix

注意:直接从Github网站下载Zip包进行编译可能会出错

(2)在第一个框内输入SimpleElastix/SuperBuild所在路径,在第二个框内输入自定义的输出路径

(3)在搜索框内输入“python”,并勾选“Advanced”;在搜索结果中找到PYTHON_EXECUTABLEPYTHON_INCLUDE_DIRPYTHON_LIBRARY,并根据环境安装位置修改常量的值:

(4)点击“Generate”生成项目文件,生成的文件可在第2步的输出路径中可找到:

1.3. 使用VS编译项目

(1)以管理员身份运行Visual Studio的“Native Tools Command Prompt”,并进入到生成文件所在路径

(2)运行下面的命令并等待执行完成,整个过程大约需要2h

msbuild ALL_BUILD.vcxproj /p:Configuration=Release

1.4. 安装SimpleElastix

(1)以管理员身份运行cmd,进入到生成的SimpleITK-build/Wrapping/Python路径下(如果你有多个Python环境,请一定记得切换Python环境)

(2)运行下面的命令并等待执行完成,整个过程大约需要几分钟:

python Packaging\setup.py install

(3)检查安装是否成功(如果它没报错,就说明安装成功了):

import SimpleITK as sitk
filter = sitk.ElastixImageFilter()

1.5. 可能遇到的问题

(1)因访问Github超时而导致的编译错误

因为VS编译此项目需要从Github上下载文件,这个过程可能会出现访问超时现象。如果出现这类报错,可以多编译几次试试

(2)error C2169: “lrintf”: 内部函数,不能定义

当我们使用比VS2015更新的编译器进行编译时,编译器会提示这个错误,这是因为我们下载的ITK包中的“OpenJPEG”太旧了,我们可以自行从Github中下载相应文件并替换上去,然后重新编译

(3)TypeError: expected str, bytes or os.PathLike object, not int

请记得将virtualenv更新,并且不要提前安装SimpleITK


2. 使用案例

import SimpleITK as sitk    # SimpleElastix
from typing import Union


def elastix_register(fixed_img: Union[sitk.Image, str],
                     moving_img: Union[sitk.Image, str],
                     param_map: Union[sitk.VectorOfParameterMap, str] = None):
    if isinstance(fixed_img, str):
        fixed_img = sitk.ReadImage(fixed_img)
    if isinstance(moving_img, str):
        moving_img = sitk.ReadImage(moving_img)
    if isinstance(param_map, str):
        param_map = sitk.ReadParameterFile(param_map)
    elif param_map is None:
        param_map = sitk.GetDefaultParameterMap("affline")  # 默认仿射配准

    resampler = sitk.ElastixImageFilter()
    resampler.SetFixedImage(fixed_img)      # 设置固定图像
    resampler.SetMovingImage(moving_img)    # 设置待配准图像
    resampler.SetParameterMap(param_map)    # 设置配准方法的参数
    resampler.LogToConsoleOn()              # 控制台打印配准日志
    resampler.Execute()
    reg_img: sitk.Image = resampler.GetResultImage()    # 配准结果
    return reg_img

写在最后

  • 如果您发现项目存在问题,或者如果您有更好的建议,欢迎在下方评论区中留言讨论~
  • 这是我的个人主页:个人主页 - AI Studio,来AI Studio互粉吧,等你哦~
  • 【友链滴滴】欢迎大家随时访问我的个人博客~
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值