Compare Two Images and Set Output Pixel to Max#

Synopsis#

Pixel wise compare two input images and set the output pixel to their max.

Results#

Note

No output is printed, this example simply displays functionality.

Code#

C++#

#include "itkImage.h"
#include "itkMaximumImageFilter.h"
#include "itkImageRegionIterator.h"

using ImageType = itk::Image<unsigned char, 2>;

static void
CreateImage1(ImageType * image);
static void
CreateImage2(ImageType * image);

int
main()
{
  auto image1 = ImageType::New();
  CreateImage1(image1);

  auto image2 = ImageType::New();
  CreateImage2(image2);

  using MaximumImageFilterType = itk::MaximumImageFilter<ImageType>;

  auto maximumImageFilter = MaximumImageFilterType::New();
  maximumImageFilter->SetInput(0, image1);
  maximumImageFilter->SetInput(1, image2);
  maximumImageFilter->Update();

  return EXIT_SUCCESS;
}

void
CreateImage1(ImageType * image)
{
  ImageType::IndexType start;
  start.Fill(0);

  ImageType::SizeType size;
  size.Fill(100);

  ImageType::RegionType region;
  region.SetSize(size);
  region.SetIndex(start);

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

  itk::ImageRegionIterator<ImageType> imageIterator(image, region);

  while (!imageIterator.IsAtEnd())
  {
    if (imageIterator.GetIndex()[0] < 30)
    {
      imageIterator.Set(255);
    }
    else
    {
      imageIterator.Set(0);
    }

    ++imageIterator;
  }
}

void
CreateImage2(ImageType * image)
{
  ImageType::IndexType start;
  start.Fill(0);

  ImageType::SizeType size;
  size.Fill(100);

  ImageType::RegionType region;
  region.SetSize(size);
  region.SetIndex(start);

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

  itk::ImageRegionIterator<ImageType> imageIterator(image, region);

  while (!imageIterator.IsAtEnd())
  {
    if (imageIterator.GetIndex()[0] > 70)
    {
      imageIterator.Set(255);
    }
    else
    {
      imageIterator.Set(0);
    }

    ++imageIterator;
  }
}

Classes demonstrated#

template<typename TInputImage1, typename TInputImage2 = TInputImage1, typename TOutputImage = TInputImage1>
class MaximumImageFilter : public itk::BinaryGeneratorImageFilter<TInputImage1, TInputImage2, TOutputImage>

Implements a pixel-wise operator Max(a,b) between two images.

The pixel values of the output image are the maximum between the corresponding pixels of the two input images.

This class is templated over the types of the two input images and the type of the output image. Numeric conversions (castings) are done by the C++ defaults.

ITK Sphinx Examples:

See itk::MaximumImageFilter for additional documentation.