13 # include <vcl_msvc_warnings.h> 21 vil_fft_2d_base(std::complex<T> * data,
22 unsigned n0, std::ptrdiff_t step0,
23 unsigned n1, std::ptrdiff_t step1,
24 unsigned n2, std::ptrdiff_t step2,
28 T factor = dir<0 ? T(1) : T(1)/static_cast<T>(n0);
33 for (
unsigned i1=0; i1<n1; i1++)
34 for (
unsigned i2=0; i2<n2; i2++)
36 std::complex<T> * d = data + i1*step1 + i2*step2;
37 fft_1d.transform(d, dir);
39 for (
unsigned i0=0; i0<n0; ++i0)
45 std::vector<std::complex<T> >
v(n0);
46 for (
unsigned i1=0; i1<n1; i1++)
47 for (
unsigned i2=0; i2<n2; i2++)
49 std::complex<T> * d = data + i1*step1 + i2*step2;
50 for (
unsigned i0=0; i0<n0; i0++, d+=step0)
52 fft_1d.transform(v, dir);
54 d = data + i1*step1 + i2*step2;
55 for (
unsigned i0=0; i0<n0; i0++, d+=step0)
65 vil_fft_2d_base(img.top_left_ptr(),
66 img.ni(), img.istep(),
67 img.nj(), img.jstep(),
68 img.nplanes(), img.planestep(),
70 vil_fft_2d_base(img.top_left_ptr(),
71 img.nj(), img.jstep(),
72 img.ni(), img.istep(),
73 img.nplanes(), img.planestep(),
81 vil_fft_2d_base(img.top_left_ptr(),
82 img.nj(), img.jstep(),
83 img.ni(), img.istep(),
84 img.nplanes(), img.planestep(),
86 vil_fft_2d_base(img.top_left_ptr(),
87 img.ni(), img.istep(),
88 img.nj(), img.jstep(),
89 img.nplanes(), img.planestep(),
93 #undef VIL_FFT_INSTANTIATE 94 #define VIL_FFT_INSTANTIATE(T) \ 95 template void vil_fft_2d_base(std::complex<T >* data, \ 96 unsigned n0, std::ptrdiff_t step0, \ 97 unsigned n1, std::ptrdiff_t step1, \ 98 unsigned n2, std::ptrdiff_t step2, \ 100 template void vil_fft_2d_fwd(vil_image_view<std::complex<T > >& img); \ 101 template void vil_fft_2d_bwd(vil_image_view<std::complex<T > >& img) 103 #endif // vil_fft_hxx_ Concrete view of image data of type T held in memory.
A base class reference-counting view of some image data.
void vil_fft_2d_fwd(vil_image_view< std::complex< T > > &img)
Perform in place forward FFT.
void vil_fft_2d_bwd(vil_image_view< std::complex< T > > &img)
Perform in place backward FFT.
Functions to apply the FFT to an image.