Class for multi-variate gaussians with arbitrary axes. More...
#include <vpdfl_gaussian.h>
Public Member Functions | |
vpdfl_gaussian () | |
Dflt ctor. | |
virtual | ~vpdfl_gaussian () |
Destructor. | |
void | set (const vnl_vector< double > &mean, const vnl_vector< double > &variance, const vnl_matrix< double > &evecs, const vnl_vector< double > &evals) |
Initialise. | |
virtual void | set (const vnl_vector< double > &mean, const vnl_matrix< double > &evecs, const vnl_vector< double > &evals) |
Initialise safely. | |
void | set (const vnl_vector< double > &mean, const vnl_matrix< double > &covar, double min_eval=1e-6) |
Initialise from mean and covariance matrix. | |
void | set_mean (const vnl_vector< double > &mean) |
Modify just the mean of the distribution. | |
const vnl_matrix< double > & | eigenvecs () const |
Eigenvectors of covariance matrix. | |
const vnl_vector< double > & | eigenvals () const |
Eigenvalues of covariance matrix. | |
vnl_matrix< double > | covariance () const |
The Covariance matrix of the Gaussian. | |
double | log_k () const |
log of normalisation constant for gaussian. | |
virtual vpdfl_sampler_base * | new_sampler () const |
Create a sampler object on the heap. | |
virtual double | log_p (const vnl_vector< double > &x) const |
Log of probability density at x. | |
virtual void | gradient (vnl_vector< double > &g, const vnl_vector< double > &x, double &p) const |
Gradient of PDF at x. | |
virtual double | log_prob_thresh (double pass_proportion) const |
Compute threshold for PDF to pass a given proportion. | |
virtual void | nearest_plausible (vnl_vector< double > &x, double log_p_min) const |
Compute nearest point to x which has a density above a threshold. | |
short | version_no () const |
Version number for I/O. | |
virtual vcl_string | is_a () const |
Name of the class. | |
virtual bool | is_class (vcl_string const &s) const |
Does the name of the class match the argument?. | |
virtual vpdfl_pdf_base * | clone () const |
Create a copy on the heap and return base class pointer. | |
virtual void | print_summary (vcl_ostream &os) const |
Print class to os. | |
virtual void | b_write (vsl_b_ostream &bfs) const |
Save class to binary file stream. | |
virtual void | b_read (vsl_b_istream &bfs) |
Load class from binary file stream. | |
const vnl_vector< double > & | mean () const |
Mean of distribution. | |
const vnl_vector< double > & | variance () const |
Variance of each dimension. | |
int | n_dims () const |
Number of dimensions. | |
virtual int | n_peaks () const |
Number of peaks of distribution. | |
virtual const vnl_vector < double > & | peak (int) const |
Position of the i'th peak. | |
virtual double | operator() (const vnl_vector< double > &x) const |
Probability density at x. | |
virtual void | gradient_logp (vnl_vector< double > &g, const vnl_vector< double > &x) const |
Gradient and value of log(p(x)) at x. | |
virtual bool | is_valid_pdf () const |
Return true if the object represents a valid PDF. | |
Protected Member Functions | |
void | set_variance (const vnl_vector< double > &v) |
Protected Attributes | |
vnl_vector< double > | dx_ |
Workspace. | |
vnl_vector< double > | b_ |
Workspace. | |
Private Member Functions | |
void | calcLogK () |
double | dx_sigma_dx (const vnl_vector< double > &x) const |
Calculate (x-mu)' * Sigma^-1 * (x-mu). | |
Private Attributes | |
vnl_matrix< double > | evecs_ |
vnl_vector< double > | evals_ |
double | log_k_ |
Class for multi-variate gaussians with arbitrary axes.
Covariance matrix is represented by its eigenvectors and values
Definition at line 24 of file vpdfl_gaussian.h.
vpdfl_gaussian::vpdfl_gaussian | ( | ) |
Dflt ctor.
Definition at line 70 of file vpdfl_gaussian.cxx.
vpdfl_gaussian::~vpdfl_gaussian | ( | ) | [virtual] |
Destructor.
Definition at line 76 of file vpdfl_gaussian.cxx.
void vpdfl_gaussian::b_read | ( | vsl_b_istream & | bfs | ) | [virtual] |
Load class from binary file stream.
Implements vpdfl_pdf_base.
Reimplemented in vpdfl_pc_gaussian.
Definition at line 414 of file vpdfl_gaussian.cxx.
void vpdfl_gaussian::b_write | ( | vsl_b_ostream & | bfs | ) | const [virtual] |
Save class to binary file stream.
Implements vpdfl_pdf_base.
Reimplemented in vpdfl_pc_gaussian.
Definition at line 400 of file vpdfl_gaussian.cxx.
void vpdfl_gaussian::calcLogK | ( | ) | [private] |
Definition at line 82 of file vpdfl_gaussian.cxx.
vpdfl_pdf_base * vpdfl_gaussian::clone | ( | ) | const [virtual] |
Create a copy on the heap and return base class pointer.
Implements vpdfl_pdf_base.
Reimplemented in vpdfl_pc_gaussian.
Definition at line 340 of file vpdfl_gaussian.cxx.
vnl_matrix< double > vpdfl_gaussian::covariance | ( | ) | const |
The Covariance matrix of the Gaussian.
This value is calculated on the fly each time so calling this function may not be very efficient
Definition at line 180 of file vpdfl_gaussian.cxx.
double vpdfl_gaussian::dx_sigma_dx | ( | const vnl_vector< double > & | x | ) | const [private] |
Calculate (x-mu)' * Sigma^-1 * (x-mu).
This is the Mahalanobis distance squared from the mean.
Definition at line 200 of file vpdfl_gaussian.cxx.
const vnl_vector<double>& vpdfl_gaussian::eigenvals | ( | ) | const [inline] |
Eigenvalues of covariance matrix.
The list is ordered - largest Eigenvalues first.
Definition at line 89 of file vpdfl_gaussian.h.
const vnl_matrix<double>& vpdfl_gaussian::eigenvecs | ( | ) | const [inline] |
Eigenvectors of covariance matrix.
List ordering corresponds to eVals();
Definition at line 85 of file vpdfl_gaussian.h.
void vpdfl_gaussian::gradient | ( | vnl_vector< double > & | g, |
const vnl_vector< double > & | x, | ||
double & | p | ||
) | const [virtual] |
void vpdfl_pdf_base::gradient_logp | ( | vnl_vector< double > & | g, |
const vnl_vector< double > & | x | ||
) | const [virtual, inherited] |
Gradient and value of log(p(x)) at x.
Gradient of log(p(x)) at x.
Computes gradient df/dx of f(x)=log(p(x)) at x. Result is vector of same dimensionality as x. Default baseclass implementation uses gradient() to compute grad/p
Computes gradient df/dx of f(x)=log(p(x)) at x. Default baseclass implementation uses gradient() to compute grad/p
Reimplemented in vpdfl_axis_gaussian.
Definition at line 127 of file vpdfl_pdf_base.cxx.
vcl_string vpdfl_gaussian::is_a | ( | ) | const [virtual] |
Name of the class.
Reimplemented from vpdfl_pdf_base.
Reimplemented in vpdfl_pc_gaussian.
Definition at line 312 of file vpdfl_gaussian.cxx.
bool vpdfl_gaussian::is_class | ( | vcl_string const & | s | ) | const [virtual] |
Does the name of the class match the argument?.
Reimplemented from vpdfl_pdf_base.
Reimplemented in vpdfl_pc_gaussian.
Definition at line 322 of file vpdfl_gaussian.cxx.
bool vpdfl_pdf_base::is_valid_pdf | ( | ) | const [virtual, inherited] |
Return true if the object represents a valid PDF.
This will return false, if n_dims() is 0, for example just ofter default construction.
Reimplemented in vpdfl_mixture.
Definition at line 141 of file vpdfl_pdf_base.cxx.
double vpdfl_gaussian::log_k | ( | ) | const [inline] |
log of normalisation constant for gaussian.
Definition at line 97 of file vpdfl_gaussian.h.
double vpdfl_gaussian::log_p | ( | const vnl_vector< double > & | x | ) | const [virtual] |
Log of probability density at x.
This value is also the Normalised Mahalanobis distance from the centroid to the given vector.
Implements vpdfl_pdf_base.
Reimplemented in vpdfl_pc_gaussian.
Definition at line 235 of file vpdfl_gaussian.cxx.
double vpdfl_gaussian::log_prob_thresh | ( | double | pass_proportion | ) | const [virtual] |
Compute threshold for PDF to pass a given proportion.
Reimplemented from vpdfl_pdf_base.
Definition at line 281 of file vpdfl_gaussian.cxx.
const vnl_vector<double>& vpdfl_pdf_base::mean | ( | ) | const [inline, inherited] |
Mean of distribution.
Definition at line 46 of file vpdfl_pdf_base.h.
int vpdfl_pdf_base::n_dims | ( | ) | const [inline, inherited] |
Number of dimensions.
Definition at line 52 of file vpdfl_pdf_base.h.
virtual int vpdfl_pdf_base::n_peaks | ( | ) | const [inline, virtual, inherited] |
Number of peaks of distribution.
Definition at line 55 of file vpdfl_pdf_base.h.
void vpdfl_gaussian::nearest_plausible | ( | vnl_vector< double > & | x, |
double | log_p_min | ||
) | const [virtual] |
Compute nearest point to x which has a density above a threshold.
If log_p(x)>log_p_min then x unchanged. Otherwise x is moved directly towards the mean (i.e. to the nearest plausible point using a Mahalanobis distance) until log_p(x)=log_p_min.
x | This may be modified to the nearest plausible position. |
log_p_min | lower threshold for log_p(x) |
Implements vpdfl_pdf_base.
Definition at line 290 of file vpdfl_gaussian.cxx.
vpdfl_sampler_base * vpdfl_gaussian::new_sampler | ( | ) | const [virtual] |
Create a sampler object on the heap.
Caller is responsible for deletion.
Implements vpdfl_pdf_base.
Definition at line 189 of file vpdfl_gaussian.cxx.
double vpdfl_pdf_base::operator() | ( | const vnl_vector< double > & | x | ) | const [virtual, inherited] |
Probability density at x.
Reimplemented in vpdfl_mixture, and vpdfl_gaussian_kernel_pdf.
Definition at line 34 of file vpdfl_pdf_base.cxx.
virtual const vnl_vector<double>& vpdfl_pdf_base::peak | ( | int | ) | const [inline, virtual, inherited] |
Position of the i'th peak.
Definition at line 58 of file vpdfl_pdf_base.h.
void vpdfl_gaussian::print_summary | ( | vcl_ostream & | os | ) | const [virtual] |
Print class to os.
Implements vpdfl_pdf_base.
Reimplemented in vpdfl_pc_gaussian.
Definition at line 384 of file vpdfl_gaussian.cxx.
void vpdfl_gaussian::set | ( | const vnl_vector< double > & | mean, |
const vnl_vector< double > & | variance, | ||
const vnl_matrix< double > & | evecs, | ||
const vnl_vector< double > & | evals | ||
) |
Initialise.
WARNING - the error checking for inconsistent parameters is not foolproof.
Definition at line 128 of file vpdfl_gaussian.cxx.
void vpdfl_gaussian::set | ( | const vnl_vector< double > & | mean, |
const vnl_matrix< double > & | evecs, | ||
const vnl_vector< double > & | evals | ||
) | [virtual] |
Initialise safely.
Calculates the variance, and checks that the Eigenvalues are ordered and the Eigenvectors are unit normal
Turn off assertions to remove error checking.
This functions should only be used by builders.
Calculates the variance, and checks that the Eigenvalues are ordered and the Eigenvectors are unit normal Turn off assertions to remove error checking.
Reimplemented in vpdfl_pc_gaussian.
Definition at line 96 of file vpdfl_gaussian.cxx.
void vpdfl_gaussian::set | ( | const vnl_vector< double > & | mean, |
const vnl_matrix< double > & | covar, | ||
double | min_eval = 1e-6 |
||
) |
Initialise from mean and covariance matrix.
Note, eigenvectors computed from covar, and those corresponding to evals smaller than min_eval are truncated
This functions should only be used by builders.
Note, eigenvectors computed from covar, and those corresponding to evals smaller than min_eval are truncated
Definition at line 154 of file vpdfl_gaussian.cxx.
void vpdfl_gaussian::set_mean | ( | const vnl_vector< double > & | mean | ) |
Modify just the mean of the distribution.
This functions should only be used by builders.
Reimplemented from vpdfl_pdf_base.
Definition at line 144 of file vpdfl_gaussian.cxx.
void vpdfl_pdf_base::set_variance | ( | const vnl_vector< double > & | v | ) | [inline, protected, inherited] |
Definition at line 36 of file vpdfl_pdf_base.h.
const vnl_vector<double>& vpdfl_pdf_base::variance | ( | ) | const [inline, inherited] |
Variance of each dimension.
Definition at line 49 of file vpdfl_pdf_base.h.
short vpdfl_gaussian::version_no | ( | ) | const |
Version number for I/O.
Reimplemented from vpdfl_pdf_base.
Reimplemented in vpdfl_pc_gaussian.
Definition at line 331 of file vpdfl_gaussian.cxx.
vnl_vector<double> vpdfl_gaussian::b_ [mutable, protected] |
Workspace.
Usually the input vector after normalisation.
Definition at line 41 of file vpdfl_gaussian.h.
vnl_vector<double> vpdfl_gaussian::dx_ [mutable, protected] |
Workspace.
The difference between an input vector and the mean
Definition at line 38 of file vpdfl_gaussian.h.
vnl_vector<double> vpdfl_gaussian::evals_ [private] |
Definition at line 27 of file vpdfl_gaussian.h.
vnl_matrix<double> vpdfl_gaussian::evecs_ [private] |
Definition at line 26 of file vpdfl_gaussian.h.
double vpdfl_gaussian::log_k_ [private] |
Definition at line 28 of file vpdfl_gaussian.h.