Python中利用SimpleITK读取DICOM文件

有帮助的话请点赞收藏,谢谢

当同一文件夹下有多个DICOM序列时:

import os
import SimpleITK as sitk
reader = sitk.ImageSeriesReader()
seriesIDs = reader.GetGDCMSeriesIDs(dcm_dir)
dcm_series = reader.GetGDCMSeriesFileNames(dcm_dir, seriesIDs[0])
reader.SetFileNames(dcm_series)
img = reader.Execute()

img_array = sitk.GetArrayFromImage(img) # z, y, x
origin = img.GetOrigin() # x, y, z
spacing = img.GetSpacing() # x, y, z

当文件夹下只有一个DICOM序列时,可以简化为:

import SimpleITK as sitk
import numpy as np
reader = sitk.ImageSeriesReader()
dcm_series = reader.GetGDCMSeriesFileNames(dcm_dir)   
reader.SetFileNames(dcm_series)
img = reader.Execute()

img_array = sitk.GetArrayFromImage(img) # z, y, x
origin = img.GetOrigin() # x, y, z
spacing = img.GetSpacing() # x, y, z

有时会出现跳层的问题,编写了个函数来happy safe reading

def safe_sitk_dcm_read(dcm_dir, *args, **kwargs):
    dcm_list = [os.path.join(dcm_dir, i) for i in os.listdir(dcm_dir)]
    indices = np.array([pydicom.dcmread(i).InstanceNumber for i in dcm_list])
    dcm_list = np.array(dcm_list)[indices.argsort()[::-1]]
    return sitk.ReadImage(dcm_list, *args, **kwargs)

Reference:
https://github.com/SimpleITK/SimpleITK/issues/436
http://www.yueye.org/2017/python-simpleitk-read-process-dicom.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 13,398评论 0 23
  • Pathname lookup in Linux. This write-up is based on three...
    朔飞阅读 4,019评论 0 0
  • 可爱的姑娘你为何哭泣 慈祥的奶奶为何还不醒来 圆圆的月亮为何羞红了脸 独行的人儿为何随波逐流
    忆佛2024阅读 2,642评论 0 3
  • JS中原型链,说简单也简单。 首先明确: 函数(Function)才有prototype属性,对象(除Object...
    前小白阅读 9,361评论 0 9
  • 原文: 子曰:“君子欲讷于言而敏于行。”​ ​解读:​ ​孔子说,一个君子,说话是慢的,是迟钝的,​ ​说话的时候...
    孙伟_阅读 1,599评论 0 0