]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blob - src/threadctx.hpp
2faceb1e1d5805bef0dfed6ba392b8a56c85b81d
[hercules2020/kcf.git] / src / threadctx.hpp
1 #ifndef SCALE_VARS_HPP
2 #define SCALE_VARS_HPP
3
4 #include <future>
5 #include "dynmem.hpp"
6 #include "kcf.h"
7
8 #ifdef CUFFT
9 #include "complexmat.cuh"
10 #else
11 #include "complexmat.hpp"
12 #endif
13
14 class KCF_Tracker;
15
16 struct ThreadCtx {
17   public:
18     ThreadCtx(cv::Size roi, uint num_features
19 #ifdef BIG_BATCH
20               , uint num_scales
21 #else
22               , double scale
23 #endif
24              )
25         : roi(roi)
26         , num_features(num_features)
27         , num_scales(IF_BIG_BATCH(num_scales, 1))
28 #ifndef BIG_BATCH
29         , scale(scale)
30 #endif
31     {}
32
33     ThreadCtx(ThreadCtx &&) = default;
34
35     void track(const KCF_Tracker &kcf, cv::Mat &input_rgb, cv::Mat &input_gray);
36 private:
37     cv::Size roi;
38     uint num_features;
39     uint num_scales;
40     cv::Size freq_size = Fft::freq_size(roi);
41
42     MatScaleFeats patch_feats{num_scales, num_features, roi};
43     MatScaleFeats temp{num_scales, num_features, roi};
44
45     KCF_Tracker::GaussianCorrelation gaussian_correlation{num_scales, num_features, roi};
46
47     MatScales ifft2_res{num_scales, roi};
48
49     ComplexMat zf{uint(freq_size.height), uint(freq_size.width), num_features, num_scales};
50     ComplexMat kzf{uint(freq_size.height), uint(freq_size.width), 1, num_scales};
51
52 public:
53 #ifdef ASYNC
54     std::future<void> async_res;
55 #endif
56
57     MatScales response{num_scales, roi};
58
59     struct Max {
60         cv::Point2i loc;
61         double response;
62     };
63
64 #ifdef BIG_BATCH
65     std::vector<Max> max = std::vector<Max>(num_scales);
66 #else
67     Max max;
68     const double scale;
69 #endif
70 };
71
72 #endif // SCALE_VARS_HPP