Direct Graphical Models  v.1.7.0
CMat.cpp
1 #include "CMat.h"
2 #include "PriorEdge.h"
3 #include "macroses.h"
4 
5 namespace DirectGraphicalModels
6 {
7 // Constructor
8 CCMat::CCMat(byte nStates)
9 {
11 }
12 
13 // Destructor
15 {
16  delete m_pConfusionMatrix;
17 }
18 
19 void CCMat::reset(void)
20 {
22 }
23 
24 void CCMat::save(const std::string &path, const std::string &name, short idx) const
25 {
26  m_pConfusionMatrix->save(path, name.empty() ? "CMat" : name, idx);
27 }
28 
29 void CCMat::load(const std::string &path, const std::string &name, short idx)
30 {
31  m_pConfusionMatrix->load(path, name.empty() ? "CMat" : name, idx);
32 }
33 
34 void CCMat::estimate(const Mat &gt, const Mat &solution, const Mat &mask)
35 {
36  if (mask.empty()) DGM_ELEMENTWISE2<CCMat, &CCMat::estimate>(*this, gt, solution);
37  else DGM_ELEMENTWISE2<CCMat, &CCMat::estimate>(*this, gt, solution, mask);
38 }
39 
40 void CCMat::estimate(byte gt, byte solution)
41 {
42  m_pConfusionMatrix->addEdgeGroundTruth(solution, gt);
43 }
44 
45 Mat CCMat::getConfusionMatrix(void) const
46 {
47  return m_pConfusionMatrix->getPrior(100.0f);
48 }
49 
50 float CCMat::getAccuracy(void) const
51 {
52  float res = 0;
53  Mat cMat = getConfusionMatrix();
54  for (byte s = 0; s < m_pConfusionMatrix->getNumStates(); s++)
55  res += cMat.at<float>(s, s);
56  return res;
57 }
58 
59 // Old version
60 /*void CCMat::print(char *fileName, int shiftBase)
61 {
62  FILE *pFile;
63  float val;
64  long acc = 0; // average accuracy
65  long accb = 0; // base level accuracy
66  long acco = 0; // occlusion level accuaray
67  long n = 0; // number of all counted samples
68  long nb = 0; // number of counted samples for the base layer
69  long no = 0; // number of counted samples for the occlusion layer
70  int nX, nY;
71  char str[8];
72 
73  for (nX = 0; nX < m_nStates; nX++)
74  for (nY = 0; nY < m_nStates; nY++) {
75  if ((nX < shiftBase) && (nY < shiftBase)) nb += m_pCMat[nX * m_nStates + nY];
76  else no += m_pCMat[nX * m_nStates + nY];
77  } // nY
78  n = nb + no;
79 
80  pFile = fopen(fileName, "w+");
81  fprintf(pFile, "Confusion Matrix:\n");
82  fprintf(pFile, "-----------------\n");
83  fprintf(pFile, "R\\C\t");
84  for (nX = 0; nX < m_nStates; nX++) fprintf(pFile, "%d\t", nX); fprintf(pFile, "Comp\n");
85  for (nY = 0; nY < m_nStates; nY++) {
86  fprintf(pFile, "%d\t", nY);
87  if (nY < shiftBase) accb += m_pCMat[nY * m_nStates + nY];
88  else acco += m_pCMat[nY * m_nStates + nY];
89  long comp = 0;
90  for (nX = 0; nX < m_nStates; nX++) {
91  comp += m_pCMat[nX * m_nStates + nY]; // Completness
92  if (n == 0) val = 0;
93  else val = 100 * static_cast<float>(m_pCMat[nX * m_nStates + nY]) / n;
94  if (val == 0) sprintf(str, "--.--"); else
95  if (val < 10) sprintf(str, " %.2f%%", val); else
96  sprintf(str, "%.2f%%", val);
97  fprintf(pFile, "%s\t", str);
98  } // nY
99  if (comp == 0) val = 0;
100  else val = 100 * static_cast<float>(m_pCMat[nY * m_nStates + nY]) / comp;
101  if (val == 0) sprintf(str, "--.--"); else
102  if (val < 10) sprintf(str, " %.2f%%", val); else
103  sprintf(str, "%.2f%%", val);
104  fprintf(pFile, "%s\t", str);
105 
106  fprintf(pFile, "\n");
107  } // nX
108  fprintf(pFile, "Corr\t");
109  for (nX = 0; nX < m_nStates; nX++) {
110  long corr = 0;
111  for (nY = 0; nY < m_nStates; nY++)
112  corr += m_pCMat[nX * m_nStates + nY];
113  if (corr == 0) val = 0;
114  else val = 100 * static_cast<float>(m_pCMat[nX * m_nStates + nX]) / corr;
115  if (val == 0) sprintf(str, "--.--"); else
116  if (val < 10) sprintf(str, " %.2f%%", val); else
117  sprintf(str, "%.2f%%", val);
118  fprintf(pFile, "%s\t", str);
119  } // nX
120  fprintf(pFile, "\n");
121 
122  acc = accb + acco;
123 
124  fprintf(pFile, "\nOverall accuracy:\n");
125  fprintf(pFile, "-----------------\n");
126  fprintf(pFile, "%.2f%% (base: %.2f%%) (occl: %.2f%%)\n", 100 * static_cast<double>(acc) / n, 100 * static_cast<double>(accb) / nb, 100 * static_cast<double>(acco) / no);
127 
128 
129  printf("\nOverall accuracy:\n");
130  printf("-----------------\n");
131  printf("%.2f%% (base: %.2f%%) (occl: %.2f%%)\n", 100 * static_cast<double>(acc) / n, 100 * static_cast<double>(accb) / nb, 100 * static_cast<double>(acco) / no);
132 
133  fclose(pFile);
134 }
135 
136 void CCMat::getAccuracy(int shiftBase, double *base, double *occlusion, double *overall)
137 {
138  long accb = 0; // base level accuracy
139  long acco = 0; // occlusion level accuaray
140  long nb = 0; // number of counted samples for the base layer
141  long no = 0; // number of counted samples for the occlusion layer
142  int nX, nY;
143 
144  for (nX = 0; nX < m_nStates; nX++)
145  for (nY = 0; nY < m_nStates; nY++) {
146  if ((nX < shiftBase) && (nY < shiftBase)) nb += m_pCMat[nX * m_nStates + nY];
147  else no += m_pCMat[nX * m_nStates + nY];
148  } // nY
149 
150  for (nY = 0; nY < m_nStates; nY++) {
151  if (nY < shiftBase) accb += m_pCMat[nY * m_nStates + nY];
152  else acco += m_pCMat[nY * m_nStates + nY];
153  } // nX
154 
155  if (nb != 0) *base = static_cast<double>(accb) / nb; else *base = 0;
156  if (no != 0) *occlusion = static_cast<double>(acco) / no; else *occlusion = 0;
157  *overall = (*base + *occlusion) / 2;
158 
159 }
160 */
161 }
float getAccuracy(void) const
Returns the overall classification accuracy.
Definition: CMat.cpp:50
void load(const std::string &path, const std::string &name=std::string(), short idx=-1)
Loads the confusion matrix.
Definition: CMat.cpp:29
void save(const std::string &path, const std::string &name=std::string(), short idx=-1) const
Saves the confusion matrix.
Definition: CMat.cpp:24
void estimate(const Mat &gt, const Mat &solution, const Mat &mask=Mat())
Estimates the confusion matrix.
Definition: CMat.cpp:34
void addEdgeGroundTruth(byte gt1, byte gt2)
Adds the groud-truth value to the co-occurance histogram matrix.
Definition: PriorEdge.cpp:6
virtual void load(const std::string &path, const std::string &name=std::string(), short idx=-1)
Loads the training data.
void reset(void)
Resets class variables.
Definition: Prior.cpp:19
CPriorEdge * m_pConfusionMatrix
COnfusion matrix container.
Definition: CMat.h:84
virtual ~CCMat(void)
Definition: CMat.cpp:14
Mat getPrior(float weight=1.0f) const
Returns the prior probabilies.
Definition: Prior.cpp:24
Mat getConfusionMatrix(void) const
Returns the confusion matrix.
Definition: CMat.cpp:45
virtual void save(const std::string &path, const std::string &name=std::string(), short idx=-1) const
Saves the training data.
Edge prior probability estimation class.
Definition: PriorEdge.h:38
void reset(void)
Resets class variables.
Definition: CMat.cpp:19
byte getNumStates(void) const
Returns number of states (classes)
CCMat(byte nStates)
Constructor.
Definition: CMat.cpp:8