]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blob - src/fft.h
b165ef466fec20cbe1fabd55fbb60e8a73ab8d8e
[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 #else
18 #define BIG_BATCH_MODE 0
19 #endif
20
21 class Fft
22 {
23 public:
24     virtual void init(unsigned width, unsigned height,unsigned num_of_feats, unsigned num_of_scales) = 0;
25     virtual void set_window(const MatDynMem &window) = 0;
26     virtual void forward(const cv::Mat & real_input, ComplexMat & complex_result) = 0;
27     virtual void forward_window(MatDynMem &patch_feats_in, ComplexMat & complex_result, MatDynMem &tmp) = 0;
28     virtual void inverse(ComplexMat &  complex_input, MatDynMem & real_result) = 0;
29     virtual ~Fft() = 0;
30
31     static cv::Size freq_size(cv::Size space_size)
32     {
33         cv::Size ret(space_size);
34 #if defined(CUFFT) || defined(FFTW)
35         ret.width = space_size.width / 2 + 1;
36 #endif
37         return ret;
38     }
39
40 protected:
41     bool is_patch_feats_valid(const MatDynMem &patch_feats)
42     {
43         return patch_feats.dims == 3;
44                // && patch_feats.size[1] == width
45                // && patch_feats.size[2] == height
46     }
47 };
48
49 #endif // FFT_H