[Insight-users] ITK Series Dicom 16bit in Series dicom 8bit

Slivietta silvianeg at alice.it
Fri May 23 06:51:07 EDT 2008


hello..
I want read a dicom series and write another dicom series with the same name
but..change from 16bit to 8bit..
This is my code..but there are problem..
Can you help me?
thank you in advance.. ;)

#include "itkGDCMImageIO.h"
#include "itkGDCMSeriesFileNames.h"
#include "itkImageSeriesReader.h"
#include "itkImageSeriesWriter.h"

#include <vector>
#include <itksys/SystemTools.hxx>

int main( int argc, char* argv[] )
{
  if( argc < 3 )
    {
    std::cerr << "Usage: " << argv[0] <<
      " DicomDirectory  OutputDicomDirectory" << std::endl;
    return EXIT_FAILURE;
    }

  typedef signed short    PixelType;
  const unsigned int      Dimension = 3;

  typedef itk::Image< PixelType, Dimension >      ImageType;
  typedef itk::ImageSeriesReader< ImageType >     ReaderType;

  typedef itk::GDCMImageIO                        ImageIOType;
  typedef itk::GDCMSeriesFileNames                NamesGeneratorType;

typedef itk::RescaleIntensityImageFilter<ReaderType,SeriesWriterType >
FilterType;
FilterType::Pointer filter = FilterType::New();
filter->SetOutputMinimum(   0 );
filter->SetOutputMaximum( 255 );

  ImageIOType::Pointer gdcmIO = ImageIOType::New();
  NamesGeneratorType::Pointer namesGenerator = NamesGeneratorType::New();

  namesGenerator->SetInputDirectory( argv[1] );
 const ReaderType::FileNamesContainer & filenames =
namesGenerator->GetInputFileNames();

  unsigned int numberOfFilenames =  filenames.size();
  std::cout << numberOfFilenames << std::endl;
  for(unsigned int fni = 0; fni<numberOfFilenames; fni++)
    {
    std::cout << "filename # " << fni << " = ";
    std::cout << filenames[fni] << std::endl;
    }

  ReaderType::Pointer reader = ReaderType::New();

  reader->SetImageIO( gdcmIO );
  reader->SetFileNames( filenames );

  try
    {
    reader->Update();
    }
  catch (itk::ExceptionObject &excp)
    {
    std::cerr << "Exception thrown while writing the image" << std::endl;
    std::cerr << excp << std::endl;
    return EXIT_FAILURE;
    }

  const char * outputDirectory = argv[2];

  itksys::SystemTools::MakeDirectory( outputDirectory );

  typedef signed short    OutputPixelType;
  const unsigned int      OutputDimension = 2;
 typedef itk::Image< OutputPixelType, OutputDimension >    Image2DType;

  typedef itk::ImageSeriesWriter<ImageType, Image2DType >  SeriesWriterType;

  SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New();

//  seriesWriter->SetInput( reader->GetOutput() );
  seriesWriter->SetImageIO( gdcmIO );
filter->SetInput( reader->GetOutput() );
seriesWriter->SetInput( filter->GetOutput() );

  namesGenerator->SetOutputDirectory( outputDirectory );

  seriesWriter->SetFileNames( namesGenerator->GetOutputFileNames() );

 
seriesWriter->SetMetaDataDictionaryArray(reader->GetMetaDataDictionaryArray()
);
  try
    {
    seriesWriter->Update();
    }
  catch( itk::ExceptionObject & excp )
    {
    std::cerr << "Exception thrown while writing the series " << std::endl;
    std::cerr << excp << std::endl;
    return EXIT_FAILURE;
    }

  return EXIT_SUCCESS;
}


-- 
View this message in context: http://www.nabble.com/ITK-Series-Dicom-16bit--in-Series-dicom-8bit-tp17423248p17423248.html
Sent from the ITK - Users mailing list archive at Nabble.com.



More information about the Insight-users mailing list