Dicom Series Reader

Overview

This example illustrates how to read a DICOM series into a 3D volume using the simplest possible scenario. Additional actions include printing some information, writing the image and possibly displaying it using the default display program via the SimpleITK Show function. The program makes several assumptions: the given directory contains at least one DICOM series, if there is more than one series the first series is read (implicit selection of series), and the default SimpleITK external viewer is installed.

Warning

The ImageSeriesReader expects the list of files to be sorted along the acquisition scan direction. To ensure this you must use the GetGDCMSeriesFileNames function to obtain the scan-direction sorted list of file names. Most often, sorting based on file names does not provide the same result as sorting along the scan direction.

A more complex scenario for reading a DICOM series into a 3D volume is illustrated in Dicom Series Read Modify Write. The code in that example, identifies all series found in the directory, explicitly selects the first series and configures the reader to load all DICOM tags, public and private.

See also Dicom Series Read Modify Write, Read Image Meta-Data Dictionary and Print.

Code

using System;
using System.Diagnostics;
using itk.simple;
using sitk = itk.simple.SimpleITK;


namespace itk.simple.examples {
    class DicomSeriesReader {

static void Main(string[] args) {
  try {
    if (args.Length < 2) {
      Console.WriteLine( "Usage: DicomSeriesReader <input_directory> <output_file>" );
      return;
    }

    Console.WriteLine( "Reading Dicom directory: " + args[0] );
    ImageSeriesReader reader = new ImageSeriesReader();

    VectorString dicom_names = ImageSeriesReader.GetGDCMSeriesFileNames( args[0] );
    reader.SetFileNames( dicom_names );

    Image image = reader.Execute();

    VectorUInt32 size = image.GetSize();
    Console.WriteLine( "Image size: " + size[0] + " " + size[1] + " " + size[2] );

    Console.WriteLine( "Writing image: " + args[1] );
    ImageFileWriter writer = new ImageFileWriter();
    writer.SetFileName( args[1] );
    writer.Execute( image );

    if (Environment.GetEnvironmentVariable("SITK_NOSHOW") == null)
      SimpleITK.Show( image, "Dicom Series" );


  } catch (Exception ex) {
    Console.WriteLine( "Usage: DicomSeriesReader <input_directory> <output_file>" );
    Console.WriteLine( ex );
  }
}

    }
}