You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
4.6 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkImageHistogramStatistics.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkImageHistogramStatistics
* @brief Compute statistics for an image
*
* vtkImageHistogramStatistics computes statistics such as mean, median, and
* standard deviation. These statistics are computed from the histogram
* of the image, rather than from the image itself, because this is more
* efficient than computing the statistics while traversing the pixels.
* If the input image is of type float or double, then the precision of
* the Mean, Median, and StandardDeviation will depend on the number of
* histogram bins. By default, 65536 bins are used for float data, giving
* at least 16 bits of precision.
* @par Thanks:
* Thanks to David Gobbi at the Seaman Family MR Centre and Dept. of Clinical
* Neurosciences, Foothills Medical Centre, Calgary, for providing this class.
*/
#ifndef vtkImageHistogramStatistics_h
#define vtkImageHistogramStatistics_h
#include "vtkImageHistogram.h"
#include "vtkImagingStatisticsModule.h" // For export macro
class vtkImageStencilData;
class vtkIdTypeArray;
class VTKIMAGINGSTATISTICS_EXPORT vtkImageHistogramStatistics : public vtkImageHistogram
{
public:
static vtkImageHistogramStatistics* New();
vtkTypeMacro(vtkImageHistogramStatistics, vtkImageHistogram);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Get the minimum value present in the image. This value is computed
* when Update() is called.
*/
double GetMinimum() { return this->Minimum; }
/**
* Get the maximum value present in the image. This value is computed
* when Update() is called.
*/
double GetMaximum() { return this->Maximum; }
/**
* Get the mean value of the image. This value is computed when Update()
* is called.
*/
double GetMean() { return this->Mean; }
/**
* Get the median value. This is computed when Update() is called.
*/
double GetMedian() { return this->Median; }
/**
* Get the standard deviation of the values in the image. This is
* computed when Update() is called.
*/
double GetStandardDeviation() { return this->StandardDeviation; }
//@{
/**
* Set the percentiles to use for automatic view range computation.
* This allows one to compute a range that does not include outliers
* that are significantly darker or significantly brighter than the
* rest of the pixels in the image. The default is to use the first
* percentile and the 99th percentile.
*/
vtkSetVector2Macro(AutoRangePercentiles, double);
vtkGetVector2Macro(AutoRangePercentiles, double);
//@}
//@{
/**
* Set lower and upper expansion factors to apply to the auto range
* that was computed from the AutoRangePercentiles. Any outliers that
* are within this expanded range will be included, even if they are
* beyond the percentile. This allows inclusion of values that are
* just slightly outside of the percentile, while rejecting values
* that are far beyond the percentile. The default is to expand the
* range by a factor of 0.1 at each end. The range will never be
* expanded beyond the Minimum or Maximum pixel values.
*/
vtkSetVector2Macro(AutoRangeExpansionFactors, double);
vtkGetVector2Macro(AutoRangeExpansionFactors, double);
//@}
//@{
/**
* Get an automatically computed view range for the image, for use
* with the lookup table or image property that is used when viewing
* the image. The use of this range will avoid situations where an
* image looks too dark because a few pixels happen to be much brighter
* than the rest.
*/
vtkGetVector2Macro(AutoRange, double);
//@}
protected:
vtkImageHistogramStatistics();
~vtkImageHistogramStatistics() override;
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
double Minimum;
double Maximum;
double Mean;
double StandardDeviation;
double Median;
double AutoRange[2];
double AutoRangePercentiles[2];
double AutoRangeExpansionFactors[2];
private:
vtkImageHistogramStatistics(const vtkImageHistogramStatistics&) = delete;
void operator=(const vtkImageHistogramStatistics&) = delete;
};
#endif