Direct Graphical Models  v.1.7.0
PDFGaussian.cpp
1 #include "PDFGaussian.h"
2 
3 namespace DirectGraphicalModels
4 {
6 {
7  m_mu = 0;
8  m_sigma2 = 0;
9 }
10 
11 void CPDFGaussian::addPoint(Scalar point)
12 {
13  if (m_nPoints == 0) m_mu = point[0];
14  else {
15  long double a = static_cast<double>(m_nPoints) / (m_nPoints + 1.0);
16  m_mu = a * m_mu + (1.0 - a) * point[0];
17 
18  double cr = (point[0] - m_mu) * (point[0] - m_mu);
19  m_sigma2 = cr + a * (m_sigma2 - cr);
20  }
21  m_nPoints++;
22 }
23 
24 double CPDFGaussian::getDensity(Scalar point)
25 {
26  double res = exp(- 0.5f * (point[0] - m_mu) * (point[0] - m_mu) / m_sigma2) /
27  (sqrt(2.0f * m_sigma2 * Pi));
28 
29  return res;
30 }
31 
32 void CPDFGaussian::saveFile(FILE *pFile) const
33 {
34  fwrite(&m_mu, sizeof(double), 1, pFile);
35  fwrite(&m_sigma2, sizeof(double), 1, pFile);
36 }
37 
38 void CPDFGaussian::loadFile(FILE *pFile)
39 {
40  fread(&m_mu, sizeof(double), 1, pFile);
41  fread(&m_sigma2, sizeof(double), 1, pFile);
42 }
43 }
virtual void addPoint(Scalar point)
Adds a sample point for PDF estimation.
Definition: PDFGaussian.cpp:11
virtual void reset(void)
Resets class variables.
Definition: PDFGaussian.cpp:5
long m_nPoints
The number of samples, added with the addPoint() function.
Definition: IPDF.h:54
virtual void loadFile(FILE *pFile)
Loads the random model from the file.
Definition: PDFGaussian.cpp:38
virtual double getDensity(Scalar point)
Returns the probability density value for the argument point.
Definition: PDFGaussian.cpp:24
virtual void saveFile(FILE *pFile) const
Saves the random model into the file.
Definition: PDFGaussian.cpp:32