|
|
(2 intermediate revisions by one other user not shown) |
Line 1: |
Line 1: |
| 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:
| | {{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.}} |
| | |
| 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|}}
| |