ITK/Examples/IO/VolumeFromSlices: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
No edit summary
(Deprecated content that is moved to sphinxed)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
''Thanks to Dora Szasz whose original example inspired this one.''
{{warning|1=The media wiki content on this page is no longer maintained. The examples presented on the https://itk.org/Wiki/* pages likely require ITK version 4.13 or earlier releases.   In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.}}
 
This examples creates a 3D volume from a series of 2D images. The image filenames are generated from a user supplied pattern. The pattern uses printf format. For example, to select the following files for the volume:
 
c:/itkguru/File001.jpg
c:/itkguru/File002.jpg
c:/itkguru/File003.jpg
  ...
c:/itkguru/File010.jpg
 
run:
 
VolumeFromSlices c:/itkguru/File%03d.jpg 1 10 out.mhd
 
==VolumeFromSlices.cxx==
<source lang=cpp>
#include "itkImage.h"
#include "itkImageSeriesReader.h"
#include "itkImageFileWriter.h"
#include "itkNumericSeriesFileNames.h"
 
int main( int argc, char * argv[] )
{
  // Verify the number of parameters in the command line
  if( argc < 5 )
    {
    std::cerr << "Usage: " << std::endl;
    std::cerr << argv[0]
              << " pattern firstSliceValue lastSliceValue outputImageFile"
              << std::endl;
    return EXIT_FAILURE;
    }
 
  typedef unsigned char  PixelType;
  const unsigned int Dimension = 3;
 
  typedef itk::Image< PixelType, Dimension >  ImageType;
  typedef itk::ImageSeriesReader< ImageType > ReaderType;
  typedef itk::ImageFileWriter<  ImageType > WriterType;
 
  ReaderType::Pointer reader = ReaderType::New();
  WriterType::Pointer writer = WriterType::New();
 
  const unsigned int first = atoi( argv[2] );
  const unsigned int last  = atoi( argv[3] );
 
  const char * outputFilename = argv[4];
 
  typedef itk::NumericSeriesFileNames    NameGeneratorType;
 
  NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
 
  nameGenerator->SetSeriesFormat( argv[1] );
 
  nameGenerator->SetStartIndex( first );
  nameGenerator->SetEndIndex( last );
  nameGenerator->SetIncrementIndex( 1 );
  std::vector<std::string> names = nameGenerator->GetFileNames();
 
  // List the files
  //
  std::vector<std::string>::iterator nit;
  for (nit = names.begin();
      nit != names.end();
      nit++)
    {
    std::cout << "File: " << (*nit).c_str() << std::endl;
    }
 
  reader->SetFileNames( names  );
 
  writer->SetFileName( outputFilename );
  writer->SetInput( reader->GetOutput() );
  try
    {
    writer->Update();
    }
  catch( itk::ExceptionObject & err )
    {
    std::cerr << "ExceptionObject caught !" << std::endl;
    std::cerr << err << std::endl;
    return EXIT_FAILURE;
    }
  return EXIT_SUCCESS;
}
</source>
 
{{ITKCMakeLists|VolumeFromSlices|}}

Latest revision as of 23:58, 7 June 2019

Warning: The media wiki content on this page is no longer maintained. The examples presented on the https://itk.org/Wiki/* pages likely require ITK version 4.13 or earlier releases. In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.