在对医学图像数据进行处理时,通常我们会将原始的dicom序列转换为三维的体数据nii.gz格式,便于后序的处理。处理完后,可能又要转换为一张张dicom切片。其实使用sitk对nii.gz和dcm进行互转非常方便,几行代码就能搞定。
- dcm转nii.gz
file_path = './lung_img' #dicom存放文件夹
series_IDs = sitk.ImageSeriesReader.GetGDCMSeriesIDs(file_path)
series_file_names = sitk.ImageSeriesReader.GetGDCMSeriesFileNames(file_path)
series_reader = sitk.ImageSeriesReader()
series_reader.SetFileNames(series_file_names)
image3D = series_reader.Execute()
sitk.WriteImage(image3D, './lung_img.nii.gz')
- nii.gz转dcm
filedir = './lung_img.nii.gz'
outdir = './lung_img/'
if not os.path.isdir(outdir):
os.mkdir(outdir)
img = sitk.ReadImage(filedir)
img = sitk.GetArrayFromImage(img)
for i in range(img.shape[0]):
select_img = sitk.GetImageFromArray(img[i])
sitk.WriteImage(select_img,outdir+str(img.shape[0]-i)+'.dcm')
由于nii.gz不包含所有的头信息,因此转为dicom文件不会有所有的头信息。