DICOM图像转Nifti格式-SimpleITK

冯福
2023-12-01

其实SimpleITK文档里都有,直接搬过来

1. SimpleITK实现

1.1 代码

import SimpleITK as sitk

dicom_folder = "./MRA_219/"
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames(dicom_folder)
reader.SetFileNames(dicom_names)
image = reader.Execute()

size = image.GetSize()
print("Image size:", size[0], size[1], size[2])

saveNiiPath = "./TOF_3D_multi-slab.nii.gz"
sitk.WriteImage(image,saveNiiPath,useCompression=True)

参考:


小插曲

  • 一开始以为使用SimpleITK转的结果和使用3D Slicer转的不一样
  • 后来发现是因为SimpleITK转的结果位于服务器上,打开反应慢,没有把图像加载完整,导致最大值是600多,而3D Slicer转的结果在本地,打开是完整的,最大值是1124.。。
  • 把服务器上的结果拉到本地,就对了
  • SimpleITK转的结果和3D Slicer界面导出的结果是一致的

2. 读图像的meta信息

参考:Read Image Meta-Data Dictionary and Print

reader = sitk.ImageFileReader()

reader.SetFileName(sys.argv[1])
reader.LoadPrivateTagsOn()

reader.ReadImageInformation()

for k in reader.GetMetaDataKeys():
    v = reader.GetMetaData(k)
    print(f'({k}) = = "{v}"')

print(f"Image Size: {reader.GetSize()}")
print(f"Image PixelType: {sitk.GetPixelIDValueAsString(reader.GetPixelID())}")
 类似资料: