+ constexpr static int p_num_of_feats = 31 + (m_use_color ? 3 : 0) + (m_use_cnfeat ? 10 : 0);
+ cv::Size feature_size;
+
+ std::unique_ptr<Kcf_Tracker_Private> d;
+
+ class Model {
+ cv::Size feature_size;
+ uint height, width, n_feats;
+ public:
+ ComplexMat yf {height, width, 1};
+ ComplexMat model_alphaf {height, width, 1};
+ ComplexMat model_alphaf_num {height, width, 1};
+ ComplexMat model_alphaf_den {height, width, 1};
+ ComplexMat model_xf {height, width, n_feats};
+ ComplexMat xf {height, width, n_feats};
+
+ // Temporary variables for trainig
+ MatScaleFeats patch_feats{1, n_feats, feature_size};
+ MatScaleFeats temp{1, n_feats, feature_size};
+
+
+
+ Model(cv::Size feature_size, uint _n_feats)
+ : feature_size(feature_size)
+ , height(Fft::freq_size(feature_size).height)
+ , width(Fft::freq_size(feature_size).width)
+ , n_feats(_n_feats) {}
+ };
+
+ std::unique_ptr<Model> model;
+
+ class GaussianCorrelation {
+ public:
+ GaussianCorrelation(uint num_scales, uint num_feats, cv::Size size)
+ : xf_sqr_norm(num_scales)
+ , xyf(Fft::freq_size(size), num_feats, num_scales)
+ , ifft_res(num_scales, size)
+ , k(num_scales, size)
+ {}
+ void operator()(ComplexMat &result, const ComplexMat &xf, const ComplexMat &yf, double sigma, bool auto_correlation, const KCF_Tracker &kcf);
+
+ private:
+ DynMem xf_sqr_norm;
+ DynMem yf_sqr_norm{1};
+ ComplexMat xyf;
+ MatScales ifft_res;
+ MatScales k;
+ };