Direct Graphical Models  v.1.7.0
PDFHistogram.cpp
1 #include "PDFHistogram.h"
2 
3 namespace DirectGraphicalModels
4 {
5 // Constructor
7 {
8  memset(m_data, 0, 256 * sizeof(long));
9 }
10 
11 // Destructor
13 { }
14 
16 {
17  memset(m_data, 0, 256 * sizeof(long));
18  m_nPoints = 0;
19 }
20 
21 void CPDFHistogram::addPoint(Scalar point)
22 {
23  byte i = static_cast<byte>(MIN(255, MAX(0, point[0])));
24  m_data[i]++;
25  m_nPoints++;
26 }
27 
28 double CPDFHistogram::getDensity(Scalar point)
29 {
30  byte i = static_cast<byte>(MIN(255, MAX(0, point[0])));
31  return m_nPoints ? static_cast<double>(m_data[i]) / m_nPoints : 0;
32 }
33 
34 void CPDFHistogram::smooth(int nIt)
35 {
36  long tmp[256];
37  for (int iter = 0; iter < nIt; iter++) {
38  memcpy(tmp, m_data, 256 * sizeof(long));
39  for (int i = 1; i < 255; i++) m_data[i] = static_cast<long>(0.25 * (tmp[i-1] + 2*tmp[i] + tmp[i+1]));
40  } // iterations
41 }
42 
43 void CPDFHistogram::saveFile(FILE *pFile) const
44 {
45  fwrite(&m_data, sizeof(long), 256, pFile);
46  fwrite(&m_nPoints, sizeof(long), 1, pFile);
47 }
48 
49 void CPDFHistogram::loadFile(FILE *pFile)
50 {
51  fread(&m_data, sizeof(long), 256, pFile);
52  fread(&m_nPoints, sizeof(long), 1, pFile);
53 }
54 
55 }
virtual void addPoint(Scalar point)
Adds a sample point for PDF estimation.
long m_nPoints
The number of samples, added with the addPoint() function.
Definition: IPDF.h:54
void smooth(int nIt=1)
Performs the gaussian smoothing on the histogram.
virtual void loadFile(FILE *pFile)
Loads the random model from the file.
virtual void saveFile(FILE *pFile) const
Saves the random model into the file.
Interface class for Probability Density Function (PDF)
Definition: IPDF.h:16
virtual double getDensity(Scalar point)
Returns the probability density value for the argument point.
virtual void reset(void)
Resets class variables.