TRACE("");
// obtain a sub-window for training
- // TODO: Move Mats outside from here
- MatScaleFeats patch_feats(1, p_num_of_feats, feature_size);
- MatScaleFeats temp(1, p_num_of_feats, feature_size);
get_features(input_rgb, input_gray, p_current_center.x, p_current_center.y,
p_windows_size.width, p_windows_size.height,
- p_current_scale).copyTo(patch_feats.scale(0));
- DEBUG_PRINT(patch_feats);
- fft.forward_window(patch_feats, model->xf, temp);
+ p_current_scale).copyTo(model->patch_feats.scale(0));
+ DEBUG_PRINT(model->patch_feats);
+ fft.forward_window(model->patch_feats, model->xf, model->temp);
DEBUG_PRINTM(model->xf);
model->model_xf = model->model_xf * (1. - interp_factor) + model->xf * interp_factor;
DEBUG_PRINTM(model->model_xf);
}
#endif
- model.reset(new Model(Fft::freq_size(feature_size), p_num_of_feats));
+ model.reset(new Model(feature_size, p_num_of_feats));
#ifndef BIG_BATCH
for (auto scale: p_scales)
Kcf_Tracker_Private &d;
class Model {
+ cv::Size feature_size;
uint height, width, n_feats;
public:
ComplexMat yf {height, width, 1};
ComplexMat model_xf {height, width, n_feats};
ComplexMat xf {height, width, n_feats};
- Model(cv::Size freq_size, uint _n_feats) : height(freq_size.height), width(freq_size.width), n_feats(_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;
MatScales k;
};
-
//helping functions
void scale_track(ThreadCtx &vars, cv::Mat &input_rgb, cv::Mat &input_gray);
cv::Mat get_subwindow(const cv::Mat &input, int cx, int cy, int size_x, int size_y) const;