派生自 Algorithm/baseDetector

sunty
2022-03-21 d0a24896f95b4e060011852f80048ebfb0bf5f55
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#ifndef NN_MATCHING_H
#define NN_MATCHING_H
 
#include "dataType.h"
 
#include <map>
 
//A tool to calculate distance;
class NearNeighborDisMetric{
public:
    enum METRIC_TYPE{euclidean=1, cosine};
    NearNeighborDisMetric(METRIC_TYPE metric,
            float matching_threshold,
            int budget);
    ~NearNeighborDisMetric();
    DYNAMICM distance(const FEATURESS& features, const std::vector<uint64_t> &targets);
    DYNAMICM cos_distance(const FEATURESS& features, std::map<uint64_t, FEATURESS> cos_samples);
    //    void partial_fit(FEATURESS& features, std::vector<int> targets, std::vector<int> active_targets);
    void partial_fit(std::vector<TRACKER_DATA>& tid_feats, std::vector<uint64_t>& active_targets);
    float mating_threshold;
 
private:
    typedef Eigen::VectorXf (NearNeighborDisMetric::*PTRFUN)(const FEATURESS&, const FEATURESS&);
    Eigen::VectorXf _nncosine_distance(const FEATURESS& x, const FEATURESS& y);
    Eigen::VectorXf _nneuclidean_distance(const FEATURESS& x, const FEATURESS& y);
 
    Eigen::MatrixXf _pdist(const FEATURESS& x, const FEATURESS& y);
    Eigen::MatrixXf _cosine_distance(const FEATURESS & a, const FEATURESS& b, bool data_is_normalized = false);
private:
    PTRFUN _metric;
    int budget;
    std::map<uint64_t, FEATURESS > samples;
};
 
#endif // NN_MATCHING_H