1 // This is core/vnl/algo/vnl_fft_2d.h 2 #ifndef vnl_fft_2d_h_ 3 #define vnl_fft_2d_h_ 4 //: 5 // \file 6 // \brief In-place 2D fast Fourier transform 7 // \author fsm 8 9 #include <vnl/vnl_matrix.h> 10 #include <vnl/algo/vnl_fft_base.h> 11 12 //: In-place 2D fast Fourier transform 13 14 template <class T> 15 struct vnl_fft_2d : public vnl_fft_base<2, T> 16 { 17 typedef vnl_fft_base<2, T> base; 18 19 //: constructor takes size of signal. vnl_fft_2dvnl_fft_2d20 vnl_fft_2d(int M, int N) { 21 base::factors_[0].resize(M); 22 base::factors_[1].resize(N); 23 } 24 25 //: dir = +1/-1 according to direction of transform. transformvnl_fft_2d26 void transform(vnl_matrix<std::complex<T> > &signal, int dir) 27 { base::transform(signal.data_block(), dir); } 28 29 //: forward FFT fwd_transformvnl_fft_2d30 void fwd_transform(vnl_matrix<std::complex<T> > &signal) 31 { transform(signal, +1); } 32 33 //: backward (inverse) FFT bwd_transformvnl_fft_2d34 void bwd_transform(vnl_matrix<std::complex<T> > &signal) 35 { transform(signal, -1); } 36 37 //: return size of signal. rowsvnl_fft_2d38 unsigned rows() const { return base::factors_[0].number(); } colsvnl_fft_2d39 unsigned cols() const { return base::factors_[1].number(); } 40 }; 41 42 #endif // vnl_fft_2d_h_ 43