7 #include <itkGDCMImageIO.h>
8 #include <itkGDCMSeriesFileNames.h>
9 #include <itkImageSeriesReader.h>
10 #include <itkImageFileWriter.h>
12 // -------------------------------------------------------------------------
14 const unsigned int Dim = 3;
15 typedef itk::Image< TPixel, Dim > TImage;
17 // -------------------------------------------------------------------------
18 int main( int argc, char* argv[] )
23 << "Usage: " << std::endl
24 << argv[ 0 ] << " dicom_dir output_extension"
29 std::string dicom_dir = argv[ 1 ];
30 std::string output_extension = argv[ 2 ];
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 );
39 typedef std::vector< std::string > TSeriesIdContainer;
40 const TSeriesIdContainer& seriesUID = name_gen->GetSeriesUIDs( );
42 TSeriesIdContainer::const_iterator serieIt = seriesUID.begin( );
43 for( ; serieIt != seriesUID.end( ); ++serieIt )
45 // Get series identifier
46 std::string serieId = serieIt->c_str( );
49 << serieId << std::endl;
51 // Get filenames for actual serie
52 typedef std::vector< std::string > TFileNamesContainer;
53 TFileNamesContainer filenames;
54 filenames = name_gen->GetFileNames( serieId );
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 );
64 std::string serie_filename;
65 serie_filename = dicom_dir + "/" + serieId + "." + output_extension;
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;
77 catch( itk::ExceptionObject& err )
79 std::cerr << " Error caught: " << err << std::endl;
85 catch( itk::ExceptionObject& err )
87 std::cerr << "Error caught: " << std::endl << err << std::endl;