Go to the documentation of this file.00001 #ifndef HASH_H
00002 #define HASH_H
00003
00004 #include "opencv2/core/core.hpp"
00005 #include "opencv2/features2d/features2d.hpp"
00006 #include <Eigen/Eigen>
00007 #include <Eigen/Dense>
00008
00009 using namespace std;
00010 using namespace cv;
00011 using namespace Eigen;
00012
00013 namespace haloc
00014 {
00015
00016 class Hash
00017 {
00018
00019 public:
00020
00021
00022 Hash();
00023
00024 struct Params
00025 {
00026
00027 Params();
00028
00029
00030 int num_proj;
00031
00032
00033 static const int DEFAULT_NUM_PROJ = 2;
00034 };
00035
00036
00037 void setParams(const Params& params);
00038
00039
00040 bool isInitialized();
00041
00042
00043 inline Params params() const { return params_; }
00044
00045
00046 void init(Mat desc);
00047
00048
00049 vector<float> getHash(Mat desc);
00050
00051
00052 float match(vector<float> hash_1, vector<float> hash_2);
00053
00054 private:
00055
00056
00057 void initProjections(int desc_size);
00058
00059
00060 vector<float> compute_random_vector(uint seed, int size);
00061
00062
00063 vector<float> unit_vector(vector<float> x);
00064
00065
00066 Params params_;
00067 vector< vector<float> > r_;
00068 int h_size_;
00069 bool initialized_;
00070 };
00071
00072 }
00073
00074 #endif // HASH_H