Convert Spatial Object to Image#

Synopsis#

Convert a spatial object to an image.

Results#

output.png

output.png#

Code#

C++#

#include "itkSpatialObjectToImageFilter.h"
#include "itkEllipseSpatialObject.h"
#include "itkImageFileWriter.h"

int
main(int argc, char * argv[])
{
  if (argc != 2)
  {
    std::cerr << "Usage: " << argv[0] << " outputimagefile " << std::endl;
    return EXIT_FAILURE;
  }

  using PixelType = unsigned char;
  constexpr unsigned int Dimension = 2;

  using ImageType = itk::Image<PixelType, Dimension>;

  using EllipseType = itk::EllipseSpatialObject<Dimension>;

  using SpatialObjectToImageFilterType = itk::SpatialObjectToImageFilter<EllipseType, ImageType>;

  auto imageFilter = SpatialObjectToImageFilterType::New();

  //  The SpatialObjectToImageFilter requires that the user defines the grid
  //  parameters of the output image. This includes the number of pixels along
  //  each dimension, the pixel spacing, image direction and

  ImageType::SizeType size;
  size[0] = 50;
  size[1] = 50;

  imageFilter->SetSize(size);

  ImageType::SpacingType spacing;
  spacing[0] = 100.0 / size[0];
  spacing[1] = 100.0 / size[1];

  imageFilter->SetSpacing(spacing);

  auto                   ellipse = EllipseType::New();
  EllipseType::ArrayType radiusArray;
  radiusArray[0] = 10;
  radiusArray[1] = 20;
  // ellipse->SetRadiusInObjectSpace(  size[0] * 0.2 * spacing[0] );
  ellipse->SetRadiusInObjectSpace(radiusArray);

  // Position the ellipse

  using TransformType = EllipseType::TransformType;

  auto transform = TransformType::New();

  transform->SetIdentity();

  TransformType::OutputVectorType translation;
  translation[0] = size[0] * spacing[0] / 2.0;
  translation[1] = size[1] * spacing[1] / 4.0;
  transform->Translate(translation, false);

  ellipse->SetObjectToParentTransform(transform);

  imageFilter->SetInput(ellipse);

  ellipse->SetDefaultInsideValue(255);

  ellipse->SetDefaultOutsideValue(0);

  imageFilter->SetUseObjectValue(true);

  imageFilter->SetOutsideValue(0);

  try
  {
    imageFilter->Update();
    itk::WriteImage(imageFilter->GetOutput(), argv[1], true); // compress
  }
  catch (const itk::ExceptionObject & excp)
  {
    std::cerr << excp << std::endl;
    return EXIT_FAILURE;
  }

  return EXIT_SUCCESS;
}

Classes demonstrated#

template<typename TInputSpatialObject, typename TOutputImage>
class SpatialObjectToImageFilter : public itk::ImageSource<TOutputImage>

Base class for filters that take a SpatialObject as input and produce an image as output. By default, if the user does not specify the size of the output image, the maximum size of the object’s bounding box is used. The spacing of the image is given by the spacing of the input Spatial object.

ITK Sphinx Examples:

See itk::SpatialObjectToImageFilter for additional documentation.