【SimpleITK教程】SimpleITK读取Dicom序列

本文介绍了一种方法,用于读取DICOM序列并将其转换为3D NRRD文件。使用SimpleITK库获取DICOM序列的所有切片路径,然后读取这些切片创建3D图像,并最终保存为NRRD格式。
该文章已生成可运行项目,

医学图像数据常用的格式为dcm或者nrrd。

下面的教程展示,如何读取一个包含多张切片的dicom序列,并将其转换为单个3D的nrrd文件


import SimpleITK as sitk

# Dicom序列所在文件夹路径(在我们的实验中,该文件夹下有多个dcm序列,混合在一起)
file_path = "/data/jianjunming/BEOT/BEOT_1st/B/B13-5219998/"

# 获取该文件下的所有序列ID,每个序列对应一个ID, 返回的series_IDs为一个列表
series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(file_path)

# 查看该文件夹下的序列数量
nb_series = len(series_IDs)
print(nb_series)

# 通过ID获取该ID对应的序列所有切片的完整路径, series_IDs[0]代表的是第一个序列的ID
# 如果不添加series_IDs[0]这个参数,则默认获取第一个序列的所有切片路径
series_file_names = sitk.ImageSeriesReader.GetGDCMSeriesFileNames(file_path, series_IDs[0])

# 新建一个ImageSeriesReader对象
series_reader = sitk.ImageSeriesReader()

# 通过之前获取到的序列的切片路径来读取该序列
series_reader.SetFileNames(series_file_names)

# 获取该序列对应的3D图像
image3D = series_reader.Execute()

# 查看该3D图像的尺寸
print(image3D.GetSize())

# 将序列保存为单个的NRRD文件
sitk.WriteImage(image3D, 'img3D.nrrd')
本文章已经生成可运行项目
### 使用 SimpleITK 读取 DICOM 文件 SimpleITK 是一个用于医学图像处理的简化接口库,支持多种文件格式,其中包括 DICOM 格式。通过 SimpleITK 可以轻松加载、查看和转换 DICOM 图像数据。 以下是使用 SimpleITK 读取单个或多个 DICOM 文件的具体方法: #### 单个 DICOM 文件的读取 如果只需要读取单一的 DICOM 文件,则可以利用 `sitk.ReadImage` 方法完成操作[^1]。此函数会返回一个 Image 对象,该对象包含了像素数据以及元数据信息。 ```python import SimpleITK as sitk # 定义路径到目标 DICOM 文件 file_path = 'path_to_dicom_file.dcm' # 使用 ReadImage 函数读取 DICOM 数据 image = sitk.ReadImage(file_path) # 打印图像基本信息 print(f"Size: {image.GetSize()}") # 获取尺寸大小 print(f"Spacing: {image.GetSpacing()}") # 像素间距 print(f"Origin: {image.GetOrigin()}") # 起始坐标 ``` #### 多个 DICOM 文件序列读取 当存在一系列连续编号的 DICOM 文件时(通常构成三维体积),可以通过指定目录来一次性读取整个系列的数据集合[^2]。 ```python import os import SimpleITK as sitk # 设定包含所有切片的文件夹位置 directory_path = '/path/to/dicom_series/' # 列出并排序所有的 .dcm 文件名列表 (按自然顺序排列) filenames = sorted([os.path.join(directory_path, f) for f in os.listdir(directory_path) if f.endswith('.dcm')]) # 将这些文件作为输入传递给 ReadImage 来构建完整的体数据集 series_image = sitk.ReadImage(filenames) # 输出一些属性验证成功与否 print(series_image.GetSize()) # 显示整体维度 print(series_image.GetDepth()) # 如果有 Z 方向则显示厚度 ``` 以上两段脚本分别展示了针对单独文件与批量扫描件的不同场景下应用 SimpleITK 的方式。注意,在实际部署前还需确认安装好依赖项,并调整具体参数适配项目需求。
评论 23
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值