- //-------------------------------------------------------------------
- // Update with the number of dimensions and the pixeltype
- //-------------------------------------------------------------------
- template<class args_info_type>
- template <unsigned int Dimension, class PixelType>
- void
- WriteDicomSeriesGenericFilter<args_info_type>::UpdateWithDimAndPixelType()
- {
-
- // ImageTypes
- typedef itk::Image<PixelType, Dimension> InputImageType;
- typedef itk::Image<PixelType, 2> OutputImageType;
-
- // Read the input (volumetric)
- typedef itk::ImageFileReader<InputImageType> InputReaderType;
- typename InputReaderType::Pointer volumeReader = InputReaderType::New();
- volumeReader->SetFileName( m_InputFileName);
- volumeReader->Update();
- typename InputImageType::Pointer input= volumeReader->GetOutput();
-
- // Read the dicom directory
- typedef itk::ImageSeriesReader< InputImageType > ReaderType;
- typedef itk::GDCMImageIO ImageIOType;
- typedef itk::GDCMSeriesFileNames NamesGeneratorType;
-
- ImageIOType::Pointer gdcmIO = ImageIOType::New();
- NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();
- namesGenerator->SetInputDirectory( m_ArgsInfo.inputDir_arg );
- typename ReaderType::FileNamesContainer filenames = namesGenerator->GetInputFileNames();
-
- // Output the dicom files
- unsigned int numberOfFilenames = filenames.size();
- if (m_Verbose)
- {
- std::cout << numberOfFilenames <<" were read in the directory "<<m_ArgsInfo.inputDir_arg<<"..."<<std::endl<<std::endl;
- for(unsigned int fni = 0; fni<numberOfFilenames; fni++)
- {
- std::cout << "filename # " << fni << " = ";
- std::cout << filenames[fni] << std::endl;
- }
- }
-
- // Read the series
- typename ReaderType::Pointer reader = ReaderType::New();
- reader->SetImageIO( gdcmIO );
- reader->SetFileNames( filenames );
- try
- {
- reader->Update();
- }
- catch (itk::ExceptionObject &excp)
- {
- std::cerr << "Error: Exception thrown while writing the DICOM series!!" << std::endl;
- std::cerr << excp << std::endl;
- }
-
-
- // Modify the meta dictionary
- typedef itk::MetaDataDictionary DictionaryType;
- const std::vector<DictionaryType*>* dictionary = reader->GetMetaDataDictionaryArray();
-
- // Get keys
- unsigned int numberOfKeysGiven=0;
- if(m_ArgsInfo.midP_flag && m_ArgsInfo.key_given)
- std::cerr<<"Error: both keys and midP option are given"<<std::endl;
- else if (m_ArgsInfo.midP_flag)
- numberOfKeysGiven=1;
- else
- numberOfKeysGiven=m_ArgsInfo.key_given;
-
- for (unsigned int i = 0; i < numberOfKeysGiven; i++)
- {
- std::string entryId(m_ArgsInfo.key_arg[i] );
- std::string value( m_ArgsInfo.tag_arg[i] );
- for(unsigned int fni = 0; fni<numberOfFilenames; fni++)
- itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), entryId, value );
- }
-
- // Output directory and filenames
- itksys::SystemTools::MakeDirectory( m_ArgsInfo.outputDir_arg ); // create if it doesn't exist
- typedef itk::ImageSeriesWriter<InputImageType, OutputImageType > SeriesWriterType;
- typename SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();
-
- seriesWriter->SetInput( volumeReader->GetOutput() );
- seriesWriter->SetImageIO( gdcmIO );
- namesGenerator->SetOutputDirectory( m_ArgsInfo.outputDir_arg );
- seriesWriter->SetFileNames( namesGenerator->GetOutputFileNames() );
- //seriesWriter->SetMetaDataDictionaryArray( dictionary );
- seriesWriter->SetMetaDataDictionaryArray( dictionary );
-
- // Write
- try
- {
- seriesWriter->Update();
- }
- catch( itk::ExceptionObject & excp )
- {
- std::cerr << "Error: Exception thrown while writing the series!!" << std::endl;
- std::cerr << excp << std::endl;
- }
+ // Modify the meta dictionary
+ typedef itk::MetaDataDictionary DictionaryType;
+ const std::vector<DictionaryType*>* dictionary = reader->GetMetaDataDictionaryArray();
+
+ // Get keys
+ unsigned int numberOfKeysGiven=0;
+ if(m_ArgsInfo.midP_flag && m_ArgsInfo.key_given)
+ std::cerr<<"Error: both keys and midP option are given"<<std::endl;
+ else if (m_ArgsInfo.midP_flag)
+ numberOfKeysGiven=1;
+ else
+ numberOfKeysGiven=m_ArgsInfo.key_given;
+
+ for (unsigned int i = 0; i < numberOfKeysGiven; i++) {
+ std::string entryId(m_ArgsInfo.key_arg[i] );
+ std::string value( m_ArgsInfo.tag_arg[i] );
+ for(unsigned int fni = 0; fni<numberOfFilenames; fni++)
+ itk::EncapsulateMetaData<std::string>( *((*dictionary)[fni]), entryId, value );
+ }