]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blob - src/fft.h
Do not use virtual methods in FFT class
[hercules2020/kcf.git] / src / fft.h
1
2 #ifndef FFT_H
3 #define FFT_H
4
5 #include <opencv2/opencv.hpp>
6 #include <vector>
7 #include <cassert>
8 #include "complexmat.hpp"
9
10 #ifdef BIG_BATCH
11 #define BIG_BATCH_MODE 1
12 #define IF_BIG_BATCH(true, false) true
13 #else
14 #define BIG_BATCH_MODE 0
15 #define IF_BIG_BATCH(true, false) false
16 #endif
17
18 class Fft
19 {
20 public:
21     void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales);
22     void set_window(const MatDynMem &window);
23     void forward(const MatScales &real_input, ComplexMat &complex_result);
24     void forward_window(MatScaleFeats &patch_feats_in, ComplexMat &complex_result, MatScaleFeats &tmp);
25     void inverse(ComplexMat &complex_input, MatScales &real_result);
26
27     static cv::Size freq_size(cv::Size space_size)
28     {
29         cv::Size ret(space_size);
30 #if defined(CUFFT) || defined(FFTW)
31         ret.width = space_size.width / 2 + 1;
32 #endif
33         return ret;
34     }
35
36 protected:
37     unsigned m_width, m_height, m_num_of_feats;
38 #ifdef BIG_BATCH
39     unsigned m_num_of_scales;
40 #endif
41 };
42
43 #endif // FFT_H