#if defined(_MSC_VER) #pragma warning ( disable : 4786 ) #endif #ifdef __BORLANDC__ #define ITK_LEAN_AND_MEAN #endif // include reader/write related headers #include "itkImageFileReader.h" #include "itkImageFileWriter.h" // include input/output images explicit types #include "itkGDCMImageIO.h" // include writing series facilities #include "itkGDCMSeriesFileNames.h" #include "itkImageSeriesWriter.h" // include image related headers #include "itkImage.h" // include itk system tools #include int main( int argc, char ** argv ) { // verify the number of parameters in the command line if( argc < 3 ) { std::cerr << "Usage: " << std::endl; std::cerr << argv[0] << " inputImageFile outputImageFile " << std::endl; return EXIT_FAILURE; } // image charcteristics we are working on typedef short PixelType; const unsigned int Dimension = 3; typedef itk::Image< PixelType, Dimension > ImageType; // the way we read input nrrd files typedef itk::ImageFileReader< ImageType > ReaderType; ReaderType::Pointer reader = ReaderType::New(); const char * inputFilename = argv[1]; reader->SetFileName( inputFilename ); // the way we write down dicom series const unsigned int OutputDimension = 2; typedef itk::Image< PixelType, OutputDimension > Image2DType; typedef itk::ImageSeriesWriter< ImageType, Image2DType > SeriesWriterType; typedef itk::GDCMImageIO OutputImageType; const char * outputDirectory = argv[2]; //itksys::SystemTools::MakeDirectory( outputDirectory ); typedef itk::GDCMSeriesFileNames NamesGeneratorType; NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New(); namesGenerator->SetInputDirectory( outputDirectory ); namesGenerator->SetOutputDirectory( outputDirectory ); SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New(); seriesWriter->SetFileNames( namesGenerator->GetOutputFileNames() ); OutputImageType::Pointer outputImage = OutputImageType::New(); seriesWriter->SetImageIO( outputImage ); // set up the conversion pipeline // input-file -> reader | writer -> output-file-serie seriesWriter->SetInput( reader->GetOutput() ); try { // run the conversion pipeline seriesWriter->Update(); } catch( itk::ExceptionObject & err ) { std::cerr << "ExceptionObject caught !" << std::endl; std::cerr << err << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS; }