]> Creatis software - cpPlugins.git/blob - appli/examples/example_ExtractDICOMSeries.cxx
...
[cpPlugins.git] / appli / examples / example_ExtractDICOMSeries.cxx
1 #include <cstdlib>
2 #include <iostream>
3 #include <string>
4 #include <vector>
5
6 #include <itkImage.h>
7 #include <itkGDCMImageIO.h>
8 #include <itkGDCMSeriesFileNames.h>
9 #include <itkImageSeriesReader.h>
10 #include <itkImageFileWriter.h>
11
12 // -------------------------------------------------------------------------
13 typedef short      TPixel;
14 const unsigned int Dim = 3;
15 typedef itk::Image< TPixel, Dim > TImage;
16
17 // -------------------------------------------------------------------------
18 int main( int argc, char* argv[] )
19 {
20   if( argc < 3 )
21   {
22     std::cerr
23       << "Usage: " << std::endl
24       << argv[ 0 ] << " dicom_dir output_extension"
25       << std::endl;
26     return( 1 );
27
28   } // fi
29   std::string dicom_dir = argv[ 1 ];
30   std::string output_extension = argv[ 2 ];
31
32   typedef itk::GDCMSeriesFileNames TNameGenerator;
33   TNameGenerator::Pointer name_gen = TNameGenerator::New( );
34   name_gen->SetUseSeriesDetails( true );
35   name_gen->AddSeriesRestriction( "0008|0021" );
36   name_gen->SetDirectory( dicom_dir );
37   try
38   {
39     typedef std::vector< std::string > TSeriesIdContainer;
40     const TSeriesIdContainer& seriesUID = name_gen->GetSeriesUIDs( );
41
42     TSeriesIdContainer::const_iterator serieIt = seriesUID.begin( );
43     for( ; serieIt != seriesUID.end( ); ++serieIt )
44     {
45       // Get series identifier
46       std::string serieId = serieIt->c_str( );
47       std::cout
48         << "\nReading: "
49         << serieId << std::endl;
50
51       // Get filenames for actual serie
52       typedef std::vector< std::string > TFileNamesContainer;
53       TFileNamesContainer filenames;
54       filenames = name_gen->GetFileNames( serieId );
55
56       // Read image
57       itk::ImageSeriesReader< TImage >::Pointer reader =
58         itk::ImageSeriesReader< TImage >::New( );
59       itk::GDCMImageIO::Pointer dicomIO = itk::GDCMImageIO::New( );
60       reader->SetImageIO( dicomIO );
61       reader->SetFileNames( filenames );
62
63       // Write image
64       std::string serie_filename;
65       serie_filename = dicom_dir + "/" + serieId + "." + output_extension;
66
67       itk::ImageFileWriter< TImage >::Pointer writer =
68         itk::ImageFileWriter< TImage >::New( );
69       writer->SetFileName( serie_filename );
70       writer->UseCompressionOff( );
71       writer->SetInput( reader->GetOutput( ) );
72       std::cout << "Writing: " << serie_filename << std::endl;
73       try
74       {
75         writer->Update( );
76       }
77       catch( itk::ExceptionObject& err )
78       {
79         std::cerr << " Error caught: " << err << std::endl;
80
81       } // yrt
82
83     } // rof
84   }
85   catch( itk::ExceptionObject& err )
86   {
87     std::cerr << "Error caught: " << std::endl << err << std::endl;
88     return( 1 );
89
90   } // yrt
91   return( 0 );
92 }
93
94 // eof - $RCSfile$