11 #include <opencv2/opencv.hpp>
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>
19 #include "SiftGPU_Extractor.h"
22 class DictionaryLearning
24 std::string dictionariesFilePath;
25 std::string codingType;
26 yarp::sig::Matrix dictionary;
27 yarp::sig::Matrix dictionaryT;
36 std::vector<double> rankScores;
37 std::vector<int> rankIndices;
44 std::string mappingType;
46 bool powerNormalization;
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);
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);
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);
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);
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);
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();