00001 // This is vxl/vnl/algo/vnl_fft_3d.h 00002 #ifndef vnl_fft_3d_h_ 00003 #define vnl_fft_3d_h_ 00004 #ifdef VCL_NEEDS_PRAGMA_INTERFACE 00005 #pragma interface 00006 #endif 00007 00013 #include <vnl/vnl_matrix.h> 00014 #include <vnl/algo/vnl_fft_base.h> 00015 00019 template <class T> 00020 struct vnl_fft_3d : public vnl_fft_base<3, T> 00021 { 00022 typedef vnl_fft_base<3, T> base; 00023 00026 vnl_fft_3d(int M, int N,int Q) { 00027 base::factors_[0].resize(M); 00028 base::factors_[1].resize(N); 00029 base::factors_[2].resize(Q); 00030 } 00031 00034 void transform(vnl_matrix<vcl_complex<T> > &signal, int dir) 00035 { base::transform(signal.data_block(), dir); } 00036 00039 void fwd_transform(vnl_matrix<vcl_complex<T> > &signal) 00040 { transform(signal, +1); } 00041 00044 void bwd_transform(vnl_matrix<vcl_complex<T> > &signal) 00045 { transform(signal, -1); } 00046 00049 unsigned rows() const { return base::factors_[0].number(); } 00050 unsigned cols() const { return base::factors_[1].number(); } 00051 }; 00052 00053 #endif // vnl_fft_3d_h_ 00054