Apply Accumulate Image Filter

Synopsis

Accumulate pixels of an image along a selected direction.

Results

Input image

Input image

Output image 0

Output image accumulated along direction 0

Output image 1

Output image accumulated along direction 1

Output image 2

Output image accumulated along direction 2

Code

C++

#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkAccumulateImageFilter.h"

int
main(int argc, char * argv[])
{
  if (argc != 4)
  {
    std::cerr << "Usage: " << std::endl;
    std::cerr << argv[0];
    std::cerr << " <InputFileName> <OutputFileName> <Dimension>";
    std::cerr << std::endl;
    return EXIT_FAILURE;
  }

  const char * inputFileName = argv[1];
  const char * outputFileName = argv[2];
  auto         accumulateDimension = static_cast<unsigned int>(std::stoi(argv[3]));

  constexpr unsigned int Dimension = 3;

  using InputPixelType = unsigned char;
  using InputImageType = itk::Image<InputPixelType, Dimension>;

  using ReaderType = itk::ImageFileReader<InputImageType>;
  ReaderType::Pointer reader = ReaderType::New();
  reader->SetFileName(inputFileName);

  using OutputPixelType = double;
  using OutputImageType = itk::Image<OutputPixelType, Dimension>;

  using FilterType = itk::AccumulateImageFilter<InputImageType, OutputImageType>;
  FilterType::Pointer filter = FilterType::New();
  filter->SetInput(reader->GetOutput());
  filter->SetAccumulateDimension(accumulateDimension);

  using WriterType = itk::ImageFileWriter<OutputImageType>;
  WriterType::Pointer writer = WriterType::New();
  writer->SetFileName(outputFileName);
  writer->SetInput(filter->GetOutput());

  try
  {
    writer->Update();
  }
  catch (itk::ExceptionObject & error)
  {
    std::cerr << "Error: " << error << std::endl;
    return EXIT_FAILURE;
  }

  return EXIT_SUCCESS;
}

Classes demonstrated

template<typename TInputImage, typename TOutputImage>
class AccumulateImageFilter : public itk::ImageToImageFilter<TInputImage, TOutputImage>

Implements an accumulation of an image along a selected direction.

This class accumulates an image along a dimension and reduce the size of this dimension to 1. The dimension being accumulated is set by AccumulateDimension.

Each pixel is the cumulative sum of the pixels along the collapsed dimension and reduce the size of the accumulated dimension to 1 (only on the accumulated).

The dimensions of the InputImage and the OutputImage must be the same.

This class is parameterized over the type of the input image and the type of the output image.

This filter was contributed by Emiliano Beronich

Author

Emiliano Beronich

See

GetAverageSliceImageFilter

Subclassed by itk::GetAverageSliceImageFilter< TInputImage, TOutputImage >

See itk::AccumulateImageFilter for additional documentation.