Create 3D Volume From Series of 2D Images#
Synopsis#
Create a 3D volume from a series of 2D images.
Results#
Note
Help Wanted Implementation of Results for sphinx examples containing this message. Reconfiguration of CMakeList.txt may be necessary. Write An Example <https://itk.org/ITKExamples/Documentation/Contribute/WriteANewExample.html>
Code#
C++#
#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;
}
using PixelType = unsigned char;
constexpr unsigned int Dimension = 3;
using ImageType = itk::Image<PixelType, Dimension>;
using ReaderType = itk::ImageSeriesReader<ImageType>;
auto reader = ReaderType::New();
const unsigned int first = std::stoi(argv[2]);
const unsigned int last = std::stoi(argv[3]);
const char * outputFileName = argv[4];
using NameGeneratorType = itk::NumericSeriesFileNames;
auto 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);
try
{
itk::WriteImage(reader->GetOutput(), outputFileName);
}
catch (const itk::ExceptionObject & err)
{
std::cerr << "ExceptionObject caught !" << std::endl;
std::cerr << err << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Classes demonstrated#
-
template<typename TOutputImage>
class ImageSeriesReader : public itk::ImageSource<TOutputImage> Data source that reads image data from a series of disk files.
This class builds an n-dimension image from multiple n-1 dimension image files. The files stored in a vector of strings are read using the ImageFileReader. File format may vary between the files, but the image data must have the same Size for all dimensions.
- See
GDCMSeriesFileNames
- See
NumericSeriesFileNames