Direct Graphical Models  v.1.7.0
FeaturesConcatenator.h
1 // Features Concatenator base abstract class
2 // Written by Sergey Kosov in 2015 for Project X
3 #pragma once
4 
5 #include "types.h"
6 #include "macroses.h"
7 
8 namespace DirectGraphicalModels
9 {
10  // ============================= Samples Concatenatenator Class =============================
17  {
18  public:
23  DllExport CFeaturesConcatenator(word nFeatures) : m_nFeatures(nFeatures) {}
24  DllExport virtual ~CFeaturesConcatenator(void) {}
25 
30  DllExport virtual word getNumFeatures(void) const = 0;
37  DllExport virtual void concatenate(const Mat &featureVector1, const Mat &featureVector2, Mat &dst) const = 0;
38 
39 
40  protected:
41  word m_nFeatures;
42  };
43 
44 
45  // ============================= Simple Samples Concatenatenator Class =============================
53  {
54  public:
59  DllExport CSimpleFeaturesConcatenator(word nFeatures) : CFeaturesConcatenator(nFeatures) {}
60  DllExport virtual ~CSimpleFeaturesConcatenator(void) {}
61  DllExport virtual word getNumFeatures(void) const { return 2 * m_nFeatures; }
62  DllExport virtual void concatenate(const Mat &featureVector1, const Mat &featureVector2, Mat &dst) const {
63  // Assertions
64  DGM_ASSERT(featureVector1.size() == featureVector2.size());
65  DGM_ASSERT(featureVector1.type() == featureVector2.type());
66  // DGM_ASSERT ( dst )
67 
68  for (word f = 0; f < m_nFeatures; f++) {
69  dst.at<byte>(2 * f , 0) = featureVector1.at<byte>(f, 0);
70  dst.at<byte>(2 * f + 1, 0) = featureVector2.at<byte>(f, 0);
71  }
72  }
73  };
74 
75 
76  // ============================= Simple Samples Concatenatenator Class =============================
84  {
85  public:
90  DllExport CDiffFeaturesConcatenator(word nFeatures) : CFeaturesConcatenator(nFeatures) {}
91  DllExport virtual ~CDiffFeaturesConcatenator(void) {}
92  DllExport virtual word getNumFeatures(void) const { return 1 * m_nFeatures; }
93  DllExport virtual void concatenate(const Mat &featureVector1, const Mat &featureVector2, Mat &dst) const {
94  // Assertions
95  DGM_ASSERT(featureVector1.size() == featureVector2.size());
96  DGM_ASSERT(featureVector1.type() == featureVector2.type());
97  // DGM_ASSERT ( dst )
98 
99  for (word f = 0; f < m_nFeatures; f++) {
100  dst.at<byte>(1 * f, 0) = static_cast<byte>(MIN(255, MAX(0, 127.5 + 1.0 * featureVector1.at<byte>(f, 0) - 1.0 * featureVector2.at<byte>(f, 0))));
101  }
102  }
103  };
104 
105 }
virtual word getNumFeatures(void) const
Returns the length of the concatenated feature vector.
virtual word getNumFeatures(void) const
Returns the length of the concatenated feature vector.
virtual void concatenate(const Mat &featureVector1, const Mat &featureVector2, Mat &dst) const =0
Concatenated two feature vectors.
word m_nFeatures
Number of features in the concatenated feature vector.
CFeaturesConcatenator(word nFeatures)
Constructor.
Features concatenator base abstract class.
virtual void concatenate(const Mat &featureVector1, const Mat &featureVector2, Mat &dst) const
Concatenated two feature vectors.
Difference features concatenator class.
virtual word getNumFeatures(void) const =0
Returns the length of the concatenated feature vector.
virtual void concatenate(const Mat &featureVector1, const Mat &featureVector2, Mat &dst) const
Concatenated two feature vectors.