himrep
DictionaryLearning.h
1 #include <deque>
2 #include <cstdio>
3 #include <sstream>
4 #include <vector>
5 #include <iostream>
6 #include <iostream>
7 #include <fstream>
8 #include <string>
9 #include <cmath>
10 
11 #include <opencv2/opencv.hpp>
12 
13 #include <yarp/sig/Vector.h>
14 #include <yarp/os/Bottle.h>
15 #include <yarp/os/Property.h>
16 #include <yarp/math/Math.h>
17 #include <yarp/os/Time.h>
18 
19 #include "SiftGPU_Extractor.h"
20 
21 
22 class DictionaryLearning
23 {
24  std::string dictionariesFilePath;
25  std::string codingType;
26  yarp::sig::Matrix dictionary;
27  yarp::sig::Matrix dictionaryT;
28  yarp::sig::Matrix A;
29  std::string group;
30 
31  int Knn;
32  double lambda;
33 
34  int dictionarySize;
35  int featuresize;
36  std::vector<double> rankScores;
37  std::vector<int> rankIndices;
38 
39  cv::KDTree kdtree;
40  int maxComparisons;
41 
42  vector<float> feat;
43 
44  std::string mappingType;
45 
46  bool powerNormalization;
47  double alpha;
48 
49  bool usePCA;
50  cv::PCA PCA;
51  int dimPCA;
52 
53  void subMatrix(const yarp::sig::Matrix& A, const yarp::sig::Vector& indexes, yarp::sig::Matrix& Atmp);
54  void max(const yarp::sig::Vector& x, double& maxVal, int& index);
55  bool read();
56  void printMatrixYarp(const yarp::sig::Matrix& A);
57  double customNorm(const yarp::sig::Vector &A,const yarp::sig::Vector &B);
58  void isBestElement(double score, int index, int numberOfBestPoints);
59  std::vector<std::vector<double> > readFeatures(std::string filePath);
60  void convert(yarp::sig::Matrix& matrix, cv::Mat& mat);
61  void convert(cv::Mat& mat,yarp::sig::Matrix& matrix);
62 
63  double additive_chisquare(const yarp::sig::Vector &x, const yarp::sig::Vector &y);
64  double gauss_chisquare(const yarp::sig::Vector &x, const yarp::sig::Vector &y);
65 
66 
67 public:
68 
69  DictionaryLearning(std::string dictionariesFilePath, std::string group, std::string codingM="SC", int K=5);
70  void computeSCCode(yarp::sig::Vector& feature, yarp::sig::Vector& descriptor);
71  void bestCodingEver(const yarp::sig::Vector& feature, yarp::sig::Vector& descriptor);
72  void bestCodingEver_ANN(yarp::sig::Vector& feature, yarp::sig::Vector& descriptor);
73 
74  void learnDictionary(std::string featureFile, int dictionarySize=512,bool usePCA=false, int dim=80);
75  bool saveDictionary(std::string filePath);
76  void maxPooling(std::vector<yarp::sig::Vector> & features, yarp::sig::Vector & code, vector<SiftGPU::SiftKeypoint> & keypoints, int pLevels=1, int imgW=320, int imgH=240);
77 
78  void avgPooling(std::vector<yarp::sig::Vector> & features, yarp::sig::Vector & code, vector<SiftGPU::SiftKeypoint> & keypoints, int pLevels=1, int imgW=320, int imgH=240);
79  void bow(yarp::sig::Vector & feature, yarp::sig::Vector & code);
80  ~DictionaryLearning();
81 };
82