Compute Min, Max, Variance and Mean of Image#

Synopsis#

Compute min, max, variance and mean of an Image.

Results#

Warning

Fix Errors Example contains errors needed to be fixed for proper output.

Code#

C++#

#include "itkImage.h"
#include "itkStatisticsImageFilter.h"

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

static void
CreateImage(ImageType::Pointer image);

int
main(int itkNotUsed(argc), char * itkNotUsed(argv)[])
{
  auto image = ImageType::New();
  CreateImage(image);

  using StatisticsImageFilterType = itk::StatisticsImageFilter<ImageType>;
  auto statisticsImageFilter = StatisticsImageFilterType::New();
  statisticsImageFilter->SetInput(image);
  statisticsImageFilter->Update();

  std::cout << "Mean: " << statisticsImageFilter->GetMean() << std::endl;
  std::cout << "Std.: " << statisticsImageFilter->GetSigma() << std::endl;
  std::cout << "Min: " << statisticsImageFilter->GetMinimum() << std::endl;
  std::cout << "Max: " << statisticsImageFilter->GetMaximum() << std::endl;

  return EXIT_SUCCESS;
}


void
CreateImage(ImageType::Pointer image)
{
  // Create an image with 2 connected components
  ImageType::RegionType region;
  ImageType::IndexType  start;
  start[0] = 0;
  start[1] = 0;

  ImageType::SizeType size;
  unsigned int        NumRows = 200;
  unsigned int        NumCols = 300;
  size[0] = NumRows;
  size[1] = NumCols;

  region.SetSize(size);
  region.SetIndex(start);

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

  // Make a square
  for (unsigned int r = 20; r < 80; ++r)
  {
    for (unsigned int c = 30; c < 100; ++c)
    {
      ImageType::IndexType pixelIndex;
      pixelIndex[0] = r;
      pixelIndex[1] = c;

      image->SetPixel(pixelIndex, 255);
    }
  }

  // Make another square
  for (unsigned int r = 100; r < 130; ++r)
  {
    for (unsigned int c = 115; c < 160; ++c)
    {
      ImageType::IndexType pixelIndex;
      pixelIndex[0] = r;
      pixelIndex[1] = c;

      image->SetPixel(pixelIndex, 255);
    }
  }
}

Classes demonstrated#

template<typename TInputImage>
class StatisticsImageFilter : public itk::ImageSink<TInputImage>

Compute min, max, variance and mean of an Image.

StatisticsImageFilter computes the minimum, maximum, sum, sum of squares, mean, variance sigma of an image. The filter needs all of its input image. It behaves as a filter with an input and output. Thus it can be inserted in a pipline with other filters and the statistics will only be recomputed if a downstream filter changes.

This filter is automatically multi-threaded and can stream its input when NumberOfStreamDivisions is set to more than one. Statistics are independently computed for each streamed and threaded region then merged.

Internally a compensated summation algorithm is used for the accumulation of intensities to improve accuracy for large images.

ITK Sphinx Examples:

\sphinxexample{Filtering/ImageStatistics/ComputeMinMaxVarianceMeanOfImage,Compute Min, Max, Variance

And Mean Of Image}

See itk::StatisticsImageFilter for additional documentation.