]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/commitdiff
Added number of scales to FFT init.
authorShanigen <vkaraf@gmail.com>
Tue, 20 Mar 2018 15:26:34 +0000 (16:26 +0100)
committerShanigen <vkaraf@gmail.com>
Tue, 20 Mar 2018 15:26:34 +0000 (16:26 +0100)
src/fft.h
src/fft_fftw.cpp
src/fft_fftw.h
src/fft_opencv.cpp
src/fft_opencv.h
src/kcf.cpp

index 78d1ed11b91ca00138d0e216441e65758ca0126c..549c888d2d86f842b4347d6894704ce3910a230b 100644 (file)
--- a/src/fft.h
+++ b/src/fft.h
@@ -9,7 +9,7 @@
 class Fft
 {
 public:
-    virtual void init(unsigned width, unsigned height,unsigned num_of_feats) = 0;
+    virtual void init(unsigned width, unsigned height,unsigned num_of_feats, unsigned num_of_scales) = 0;
     virtual void set_window(const cv::Mat &window) = 0;
     virtual ComplexMat forward(const cv::Mat &input) = 0;
     virtual ComplexMat forward_window(const std::vector<cv::Mat> &input) = 0;
index 7a57d954279fbd3c6297fb7ef18fec4c8608c7e3..26f7887efcf27b3ea8d424efc7f7d82669b58775 100644 (file)
@@ -24,11 +24,12 @@ Fftw::Fftw(int num_threads)
 {
 }
 
-void Fftw::init(unsigned width, unsigned height,unsigned num_of_feats)
+void Fftw::init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales)
 {
     m_width = width;
     m_height = height;
     m_num_of_feats = num_of_feats;
+    m_num_of_scales = num_of_scales;
 
 #if defined(ASYNC) || defined(OPENMP)
     fftw_init_threads();
@@ -67,15 +68,15 @@ void Fftw::init(unsigned width, unsigned height,unsigned num_of_feats)
                                           out, onembed, ostride, odist,
                                           FFTW_MEASURE);
     }
-
+    if(num_of_scales > 1)
     {
-        cv::Mat in_all = cv::Mat::zeros(m_height * 7*m_num_of_feats, m_width, CV_32F);
-        ComplexMat out_all(m_height, m_width / 2 + 1, 7*m_num_of_feats);
+        cv::Mat in_all = cv::Mat::zeros(m_height * (num_of_scales*m_num_of_feats), m_width, CV_32F);
+        ComplexMat out_all(m_height, m_width / 2 + 1, num_of_scales*m_num_of_feats);
         float *in = reinterpret_cast<float*>(in_all.data);
         fftwf_complex *out = reinterpret_cast<fftwf_complex*>(out_all.get_p_data());
         int rank = 2;
         int n[] = {(int)m_height, (int)m_width};
-        int howmany = 7*m_num_of_feats;
+        int howmany = num_of_scales*m_num_of_feats;
         int idist = m_height*m_width, odist = m_height*(m_width/2+1);
         int istride = 1, ostride = 1;
         int *inembed = NULL, *onembed = NULL;
index 7b75d190d2166b82715d76ba9f4a5b750f3d4517..12ae4df3828e2d4d650a694b97c46352d83747ff 100644 (file)
@@ -19,7 +19,7 @@ class Fftw : public Fft
 public:
     Fftw();
     Fftw(int num_of_threads);
-    void init(unsigned width, unsigned height,unsigned num_of_feats) override;
+    void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales) override;
     void set_window(const cv::Mat &window) override;
     ComplexMat forward(const cv::Mat &input) override;
     ComplexMat forward_window(const std::vector<cv::Mat> &input) override;
@@ -27,7 +27,7 @@ public:
     ~Fftw() override;
 private:
     unsigned m_num_threads = 6;
-    unsigned m_width, m_height, m_num_of_feats;
+    unsigned m_width, m_height, m_num_of_feats,m_num_of_scales;
     cv::Mat m_window;
     fftwf_plan plan_f, plan_fw, plan_fw_all_scales, plan_i_features, plan_i_1ch;
 };
index 7a653180386ed1b2efaeb9b03c0012841b8cef33..a8aad1f26488b41842789434eadb8c1572e3c44a 100644 (file)
@@ -1,11 +1,12 @@
 
 #include "fft_opencv.h"
 
-void init(unsigned width, unsigned height,unsigned num_of_feats)
+void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales)
 {
     (void)width;
     (void)height;
     (void)num_of_feats;
+    (void)num_of_scales;
     std::cout << "FFT: OpenCV" << std::endl;
 }
 
index 4f1d752d81aa9cae16baea6b1378750b735fea6a..50e30c563fca8b38ec98eb926f135e4f274421c0 100644 (file)
@@ -7,7 +7,7 @@
 class FftOpencv : public Fft
 {
 public:
-    void init(unsigned width, unsigned height,unsigned num_of_feats) override;
+    void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales) override;
     void set_window(const cv::Mat &window) override;
     ComplexMat forward(const cv::Mat &input) override;
     ComplexMat forward_window(const std::vector<cv::Mat> &input) override;
index 90fe198885280e7b263f5b5b6fcad650374c2e9b..4bca69cb8086eab016d527d9a0c4f22e0453ec7c 100644 (file)
@@ -114,7 +114,7 @@ void KCF_Tracker::init(cv::Mat &img, const cv::Rect & bbox)
     num_of_feats = 31;
     if(m_use_color) num_of_feats += 3;
     if(m_use_cnfeat) num_of_feats += 10;
-    fft.init(p_windows_size[0]/p_cell_size, p_windows_size[1]/p_cell_size,num_of_feats);
+    fft.init(p_windows_size[0]/p_cell_size, p_windows_size[1]/p_cell_size, num_of_feats, p_scales.size());
     p_yf = fft.forward(gaussian_shaped_labels(p_output_sigma, p_windows_size[0]/p_cell_size, p_windows_size[1]/p_cell_size));
     fft.set_window(cosine_window_function(p_windows_size[0]/p_cell_size, p_windows_size[1]/p_cell_size));