3 void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales)
7 m_num_of_feats = num_of_feats;
8 m_num_of_scales = num_of_scales;
9 std::cout << "FFT: cuFFT" << std::endl;
12 void cuFFT::set_window(const cv::Mat &window)
17 ComplexMat cuFFT::forward(const cv::Mat &input)
19 cv::Mat complex_result;
20 cv::dft(input, complex_result, cv::DFT_COMPLEX_OUTPUT);
21 return ComplexMat(complex_result);
24 ComplexMat cuFFT::forward_window(const std::vector<cv::Mat> &input)
26 int n_channels = input.size();
27 ComplexMat result(input[0].rows, input[0].cols, n_channels);
29 for (int i = 0; i < n_channels; ++i) {
30 cv::Mat complex_result;
31 cv::dft(input[i].mul(m_window), complex_result, cv::DFT_COMPLEX_OUTPUT);
32 result.set_channel(i, complex_result);
37 cv::Mat cuFFT::inverse(const ComplexMat &inputf)
40 if (inputf.n_channels == 1) {
41 cv::dft(inputf.to_cv_mat(), real_result, cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT | cv::DFT_SCALE);
43 std::vector<cv::Mat> mat_channels = inputf.to_cv_mat_vector();
44 std::vector<cv::Mat> ifft_mats(inputf.n_channels);
45 for (int i = 0; i < inputf.n_channels; ++i) {
46 cv::dft(mat_channels[i], ifft_mats[i], cv::DFT_INVERSE | cv::DFT_REAL_OUTPUT | cv::DFT_SCALE);
48 cv::merge(ifft_mats, real_result);