SimpleITK  
Python/DicomSeriesReader2.py
1 #!/usr/bin/env python
2 
3 # =========================================================================
4 #
5 # Copyright NumFOCUS
6 #
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
10 #
11 # http://www.apache.org/licenses/LICENSE-2.0.txt
12 #
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 #
19 # =========================================================================
20 
21 
22 #
23 # This example shows how to read a specific series from a Dicom directory that
24 # may contain more than one series. The script scans for all series. If an
25 # output name is given, it writes out the requested series. If no specific
26 # series name is given, the first series found is written.
27 #
28 
29 
30 import sys
31 import getopt
32 import SimpleITK as sitk
33 
34 target_series = ""
35 output_image = ""
36 
37 
38 def usage():
39  print(
40  "\nUsage: %s [-s series_name] input_directory [output_image]\n" % (sys.argv[0])
41  )
42 
43 
44 # Parse command line options
45 try:
46  opts, args = getopt.getopt(sys.argv[1:], "s:", ["series"])
47 except getopt.GetoptError:
48  usage()
49  sys.exit(1)
50 
51 for o, a in opts:
52  if o in ("-s", "--series"):
53  target_series = a
54  else:
55  assert False, "unhandled options"
56 
57 # Get input/output names
58 if len(args) < 1:
59  print(args)
60  usage()
61  sys.exit(1)
62 
63 input_directory = args[0]
64 if len(args) > 1:
65  output_image = args[1]
66 
67 # Find the Dicom series
68 reader = sitk.ImageSeriesReader()
69 written = False
70 
71 series_found = reader.GetGDCMSeriesIDs(input_directory)
72 
73 # Process each Dicom series
74 if len(series_found):
75 
76  for serie in series_found:
77 
78  print("\nSeries:", serie)
79 
80  # Get the Dicom filename corresponding to the current series
81  dicom_names = reader.GetGDCMSeriesFileNames(input_directory, serie)
82 
83  print("\nFiles in series: ", dicom_names)
84 
85  if len(dicom_names):
86  reader.SetFileNames(dicom_names)
87  image = reader.Execute()
88  print("\nImage size: ", image.GetSize())
89 
90  if (output_image != "") and not written:
91  if target_series == "" or target_series == serie:
92  print("\nWriting", output_image)
93  sitk.WriteImage(image, output_image)
94  written = True
95 else:
96  sys.exit(1)
97 
98 print()
itk::simple::ImageSeriesReader
Read series of image files into a SimpleITK image.
Definition: sitkImageSeriesReader.h:68
itk::simple::WriteImage
SITKIO_EXPORT void WriteImage(const Image &image, const std::vector< PathType > &fileNames, bool useCompression=false, int compressionLevel=-1)
WriteImage is a procedural interface to the ImageSeriesWriter. class which is convenient for many ima...