-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconvert_dicoms_to_nrrd.py
More file actions
86 lines (62 loc) · 2.47 KB
/
convert_dicoms_to_nrrd.py
File metadata and controls
86 lines (62 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import SimpleITK as sitk
import os
'''
A python script for convert dicom files to nrrd file with sepreating contrast.
If your dicom files include 5 different contrast images, using this script,
you will get 5 nrrd files with different contrast!
:Python version: v3.9.0
:Dependency: pip install SimpleITK
:Author: Linkun Gao
'''
def dcm_series_to_nrrd(dcm_folder_path, output_dir):
# Assign DCM paths with different contrasts to separate lists.
all_files_path = _divide_dcms_to_different_contrasts(dcm_folder_path)
# Convert each contrast dcms to a nrrd file.
_convert_dicoms_contrast_to_nrrd(all_files_path, output_dir)
def _divide_dcms_to_different_contrasts(dcm_folder_path):
"""
:param dcm_folder_path: dicoms folder path, may include multiple contrast dicom files
:return: each contrast dicom file is divided into different lists
"""
all_files_path = []
max_instance_num = 0
dcms_name = sitk.ImageSeriesReader.GetGDCMSeriesFileNames(dcm_folder_path)
for dcm in dcms_name:
dicom = sitk.ReadImage(dcm)
instance_num = int(dicom.GetMetaData('0020|0012'))
if max_instance_num < instance_num:
max_instance_num = instance_num
for i in range(max_instance_num):
all_files_path.append([])
for dcm in dcms_name:
dicom = sitk.ReadImage(dcm)
instance_num = int(dicom.GetMetaData('0020|0012')) - 1
all_files_path[instance_num].append(dcm)
return all_files_path
def _convert_dicoms_contrast_to_nrrd(all_files_path, output_dir):
"""
:param all_files_path: all contrast dicom files are divided into different lists
:param output_dir: save nrrd files path
:return:
"""
os.makedirs(output_dir, exist_ok=True)
contrast_idx = 0
dcm_reader = sitk.ImageSeriesReader()
for dcm_files_path in all_files_path:
name = "new_" + str(contrast_idx)
output_path = os.path.join(output_dir, f'{name}.nrrd')
contrast_idx += 1
_convert(dcm_reader, dcm_files_path, output_path)
def _convert(dcm_reader, dcm_files_path, output_path):
"""
:param dcm_reader: SimpleITK Image Reader
:param dcm_files_path: one contrast dicom files
:param output_path: nrrd file path
:return:
"""
dcm_reader.SetFileNames(dcm_files_path)
dcm_series = dcm_reader.Execute()
sitk.WriteImage(dcm_series, output_path)
dcm_folder_path = "/Your/dicom/files/path"
output_dir = "./test"
dcm_series_to_nrrd(dcm_folder_path, output_dir)