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}