Extract Contours From Image#
Note
Wish List Still needs additional work to finish proper creation of example.
Synopsis#
Extract contours from an image.
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 "itkImageFileWriter.h"
#include "itkSimpleContourExtractorImageFilter.h"
#include "itkImageRegionIterator.h"
using UnsignedCharImageType = itk::Image<unsigned char, 2>;
static void CreateImage(UnsignedCharImageType::Pointer image);
int main()
{
auto image = UnsignedCharImageType::New();
CreateImage(image);
using SimpleContourExtractorImageFilterType = itk::SimpleContourExtractorImageFilter <UnsignedCharImageType, UnsignedCharImageType>;
SimpleContourExtractorImageFilterType::Pointer contourFilter
= SimpleContourExtractorImageFilterType::New();
contourFilter->SetInput(image);
contourFilter->Update();
using WriterType = itk::ImageFileWriter< UnsignedCharImageType >;
auto writer = WriterType::New();
writer->SetFileName("output.png");
writer->SetInput(contourFilter->GetOutput());
writer->Update();
return EXIT_SUCCESS;
}
void CreateImage(UnsignedCharImageType::Pointer image)
{
// Create an image
itk::Index<2> start;
start.Fill(0);
itk::Size<2> size;
size.Fill(100);
itk::ImageRegion<2> region(start,size);
image->SetRegions(region);
image->Allocate();
image->FillBuffer(0);
// Create a line pixels
for(unsigned int i = 40; i < 60; ++i)
{
itk::Index<2> pixel;
pixel.Fill(i);
image->SetPixel(pixel, 255);
}
// Create another line of pixels
for(unsigned int i = 10; i < 20; ++i)
{
itk::Index<2> pixel;
pixel[0] = 10;
pixel[1] = i;
image->SetPixel(pixel, 255);
}
using WriterType = itk::ImageFileWriter< UnsignedCharImageType >;
auto writer = WriterType::New();
writer->SetFileName("input.png");
writer->SetInput(image);
writer->Update();
}
Classes demonstrated#
-
template<typename TInputImage, typename TOutputImage>
class SimpleContourExtractorImageFilter : public itk::BoxImageFilter<TInputImage, TOutputImage> Computes an image of contours which will be the contour of the first image.
A pixel of the source image is considered to belong to the contour if its pixel value is equal to the input foreground value and it has in its neighborhood at least one pixel which its pixel value is equal to the input background value. The output image will have pixels which will be set to the output foreground value if they belong to the contour, otherwise they will be set to the output background value.
The neighborhood “radius” is set thanks to the radius params.
- ITK Sphinx Examples:
- See
Image
- See
Neighborhood
- See
NeighborhoodOperator
- See
NeighborhoodIterator