SimpleITK读取医学影像文件

本文详细介绍了ITK和SimpleITK在图像分析和处理中的应用,包括X射线和CT图像的读取、矩阵信息获取及CT影像的拆分方法,提供了丰富的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:https://blog.youkuaiyun.com/songchunxiao1991/article/details/79074604

SimpleITK
ITK是一个开源、跨平台的框架,提供给开发者增强功能的图像分析和处理套件(推荐使用)。

Note:注意SimpleITK不支持中文,即路径中不能有中文

X射线图像对应的读取

import SimpleITK as sitk
filename = '*.dcm'
itk_img = sitk.ReadImage(filename)
img_array = sitk.GetArrayFromImage(itk_img)
print(img_array.shape)

输出:(对应信息:frame_num, width, height)注意:img_array对应的是图像的矩阵信息

(1, 3328, 2560)

推荐用法:

import SimpleITK as sitk
filename = '*.dcm'
itk_img = sitk.ReadImage(filename)
img_array = sitk.GetArrayFromImage(itk_img)[0]
print(img_array.shape)
输出:

(3328, 2560)

CT图像的读取

import SimpleITK as sitk
filename = '*.mhd'
itk_img = sitk.ReadImage(filename)
img_array = sitk.GetArrayFromImage(itk_img)
print(img_array.shape)
输出:(对应信息:frame_num, width, height)帧参数:frame_num,代表CT扫描层数注意:img_array对应的是图像的矩阵信息

(133, 512, 512)

将CT影像拆分成多个单幅图像

方法一:

import SimpleITK as sitk
import cv2
filename = '*.mhd'
itk_img = sitk.ReadImage(filename)
img_array = sitk.GetArrayFromImage(itk_img)
frame_num, width, height = img_array.shape
outpath = 'F:/data/LUNA16'#存放拆分得到的图像路径
index = -1
for img_item in img_array:
    index = index + 1
    cv2.imwrite("%s/%d.png" % (outpath, index), img_item)
print("done!")

方法二:

import SimpleITK as sitk
import os
import cv2
filename = '*.mhd'
path = 'F:/data/LUNA16'   #存放拆分得到图像的路径
itk_img = sitk.ReadImage(filename)
img_array = sitk.GetArrayFromImage(itk_img)
for i, im in enumerate(img_array):
  cv2.imwrite(os.path.join(path, '{}.png'.format(i)), im)

如下图所示是CT影像拆分出来的部分图像。拆分得到的图像大小均为512*512,总数是:frame_num张。

SimpleITK是一个用于医学图像处理的开源框架,它提供了多种编程语言的接口,包括Python和C++等。NIfTI(Neuroimaging Informatics Technology Initiative)文件格式常用于存储脑成像数据,而DICOM(Digital Imaging and Communications in Medicine)是医学影像领域中使用最广泛的标准格式。 要使用SimpleITK将NIfTI格式的文件转换为DICOM格式,首先需要安装SimpleITK库,然后使用它的相关功能读取NIfTI文件,接着将读取的数据转换为DICOM格式并写入文件。以下是一个使用Python进行转换的简单示例: ```python import SimpleITK as sitk # 读取NIfTI文件 nii_image = sitk.ReadImage('example.nii') # 将NIfTI转换为DICOM # 这里需要提供转换后的DICOM存储路径 # 以及必要的DICOM信息,例如患者ID、研究描述等 # 假设有一个函数write_to_dcm,它会根据提供的参数将NIfTI图像转换为DICOM def write_to_dcm(nii_image, output_directory, patient_id, study_description): # 这里应该包含将NIfTI转换为DICOM的逻辑 # SimpleITK本身不直接支持转换为DICOM格式, # 因此你可能需要结合第三方工具如dcm2niix等来辅助完成转换 # 调用第三方工具转换命令 # 例如使用subprocess模块运行dcm2niix命令 # import subprocess # subprocess.run(['dcm2niix', '-f', study_description, '-o', output_directory, '-i', patient_id, 'example.nii']) # 假设已经获取了必要的DICOM信息 dicom_info = { 'output_directory': '/path/to/output/directory', 'patient_id': '123456', 'study_description': 'Brain MRI' } # 调用函数进行转换 write_to_dcm(nii_image, **dicom_info) ``` 在上述代码中,我们假设存在一个`write_to_dcm`函数,该函数能够处理NIfTI到DICOM的转换。由于SimpleITK不直接提供NIfTI到DICOM的转换功能,你可能需要使用第三方工具如dcm2niix来进行转换。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值