(7)医学图像配准综述:SimpleITK + SimpleElastix + Elastix + ITKElastix + PyElastix

文章目录

  • 前言
  • 一、常见的图像配准工具
    • 1.0、ITK + VTK —— 科学界最大与最早的开源免费项目之一
    • 1.1、ITK系列:ITK + SimpleITK + SimpleElastix
    • 1.2、Elastix系列:Elastix + ITKElastix + PyElastix
  • 二、图像配准
    • 2.1、SimpleITK图像配准
    • 2.2、SimpleElastix图像配准
      • 2.2.1、一行代码(配准)
      • 2.2.2、Rigid + affine + bspline(配准)
    • 2.3、Elastix图像配准
    • 2.4、ITKElastix图像配准
      • 2.4.1、一行代码(配准)
      • 2.4.2、rigid + affine + bspline(配准)
    • 2.5、PyElastix图像配准

前言

工具配准的再开发可视化开发的主要需求:
(1)转换编程语言
(2)简化配准流程

简单的本质:调用默认的配准参数(即:对大多数图像都达到较好效果的参数)

  • (1)配准正常:只适用于图像的复杂度不高,对比度明显、前背景的灰度强度明显等等;
  • (2)配准异常:需要针对每个变换模型的参数文件进行调参(较复杂)—— 每个文件的参数最少有50+,且参数之间以及参数文件之间具有一定联系

总结:初学可以,科研不行。

一、常见的图像配准工具

图像配准(Image Registration) 用于将多幅图像或图像的不同部分进行对齐,以便在后续分析中进行比较、融合或提取信息。配准的目标是找到一个变换,将不同图像中的相应特征或区域对准,使它们在同一坐标系中重叠。广泛应用于在医学影像、遥感图像、计算机视觉等领域。
在这里插入图片描述

1.0、ITK + VTK —— 科学界最大与最早的开源免费项目之一

用途支持语言支持机构应用领域
分析工具:ITK(Insight Segmentation and Registration Toolkit)用于多维图像处理、分割和配准C++、Python由美国国家卫生研究院(NIH)、美国国家计算科学研究所(NCSA)科学研究和医学领域(如:CT、MRI)
可视化工具:VTK(Visualization Toolkit)用于3D图像处理、图像建模、体积渲染、可视化和2D绘图。主C++、部分Python封装最早由美国洛斯阿拉莫斯国家实验室(LANL)发起,现在由Kitware公司维护。医学、生物学、地球科学和工程学等

VTK基于OpenGL的渲染引擎提供图形渲染功能。
OpenGL(Open Graphics Library):一种跨平台的、基于底层的图形API、用于实时渲染2D和3D图形。

  • "底层":指的是对硬件或操作系统的直接访问和控制。在计算机图形学中,"底层"通常指的是直接与图形硬件或图形API进行交互的部分。

