You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SimpleITK按Slice Location逆序排序DICOM图像?

在SimpleITK中反转CT DICOM切片顺序(获取数组前实现)

当然可以在获取图像数组前完成切片顺序反转,这里提供两种直接基于SimpleITK的方法,都不需要先转成numpy数组:

方法1:反转文件名列表再加载

ImageSeriesReader.GetGDCMSeriesFileNames()返回的是按Slice Location升序排列的文件名列表,你只需要在设置给reader前反转这个列表,就能让切片按逆序加载:

import SimpleITK as sitk

dir_name = "Directory of the Folder that contains individual DICOM slices"
reader = sitk.ImageSeriesReader()
filenames = reader.GetGDCMSeriesFileNames(dir_name)
# 反转文件名列表
filenames = filenames[::-1]  # 也可以用 filenames.reverse() 原地反转
reader.SetFileNames(filenames)
reader.MetaDataDictionaryArrayUpdateOn()
image_import = reader.Execute()
# 后续转数组就是逆序切片
image_array = sitk.GetArrayFromImage(image_import)

注意:这种方法加载后的图像,空间原点会对应原序列最后一个切片的位置,z轴方向也会与原图像相反。如果后续操作需要严格保持空间坐标一致性(比如配准),可能需要手动调整图像的方向和原点参数。

方法2:用SimpleITK的Flip操作翻转切片维度

加载完成后,使用sitk.Flip()函数直接翻转切片所在的维度(通常是第三维,对应z轴方向),这种方法会自动适配空间元数据,更适合后续配准场景:

import SimpleITK as sitk

dir_name = "Directory of the Folder that contains individual DICOM slices"
reader = sitk.ImageSeriesReader()
filenames = reader.GetGDCMSeriesFileNames(dir_name)
reader.SetFileNames(filenames)
reader.MetaDataDictionaryArrayUpdateOn()
image_import = reader.Execute()

# 翻转第三维(切片维度),参数为各维度是否翻转的布尔列表
# SimpleITK图像维度顺序为(x, y, z),因此z轴对应索引2
flipped_image = sitk.Flip(image_import, [False, False, True])
# 转数组即为逆序切片
image_array = sitk.GetArrayFromImage(flipped_image)

这种方法的优势在于,翻转后的图像空间坐标(原点、方向、间距)会自动调整,确保与图像内容匹配,对依赖空间信息的后续操作(如配准)更友好。

内容的提问来源于stack exchange,提问作者user24819415

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:05:56