Convert Spatial Object to Image#
Synopsis#
Convert a spatial object to an image.
Results#
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: