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