VAT  3.0
Video Analysis Tool
apparienceModelLearning.h
1 #ifndef APPARIENCEMODELLEARNING_H
2 #define APPARIENCEMODELLEARNING_H
3 
4 #include <opencv/cv.h>
5 #include <opencv/highgui.h>
6 #include "opencv2/opencv.hpp"
7 #include <QString>
8 
9 #include <src/footballConstants.h>
10 
11 enum typeDistanceMetric{
12  Single,
13  Complete,
14  Average,
15  Weighted,
16  Median
17 };
18 
19 typedef struct sampleAppModel sampleAppModel;
21 {
22  double L;
23  double U;
24  double V;
25  soccerClass clase;
26 };
27 
28 typedef struct appModel appModel;
29 struct appModel
30 {
31  QString name;//Name of Model
32  cv::Ptr<cv::ml::EM> emAl; //EM Algorithm
33  bool isTrained; //Flag que indica si la clase esta entrenada
34  typeCluster typeTrained;
35  std::map< soccerClass, unsigned long> nSamples; //Enumera la cantidad de muestras actuales en cada Modelo
36  unsigned long pSamples; //Cantidad de muestras con la que se entreno el Modelo
37  double probability; //Confiabilidad del Modelo
38  std::vector<sampleAppModel> samples; //Muestras actuales por cada Clase
39 
40  clusters2D_BOF ClustersUV; //Meta-Prototypes Chrominancy
41  clusters3D_BOF ClustersLUV; //Meta-Prototypes LUV
42  clusters1D_BOF ClustersL; //Meta-Prototypes Luminancy
43 
44 };
45 
47 {
48 public:
50  apparienceModelLearning(QString name, int cls = 15, double bottomTh=0.0, double topTh=100.0, typeDistanceMetric type = Complete);
52 
53 
54  bool trainAll();
55  void resetTrain();
56  void generateMetaPrototypesFor3DCluster(int n_clusters);
57  void generateMetaPrototypesFor2DCluster(int n_clusters);
58  void generateMetaPrototypesFor1DCluster(int n_clusters);
59  void updateMode();
60  void saveModel(QString directory);
61  bool readChroma_Model(QString filePath);
62  bool readLuma_Model(QString filePath);
63  bool readLuv_Model(QString filePath);
64 
65 
66  //With these methods we obtain Mixture of Gaussians Parameters
67  bool getWeights(cv::Mat &mat);
68  bool getMeans(cv::Mat &mat);
69  bool getCovs(std::vector< cv::Mat > &vmat);
70  QString getName();
71  cv::Ptr<cv::ml::EM> getEM();
72  bool getSamplesFromCSV(QString filePath, int part, soccerClass cl);
73 
74  clusters2D_BOF getClusters2D_BOF();
75  clusters1D_BOF getClusters1D_BOF();
76  clusters3D_BOF getClusters3D_BOF();
77 
78  static cv::Vec3d valueLUVConvert(cv::Vec3d val);
79  static cv::Vec2d valueUVConvert(cv::Vec2d val);
80  static cv::Scalar valueLUVConvertInv(cv::Scalar val);
81 
82  //Histogram Computation
83  double* create1DFeature_Histogram(soccerClass clase, bool showH = false);
84  double* create2DFeature_Histogram(soccerClass clase, bool showH = false);
85  double* create3DFeature_Histogram(soccerClass clase, bool showH = false);
86 
87  //Distance Measures
88  static double BhattacharryaDistance(double *h1, double *h2, int size);
89  static double chiSquare(double *h1, double *h2, int size);
90  static double intersectionDist(double *h1, double *h2, int size);
91  static double correlationDist(double *h1, double *h2, int size);
92 
93  static bool evaluatePixeltoCluster(cv::Vec2d value, std::vector < cv::Vec2d > cluster,int type);
94  static bool evaluatePixeltoCluster(cv::Vec3d value, std::vector < cv::Vec3d > cluster, int type);
95  static bool evaluatePixeltoCluster(double value, std::vector < double > cluster,int type);
96  static void showHistogram(int *count, const clusters2D_BOF &clusters, QString name = "UNKNOWN");
97  static void showHistogram(int *count, const clusters3D_BOF &clusters, QString name = "UNKNOWN");
98  static void showHistogram(int *count, const clusters1D_BOF &clusters, QString name = "UNKNOWN");
99  static void printClusters(clusters2D_BOF clusters);
100  static void printClusters(clusters1D_BOF clusters);
101  static void printClusters(clusters3D_BOF clusters);
102  static bool filterByLuma(double l, double bottomTh, double topTh);
103 
104 
105 private:
106 
107  bool trainEM(typeCluster typeCl);
108 
109  void addSamples();
110  void eraseSamples(unsigned long init, unsigned long end);
111 
112  //Heriarquical Clustering
113  double calcDist(cv::Vec2d p1, cv::Vec2d p2);
114  cv::Point findMinDist(cv::Mat proximityMat);
115  double distNewCluster(cv::Point rsPoint, int k, cv::Mat distanceMat, typeDistanceMetric type, int nr, int ns);
116 
117  int n_clusters;
118  int n_parametersCSV;
119 
120  appModel model;
121 
122  double m_topTh;
123  double m_bottomTh;
124 
125  typeDistanceMetric dMetric;
126 
127  //Almacena muestras de jugador de la clase especificada en una variable tipo cv::map
128  unsigned int samplesToMap(cv::Mat &mat, soccerClass clase, typeCluster type);
129 
130  unsigned int countAllSamples();
131 
132 };
133 
134 #endif // APPARIENCEMODELLEARNING_H
Definition: apparienceModelLearning.h:46
Definition: apparienceModelLearning.h:29
Definition: apparienceModelLearning.h:20