❤️ VTK资源

  • 文档 Documentation:适合新老 VTK 用户的综合资源,其中包括教程、示例和最佳实践,可帮助您充分发挥 VTK 高级算法和渲染技术的全部功能。
  • 教科书 Book:PDF可下载
  • Python示例(代码 + 图解):在 Python 中使用 VTK
    (同理示例:C#、C++、Java)

1.1、ITK系列:ITK + SimpleITK + SimpleElastix

工具特点平台语言特点文档Github教程
ITKITK是科学界最大、最早的开源项目之一开源、免费、跨平台C++开发、支持Python接口、Java绑定访问、TCL简易接口用于 N 维科学图像处理、分割和配准。ITK-DocumentationITK源码ITK-快速入门
SimpleITK基于ITK的封装工具开源、免费、跨平台C++、Python、Java、R、Ruby、C#、Lua和TCLITK的简化编程接口SimpleITK-DocumentationSimpleITK源码Jupyter示例
SimpleElastix基于SimpleITK的扩展工具(现已成为SimpleITK的一部分)开源、免费、跨平台C++、Python、Java、R、Ruby、C#、Lua 和 TCL只需几行代码即可完成配准任务SimpleElastix-DocumentationSimpleElastix源码

1.2、Elastix系列:Elastix + ITKElastix + PyElastix

工具特点平台语言特点文档Github
Elastix基于ITK的命令行工具开源、免费CMD命令行用于刚性和非刚性图像配准Elastix-DocumentationElastix源码
ITKElastix基于ITK+Elastix的封装工具开源、免费为Elastix提供ITK Python、JavaScript 和 WebAssembly 接口ITKElastix网页版应用ITKElastix源码
PyElastixPython封装的Elastix工具开源、免费PyElastix源码

二、图像配准

2.1、SimpleITK图像配准

import SimpleITK as sitk# (1)读取固定图像和移动图像
fixed = sitk.ReadImage(r"F:\other\fixedImage.tif", sitk.sitkFloat32)
moving = sitk.ReadImage(r"F:\other\movingImage.tif", sitk.sitkFloat32)# (2)创建图像配准方法对象
R = sitk.ImageRegistrationMethod()# (3)配置参数(默认参数)
####################################################################################
# 3.1、设置一个初始变换
# R.SetInitialTransform(sitk.TranslationTransform(fixed.GetDimension()))  # 平移变换
# R.SetInitialTransform(sitk.AffineTransform(fixed.GetDimension()))  # 仿射变换
# R.SetInitialTransform(sitk.BSplineTransform(fixed.GetDimension(), 3))  # 平移变换。BSpline阶数=3# 3.2、创建一个复合变换(平移、仿射和插值)
composite_transform = sitk.CompositeTransform(fixed.GetDimension())
composite_transform.AddTransform(sitk.TranslationTransform(fixed.GetDimension()))
composite_transform.AddTransform(sitk.AffineTransform(fixed.GetDimension()))
composite_transform.AddTransform(sitk.BSplineTransform(fixed.GetDimension(), 3))
R.SetInitialTransform(composite_transform)
##################################################################################### (4)开始配准
outTx_result = R.Execute(fixed, moving)# (5)保存结果
sitk.WriteTransform(outTx_result, r'F:\other\displaceMeth1.hdf5')
sitk.WriteImage(sitk.Resample(moving, fixed, outTx_result), r'F:\other\displaceMeth1.tif')

2.2、SimpleElastix图像配准

SimpleElastix是基于SimpleITK的扩展工具(现已成为SimpleITK的一部分
官网源码:SimpleElastix Documentation

2.2.1、一行代码(配准)

import SimpleITK as sitkresultImage = sitk.Elastix(sitk.ReadImage("fixedImage.nii"), sitk.ReadImage("movingImage.nii"))

2.2.2、Rigid + affine + bspline(配准)

import SimpleITK as sitk# (1)SimpleITK实例化
elastixImageFilter = sitk.ElastixImageFilter()# (2)加载图像
elastixImageFilter.SetFixedImage(sitk.ReadImage("fixedImage.nii"))
elastixImageFilter.SetMovingImage(sitk.ReadImage("movingImage.nii"))# (3)配置参数(默认参数)
elastixImageFilter.SetParameterMap(sitk.GetDefaultParameterMap("rigid"))
# elastixImageFilter.SetParameterMap(sitk.GetDefaultParameterMap("affine"))
# elastixImageFilter.SetParameterMap(sitk.GetDefaultParameterMap("bspline"))# (4)开始配准
elastixImageFilter.Execute()# (5)保存结果
sitk.WriteImage(elastixImageFilter.GetResultImage())

2.3、Elastix图像配准

(1)Elastix图像配准:原理 + 源码(详解)
(2)Elastix图像配准:参数文件(配准精度的关键)
(3)Elastix图像配准:2D图像
(4)Elastix图像配准:3D图像
(5)Elastix图像配准:点集配准(局部区域的精度微调)
(6)Elastix图像配准:可视化配准工具

2.4、ITKElastix图像配准

2.4.1、一行代码(配准)

import itkregistered_image, params = itk.elastix_registration_method(itk.imread('fixed_image.mha'), itk.imread('moving_image.mha'))

2.4.2、rigid + affine + bspline(配准)

ITKElastix:Elastix源码

################################
# run ITKElastix on MacOs
################################
from itk import itkElastixRegistrationMethodPython
import itk
from itkwidgets import compare, checkerboard# (1)加载图像
fixed_image = itk.imread('data/CT_2D_head_fixed.mha', itk.F)
moving_image = itk.imread('data/CT_2D_head_moving.mha', itk.F)# (2)配置参数(默认参数)
parameter_object = itk.ParameterObject.New()
default_parameter_map = parameter_object.GetDefaultParameterMap('rigid')
# default_parameter_map = parameter_object.GetDefaultParameterMap('affine')
# default_parameter_map = parameter_object.GetDefaultParameterMap('bspline')
parameter_object.AddParameterMap(default_parameter_map)#####################################################################
# (3)开始配准
# 方法一、调用配准函数
result_image, result_transform_parameters = itk.elastix_registration_method(fixed_image, moving_image, parameter_object=parameter_object, log_to_console=False)# 方法二、加载 Elastix 图像过滤器对象
elastix_object = itk.ElastixRegistrationMethod.New()  # 创建 Elastix 配准方法对象
elastix_object.SetFixedImage(fixed_image)  # 设置固定图像
elastix_object.SetMovingImage(moving_image)  # 设置移动图像
elastix_object.SetParameterObject(parameter_object)  # 设置参数对象(包含配准算法的参数)
elastix_object.SetLogToConsole(False)  # 设置是否在控制台输出日志信息(可选)elastix_object.UpdateLargestPossibleRegion()  # 更新过滤器对象
result_image = elastix_object.GetOutput()  # 获取配准后的图像结果
result_transform_parameters = elastix_object.GetTransformParameterObject()  # 获取配准后的变换参数
###################################################################### (4)可视化结果
checkerboard(fixed_image, result_image, pattern=5)  # 以棋盘形式比较固定图像和配准结果
compare(fixed_image, result_image, link_cmap=True)  # 以对比方式显示固定图像和配准结果

2.5、PyElastix图像配准

import pyelastix# 假设 im1 和 im2 是你的输入图像# 获取默认参数
params = pyelastix.get_default_params()# 设置配准的参数
params.MaximumNumberOfIterations = 200
params.FinalGridSpacingInVoxels = 10# 进行图像配准
im1_deformed, field = pyelastix.register(im1, im2, params)# im1_deformed 是配准后的图像
# field 是配准变换的场(transform field),可用于进一步分析或可视化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2774175.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】Linux开发工具(yum、gdb、git)详解

一、软件包管理器 yum 1、什么是软件包 在 Linux 下安装软件,通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成…

IS-IS 接口认证密码平滑更换

拓扑图 配置 AR1、AR2建立ISIS level-2邻居关系,并配置接口认证密码为huawei sysname AR1 # isis 1is-level level-2network-entity 49.0000.0000.0000.0001.00 # interface GigabitEthernet0/0/0ip address 12.1.1.1 255.255.255.0 isis enable 1isis authentica…

开源项目的三年,我的项目经历了哪些变化?

0.前言 自己一个项目写了三年,到底写了什么东西了,这个项目经历了哪些变化呢?其中的心路历程如何? 兄弟们,要是感觉我的项目有价值,去b站给俺点点关注呐。我更新的更快。点击下面的了解就可以跳转去b站。…

Tkinter教程21:Listbox列表框+OptionMenu选项菜单+Combobox下拉列表框控件的使用+绑定事件

------------★Tkinter系列教程★------------ Tkinter教程21:Listbox列表框OptionMenu选项菜单Combobox下拉列表框控件的使用绑定事件 Tkinter教程20:treeview树视图组件,表格数据的插入与表头排序 Python教程57:tkinter中如何…

【MySQL进阶之路】BufferPool底层设计(中)

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

编程实例分享,手表养护维修软件钟表维修开单管理系统教程

编程实例分享,手表养护维修软件钟表维修开单管理系统教程 一、前言 以下教程以 佳易王钟表维护维修管理系统软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 左侧为导航栏, 1、系统设置:可以设置打…

服务器安装Docker (ubuntu)

前几天因为工作需求,要在服务器上安装Docker,现在把这个过程记录下来 步骤 1:更新软件包索引 打开终端并执行以下命令来更新包索引: sudo apt-get update步骤 2:安装必要的包 安装一些允许apt通过HTTPS使用仓库的包…

Ubuntu 22 部署Zabbix 6.4

一、安装及配置postgresql sudo apt-get update sudo apt-get install postgresql postgresql-client 修改配置文件,配置远程访问:(PostgreSQL安装路径下的data,也是安装时data的默认路径)data目录下的 pg_hba.conf …

PKI - 03 密钥管理(如何进行安全的公钥交换)

文章目录 Pre密钥管理面临的挑战安全密钥管理的几种方式手动密钥交换与确认受信任的介绍 Pre PKI - 02 对称与非对称密钥算法 密钥管理面临的挑战 密钥管理面临的挑战主要包括以下几点: 安全的公钥交换:在使用基于非对称密钥算法的服务之前&#xff0c…

基于YOLOv8的水下生物检测,多种优化方法---超轻量高效动态上采样DySample涨点四个点(五)

💡💡💡本文主要内容:详细介绍了水下生物检测整个过程,从数据集到训练模型到结果可视化分析,以及如何优化提升检测性能。 💡💡💡加入超轻量高效动态上采样DySample mAP0.5由原始的0…

阿里云服务器多少钱一年?2024年阿里云服务器租用价格表

2024年阿里云服务器租用价格表更新,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

VTK SetLayer设置图层

在VTK中,你可以通过设置vtkRenderer的层级来控制渲染的顺序。例如,你可以将体绘制的vtkRenderer设置在第0层,将面模型的vtkRenderer设置在第1层。这样,面模型就会覆盖显示在下一层的体绘制模型上,有时我们会有这样的需…

人工智能|推荐系统——基于tensorflow的个性化电影推荐系统实战(有前端)

代码下载: 基于tensorflow的个性化电影推荐系统实战(有前端).zip资源-CSDN文库 项目简介: dl_re_web : Web 项目的文件夹re_sys: Web app model:百度云下载之后,把model放到该文件夹下recommend: 网络模型相…

ChatGPT高效提问—prompt常见用法(续篇五)

ChatGPT高效提问—prompt常见用法(续篇五) 1.1 种子词 ​ 种子词(seed word)通常指的是在对话中使用的初始提示或关键词,用于引导ChatGPT生成相关回复。种子词可以是一个词、短语或句子,通常与对话的主题…

u8 bit0 :1; “:”位字段的声明(也称为位段)

在C语言中,冒号(:)用于声明bit字段,也称为位域(Bit-field)。位域允许我们在结构体中对结构成员进行位级的精确操作,主要用于对寄存器和硬件操作进行描述和访问。冒号后面的数字表示该位域的位宽度。 在通信中&#xff…

SpringBoot和SpringMVC

目录 一、springboot项目 (1)创建springboot项目 (2)目录介绍 (3)项目启动 (4)运行一个程序 (5)通过其他方式创建和运行springboot项目 二、SpringMVC…

【MySQL】-11 MySQL 架构及优化原理

MySQL 架构及优化原理 1 MySQL逻辑架构2 MySQL逻辑架构整体分为三层 :3 MySQL查询过程MySQL 整个查询执行过程,总的来说分为 5 个步骤 :3.1 客户端/服务端通信协议3.2 查询缓存3.3 查询优化3.4 查询执行引擎3.5 返回结果给客户端 4 查询系统性能1 分析查询语句2 索…

【多模态大模型】GLIP:零样本学习 + 目标检测 + 视觉语言大模型

GLIP 核心思想GLIP 对比 BLIP、BLIP-2、CLIP 主要问题: 如何构建一个能够在不同任务和领域中以零样本或少样本方式无缝迁移的预训练模型?统一的短语定位损失语言意识的深度融合预训练数据类型的结合语义丰富数据的扩展零样本和少样本迁移学习 效果 论文:…

AD域国产替代方案,助力某金融企业麒麟信创电脑实现“真替真用”

近期收到不少企业客户反馈采购的信创PC电脑用不起来,影响信创改造的进度。例如,某金融企业积极响应国产化信创替代战略,购置了一批麒麟操作系统电脑。分发使用中发现了如下问题: • 当前麒麟操作系统电脑无法做到统一身份认证&…

Flask 入门7:使用 Flask-Moment 本地化日期和时间

如果Web应用的用户来自世界各地,那么处理日期和时间可不是一个简单的任务。服务器需要统一时间单位,这和用户所在的地理位置无关,所以一般使用协调世界时(UTC)。不过用户看到 UTC 格式的时间会感到困惑,他们…