]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blob - src/fft.h
Prepare for rotation branch merge
[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
9 #ifdef CUFFT
10     #include "complexmat.cuh"
11 #else
12     #include "complexmat.hpp"
13 #endif
14
15 #ifdef BIG_BATCH
16 #define BIG_BATCH_MODE 1
17 #define IF_BIG_BATCH(true, false) true
18 #else
19 #define BIG_BATCH_MODE 0
20 #define IF_BIG_BATCH(true, false) false
21 #endif
22
23 class Fft
24 {
25 public:
26     virtual void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales);
27     virtual void set_window(const MatDynMem &window);
28     virtual void forward(const MatScales &real_input, ComplexMat &complex_result);
29     virtual void forward_window(MatScaleFeats &patch_feats_in, ComplexMat &complex_result, MatScaleFeats &tmp);
30     virtual void inverse(ComplexMat &complex_input, MatScales &real_result);
31     virtual ~Fft() = 0;
32
33     static cv::Size freq_size(cv::Size space_size)
34     {
35         cv::Size ret(space_size);
36 #if defined(CUFFT) || defined(FFTW)
37         ret.width = space_size.width / 2 + 1;
38 #endif
39         return ret;
40     }
41
42 protected:
43     unsigned m_width, m_height, m_num_of_feats;
44 #ifdef BIG_BATCH
45     unsigned m_num_of_scales;
46 #endif
47 };
48
49 #endif // FFT_H