class Fft
{
public:
- virtual void init(unsigned width, unsigned height,unsigned num_of_feats) = 0;
+ virtual void init(unsigned width, unsigned height,unsigned num_of_feats, unsigned num_of_scales) = 0;
virtual void set_window(const cv::Mat &window) = 0;
virtual ComplexMat forward(const cv::Mat &input) = 0;
virtual ComplexMat forward_window(const std::vector<cv::Mat> &input) = 0;
{
}
-void Fftw::init(unsigned width, unsigned height,unsigned num_of_feats)
+void Fftw::init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales)
{
m_width = width;
m_height = height;
m_num_of_feats = num_of_feats;
+ m_num_of_scales = num_of_scales;
#if defined(ASYNC) || defined(OPENMP)
fftw_init_threads();
out, onembed, ostride, odist,
FFTW_MEASURE);
}
-
+ if(num_of_scales > 1)
{
- cv::Mat in_all = cv::Mat::zeros(m_height * 7*m_num_of_feats, m_width, CV_32F);
- ComplexMat out_all(m_height, m_width / 2 + 1, 7*m_num_of_feats);
+ cv::Mat in_all = cv::Mat::zeros(m_height * (num_of_scales*m_num_of_feats), m_width, CV_32F);
+ ComplexMat out_all(m_height, m_width / 2 + 1, num_of_scales*m_num_of_feats);
float *in = reinterpret_cast<float*>(in_all.data);
fftwf_complex *out = reinterpret_cast<fftwf_complex*>(out_all.get_p_data());
int rank = 2;
int n[] = {(int)m_height, (int)m_width};
- int howmany = 7*m_num_of_feats;
+ int howmany = num_of_scales*m_num_of_feats;
int idist = m_height*m_width, odist = m_height*(m_width/2+1);
int istride = 1, ostride = 1;
int *inembed = NULL, *onembed = NULL;
public:
Fftw();
Fftw(int num_of_threads);
- void init(unsigned width, unsigned height,unsigned num_of_feats) override;
+ void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales) override;
void set_window(const cv::Mat &window) override;
ComplexMat forward(const cv::Mat &input) override;
ComplexMat forward_window(const std::vector<cv::Mat> &input) override;
~Fftw() override;
private:
unsigned m_num_threads = 6;
- unsigned m_width, m_height, m_num_of_feats;
+ unsigned m_width, m_height, m_num_of_feats,m_num_of_scales;
cv::Mat m_window;
fftwf_plan plan_f, plan_fw, plan_fw_all_scales, plan_i_features, plan_i_1ch;
};
#include "fft_opencv.h"
-void init(unsigned width, unsigned height,unsigned num_of_feats)
+void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales)
{
(void)width;
(void)height;
(void)num_of_feats;
+ (void)num_of_scales;
std::cout << "FFT: OpenCV" << std::endl;
}
class FftOpencv : public Fft
{
public:
- void init(unsigned width, unsigned height,unsigned num_of_feats) override;
+ void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales) override;
void set_window(const cv::Mat &window) override;
ComplexMat forward(const cv::Mat &input) override;
ComplexMat forward_window(const std::vector<cv::Mat> &input) override;
num_of_feats = 31;
if(m_use_color) num_of_feats += 3;
if(m_use_cnfeat) num_of_feats += 10;
- fft.init(p_windows_size[0]/p_cell_size, p_windows_size[1]/p_cell_size,num_of_feats);
+ fft.init(p_windows_size[0]/p_cell_size, p_windows_size[1]/p_cell_size, num_of_feats, p_scales.size());
p_yf = fft.forward(gaussian_shaped_labels(p_output_sigma, p_windows_size[0]/p_cell_size, p_windows_size[1]/p_cell_size));
fft.set_window(cosine_window_function(p_windows_size[0]/p_cell_size, p_windows_size[1]/p_cell_size));