]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blobdiff - src/fft.h
Do not use virtual methods in FFT class
[hercules2020/kcf.git] / src / fft.h
index 549c888d2d86f842b4347d6894704ce3910a230b..9f74de387fc6ff6e3d263bf2e305bbe0a0fa86d0 100644 (file)
--- a/src/fft.h
+++ b/src/fft.h
@@ -3,18 +3,41 @@
 #define FFT_H
 
 #include <opencv2/opencv.hpp>
-#include "complexmat.hpp"
 #include <vector>
+#include <cassert>
+#include "complexmat.hpp"
+
+#ifdef BIG_BATCH
+#define BIG_BATCH_MODE 1
+#define IF_BIG_BATCH(true, false) true
+#else
+#define BIG_BATCH_MODE 0
+#define IF_BIG_BATCH(true, false) false
+#endif
 
 class Fft
 {
 public:
-    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;
-    virtual cv::Mat inverse(const ComplexMat &input) = 0;
-    virtual ~Fft() = 0;
+    void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales);
+    void set_window(const MatDynMem &window);
+    void forward(const MatScales &real_input, ComplexMat &complex_result);
+    void forward_window(MatScaleFeats &patch_feats_in, ComplexMat &complex_result, MatScaleFeats &tmp);
+    void inverse(ComplexMat &complex_input, MatScales &real_result);
+
+    static cv::Size freq_size(cv::Size space_size)
+    {
+        cv::Size ret(space_size);
+#if defined(CUFFT) || defined(FFTW)
+        ret.width = space_size.width / 2 + 1;
+#endif
+        return ret;
+    }
+
+protected:
+    unsigned m_width, m_height, m_num_of_feats;
+#ifdef BIG_BATCH
+    unsigned m_num_of_scales;
+#endif
 };
 
 #endif // FFT_H