Python itk笔记--读取NIFTI图像

本文介绍如何使用ITK库的imread()函数读取医学影像文件,包括单个文件和DICOM序列,并解释了函数参数及返回值。

这里使用的是 itk-5.2.1 版本

Python的itk函数库使用 imread() 函数读取文件,可以根据文件名自动选择相关的类。例如:

import itk

nii_path = 'test.nii.gz'
nii_img = itk.imread(filename=nii_path)

imread() 函数存在于itk安装包的 support/extras.py 文件内,函数API为:

def imread(
	filename: fileioType, 
	pixel_type: Optional["itk.PixelTypes"] = None, 
	fallback_only: bool = False, 
	imageio: Optional["itkt.ImageIOBase"] = None
) -> "itk.ImageBase"

从一个文件或序列中读取一个图像,并返回一个itk.Image。

参数:

  • filename: 单个文件的路径、一个图像序列的文件列表或是一个DICOM图像序列的目录
  • pixel_type: 加载时的图像像素类型
  • fallback_only: 如果为 True,则首先自动推断图像像素的类型,并仅在推断失败时使用给定的 pixel_type
  • imageio: itk.ImageIOBase 驱动的实例,用来读取文件

返回值:

  • image: 得到的 itk.Image

如果没有提供 pixel_type,则读取器将根据图像文件的图像类型实例化。图像的维度是从硬盘中存储的维度自动推断的。

如果提供的 filename 是一个文件夹,则该文件夹将被假设为 DICOM 序列的路径。如果确实是一个 DICOM 序列,则读取器会使用一个 itk.ImageSeriesReader 对象来读取 DICOM 文件名。

如果给定的 filename 是文件名的列表或元组,读取器会使用一个 itk.ImageSeriesReader 对象来读取文件。

### 使用ITK-SNAP进行图像配准 对于希望利用Python环境中的ITK-SNAP工具来进行医学影像处理的研究者而言,重要的是理解虽然ITK-SNAP本身主要作为一个交互式的图形界面应用程序被设计用于分割和可视化医疗体积数据[^1],但是其背后的核心算法依赖于Insight Segmentation and Registration Toolkit (ITK),这是一个可以独立使用的库,并且有活跃的社区支持以及丰富的文档资源。 为了在Python中实现基于ITK图像配准功能,推荐直接使用SimpleITK这个简化版API来访问ITK的功能集。下面给出一段简单的代码片段展示如何通过SimpleITK执行刚体变换下的两幅三维CT扫描图片之间的配准操作: ```python import SimpleITK as sitk def register_images(fixed_image_path, moving_image_path): fixed_img = sitk.ReadImage(fixed_image_path) moving_img = sitk.ReadImage(moving_image_path) initial_transform = sitk.CenteredTransformInitializer( fixed_img, moving_img, sitk.Euler3DTransform(), sitk.CenteredTransformInitializerFilter.GEOMETRY ) registration_method = sitk.ImageRegistrationMethod() # 设置相似度测度作为评价标准 registration_method.SetMetricAsMattesMutualInformation(numberOfHistogramBins=50) # 配置优化器参数 learningRate=1.0 iterations=200 registration_method.SetOptimizerAsRegularStepGradientDescent(learningRate=learningRate, numberOfIterations=iterations, estimateLearningRate=registration_method.EachIteration) registration_method.SetInitialTransform(initial_transform, inPlace=True) final_transform = registration_method.Execute(sitk.Cast(fixed_img, sitk.sitkFloat32), sitk.Cast(moving_img, sitk.sitkFloat32)) print('Final metric value: {0}'.format(registration_method.GetMetricValue())) print('Optimizer\'s stopping condition, {0}'.format(registration_method.GetOptimizerStopConditionDescription())) moving_resampled = sitk.Resample(moving_img, fixed_img, final_transform, sitk.sitkLinear, 0.0, moving_img.GetPixelID()) return moving_resampled, final_transform ``` 这段脚本展示了怎样加载固定与移动图像文件路径、初始化转换矩阵、配置注册方法及其参数并最终应用得到的结果到原始输入上完成重采样过程[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值