]> rtime.felk.cvut.cz Git - hercules2020/kcf.git/blob - src/fft_opencv.cpp
Remove debug printf
[hercules2020/kcf.git] / src / fft_opencv.cpp
1 #include "fft_opencv.h"
2
3 void FftOpencv::init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales)
4 {
5     Fft::init(width, height, num_of_feats, num_of_scales);
6     std::cout << "FFT: OpenCV" << std::endl;
7 }
8
9 void FftOpencv::set_window(const MatDynMem &window)
10 {
11     m_window = window;
12 }
13
14 void FftOpencv::forward(const MatScales &real_input, ComplexMat &complex_result)
15 {
16     Fft::forward(real_input, complex_result);
17
18     cv::Mat tmp;
19     cv::dft(real_input.plane(0), tmp, cv::DFT_COMPLEX_OUTPUT);
20     complex_result = ComplexMat(tmp);
21 }
22
23 void FftOpencv::forward_window(MatScaleFeats &feat, ComplexMat &complex_result, MatScaleFeats &temp)
24 {
25     Fft::forward_window(feat, complex_result, temp);
26
27     for (uint i = 0; i < uint(feat.size[0]); ++i) {
28         for (uint j = 0; j < uint(feat.size[1]); ++j) {
29             cv::Mat complex_res;
30             cv::Mat channel = feat.plane(i, j);
31             cv::dft(channel.mul(m_window), complex_res, cv::DFT_COMPLEX_OUTPUT);
32             complex_result.set_channel(int(j), complex_res);
33         }
34     }
35 }
36
37 void FftOpencv::inverse(ComplexMat &  complex_input, MatScales & real_result)
38 {
39     Fft::inverse(complex_input, real_result);
40
41     std::vector<cv::Mat> mat_channels = complex_input.to_cv_mat_vector();
42     for (uint i = 0; i < uint(complex_input.n_channels); ++i) {
43         cv::dft(mat_channels[i], real_result.plane(i), cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT | cv::DFT_SCALE);
44     }
45 }
46
47 FftOpencv::~FftOpencv() {}