00001
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