1 #include "fft_opencv.h"
3 void FftOpencv::init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales, bool big_batch_mode)
10 std::cout << "FFT: OpenCV" << std::endl;
13 void FftOpencv::set_window(const cv::Mat & window)
18 void FftOpencv::forward(const cv::Mat & real_input, ComplexMat & complex_result, float *real_input_arr, cudaStream_t stream)
20 (void) real_input_arr;
24 cv::dft(real_input, tmp, cv::DFT_COMPLEX_OUTPUT);
25 complex_result = ComplexMat(tmp);
29 void FftOpencv::forward_window(std::vector<cv::Mat> patch_feats, ComplexMat & complex_result, cv::Mat & fw_all, float *real_input_arr, cudaStream_t stream)
31 (void) real_input_arr;
35 uint n_channels = uint(patch_feats.size());
36 for (uint i = 0; i < n_channels; ++i) {
38 cv::dft(patch_feats[i].mul(m_window), complex_res, cv::DFT_COMPLEX_OUTPUT);
39 complex_result.set_channel(int(i), complex_res);
44 void FftOpencv::inverse(ComplexMat & complex_input, cv::Mat & real_result, float *real_result_arr, cudaStream_t stream)
46 (void) real_result_arr;
49 if (complex_input.n_channels == 1) {
50 cv::dft(complex_input.to_cv_mat(), real_result, cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT | cv::DFT_SCALE);
52 std::vector<cv::Mat> mat_channels = complex_input.to_cv_mat_vector();
53 std::vector<cv::Mat> ifft_mats(ulong(complex_input.n_channels));
54 for (uint i = 0; i < uint(complex_input.n_channels); ++i) {
55 cv::dft(mat_channels[i], ifft_mats[i], cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT | cv::DFT_SCALE);
57 cv::merge(ifft_mats, real_result);
62 FftOpencv::~FftOpencv()