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

本文主要是介绍(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资源

  • 文档 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),可用于进一步分析或可视化

这篇关于(7)医学图像配准综述:SimpleITK + SimpleElastix + Elastix + ITKElastix + PyElastix的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/681095

相关文章

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将