Extract Component of Vector Image#

Synopsis#

Extract a component/channel of a vector image.

Results#

Code#

C++#

#include "itkVectorImage.h"
#include "itkImageRegionIterator.h"
#include "itkMinimumMaximumImageCalculator.h"
#include "itkVectorIndexSelectionCastImageFilter.h"

using VectorImageType = itk::VectorImage<float, 2>;
using ScalarImageType = itk::Image<float, 2>;

static void
CreateImage(VectorImageType::Pointer image);

int
main()
{
  auto image = VectorImageType::New();
  CreateImage(image);

  using IndexSelectionType = itk::VectorIndexSelectionCastImageFilter<VectorImageType, ScalarImageType>;
  auto indexSelectionFilter = IndexSelectionType::New();
  indexSelectionFilter->SetIndex(0);
  indexSelectionFilter->SetInput(image);

  using ImageCalculatorFilterType = itk::MinimumMaximumImageCalculator<ScalarImageType>;
  auto imageCalculatorFilter = ImageCalculatorFilterType::New();
  imageCalculatorFilter->SetImage(indexSelectionFilter->GetOutput());
  imageCalculatorFilter->Compute();

  return EXIT_SUCCESS;
}

void
CreateImage(VectorImageType::Pointer image)
{
  VectorImageType::IndexType start;
  start.Fill(0);

  VectorImageType::SizeType size;
  size.Fill(2);

  VectorImageType::RegionType region(start, size);

  image->SetRegions(region);
  image->SetNumberOfComponentsPerPixel(3);
  image->Allocate();

  using VariableVectorType = itk::VariableLengthVector<double>;
  VariableVectorType variableLengthVector;
  variableLengthVector.SetSize(3);
  variableLengthVector[0] = 1.1;
  variableLengthVector[1] = 2.2;
  variableLengthVector[2] = 3.3;

  image->FillBuffer(variableLengthVector);
}

Classes demonstrated#

template<typename TInputImage, typename TOutputImage>
class VectorIndexSelectionCastImageFilter : public itk::UnaryFunctorImageFilter<TInputImage, TOutputImage, Functor::VectorIndexSelectionCast<TInputImage::PixelType, TOutputImage::PixelType>>

Extracts the selected index of the vector that is the input pixel type.

This filter is templated over the input image type and output image type.

The filter expect the input image pixel type to be a vector and the output image pixel type to be a scalar. The only requirement on the type used for representing the vector is that it must provide an operator[].

See

ComposeImageFilter

ITK Sphinx Examples:

See itk::VectorIndexSelectionCastImageFilter for additional documentation.