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.
152 lines
5.1 KiB
C++
152 lines
5.1 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkHighestDensityRegionsStatistics.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 vtkHighestDensityRegionsStatistics
|
|
* @brief Compute a random vector of
|
|
* density f from input observations points. f is computed using a smooth
|
|
* kernel method.
|
|
*
|
|
*
|
|
* Given a selection of pairs of columns of interest, this class provides the
|
|
* following functionalities, depending on the chosen execution options:
|
|
* * Learn: calculates density estimator f of a random vector using a smooth
|
|
* gaussian kernel. The output metadata on port OUTPUT_MODEL is a multiblock
|
|
* dataset containing at one vtkTable holding three columns which are for the
|
|
* first columns the input columns of interest and for the last columns the
|
|
* density estimators of each input pair of columns of interest.
|
|
* * Derive: calculate normalized (as a percentage) quantiles coming from
|
|
* Learn output. The second block of the multibloc dataset contains a
|
|
* vtkTable holding some pairs of columns which are for the second one the
|
|
* quantiles ordered from the stronger to the lower and for the first one
|
|
* the correspondand quantile index.
|
|
* * Assess: not implemented.
|
|
* * Test: not implemented.
|
|
*/
|
|
|
|
#ifndef vtkHighestDensityRegionsStatistics_h
|
|
#define vtkHighestDensityRegionsStatistics_h
|
|
|
|
#include "vtkFiltersStatisticsModule.h" // For export macro
|
|
#include "vtkStatisticsAlgorithm.h"
|
|
|
|
class vtkMultiBlockDataSet;
|
|
class vtkVariant;
|
|
|
|
class VTKFILTERSSTATISTICS_EXPORT vtkHighestDensityRegionsStatistics : public vtkStatisticsAlgorithm
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkHighestDensityRegionsStatistics, vtkStatisticsAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
static vtkHighestDensityRegionsStatistics* New();
|
|
|
|
/**
|
|
* Given a collection of models, calculate aggregate model
|
|
*/
|
|
void Aggregate(vtkDataObjectCollection*, vtkMultiBlockDataSet*) override { return; }
|
|
|
|
/**
|
|
* Set the width of the gaussian kernel.
|
|
*/
|
|
void SetSigma(double sigma);
|
|
|
|
/**
|
|
* Set the gaussian kernel matrix.
|
|
*/
|
|
void SetSigmaMatrix(double s11, double s12, double s21, double s22);
|
|
|
|
/**
|
|
* Fill outDensity with density vector that is computed from
|
|
* inObservations values. This method uses a Gaussian kernel.
|
|
* For n observations and with X an observation point:
|
|
* f(X) = (1 / n) * Sum(KH(X -Xi)) for (i = 1 to n).
|
|
* Look ComputeSmoothGaussianKernel for KH kernel definition.
|
|
*/
|
|
double ComputeHDR(vtkDataArray* inObservations, vtkDataArray* outDensity);
|
|
|
|
/**
|
|
* Fill outDensity with density vector defined by inPOI and computed from
|
|
* the inObs values. This method uses a Gaussian kernel.
|
|
* For n observations and with X an observation point:
|
|
* f(X) = (1 / n) * Sum(KH(X -Xi)) for (i = 1 to n).
|
|
* Look ComputeSmoothGaussianKernel for KH kernel definition.
|
|
*/
|
|
double ComputeHDR(vtkDataArray* inObs, vtkDataArray* inPOI, vtkDataArray* outDensity);
|
|
|
|
protected:
|
|
vtkHighestDensityRegionsStatistics();
|
|
~vtkHighestDensityRegionsStatistics() override;
|
|
|
|
/**
|
|
* Execute the calculations required by the Learn option.
|
|
*/
|
|
void Learn(vtkTable*, vtkTable*, vtkMultiBlockDataSet*) override;
|
|
|
|
/**
|
|
* Execute the calculations required by the Derive option.
|
|
*/
|
|
void Derive(vtkMultiBlockDataSet*) override;
|
|
|
|
/**
|
|
* Execute the calculations required by the Assess option.
|
|
*/
|
|
void Assess(vtkTable*, vtkMultiBlockDataSet*, vtkTable*) override { return; }
|
|
|
|
/**
|
|
* Execute the calculations required by the Test option.
|
|
*/
|
|
void Test(vtkTable*, vtkMultiBlockDataSet*, vtkTable*) override { return; }
|
|
|
|
/**
|
|
* Provide the appropriate assessment functor.
|
|
*/
|
|
void SelectAssessFunctor(vtkTable*, vtkDataObject*, vtkStringArray*, AssessFunctor*&) override
|
|
{
|
|
return;
|
|
}
|
|
|
|
//@{
|
|
/**
|
|
* Store the smooth matrix parameter H. Specify a smooth direction
|
|
* for the Gaussian kernel.
|
|
*/
|
|
double SmoothHC1[2];
|
|
double SmoothHC2[2];
|
|
double InvSigmaC1[2];
|
|
double InvSigmaC2[2];
|
|
double Determinant;
|
|
//@}
|
|
|
|
/**
|
|
* Store the number of requested columns pair computed by learn method.
|
|
*/
|
|
vtkIdType NumberOfRequestedColumnsPair;
|
|
|
|
private:
|
|
/**
|
|
* Helper that returns a smooth gaussian kernel of a vector of dimension two,
|
|
* using its coordinates. For X = [khx, khy] and H a positive matrix of dim 2,
|
|
* KH(X) = sqrt(det(H)) * K((1 / sqrt(H)) * X).
|
|
* Look ComputeStandardGaussianKernel for the K kernel definition.
|
|
*/
|
|
double ComputeSmoothGaussianKernel(int dimension, double khx, double khy);
|
|
|
|
private:
|
|
vtkHighestDensityRegionsStatistics(const vtkHighestDensityRegionsStatistics&) = delete;
|
|
void operator=(const vtkHighestDensityRegionsStatistics&) = delete;
|
|
};
|
|
|
|
#endif
|