17 #ifndef __itkVnlFFTComplexConjugateToRealImageFilter_txx
18 #define __itkVnlFFTComplexConjugateToRealImageFilter_txx
23 #include "vnl/algo/vnl_fft_1d.h"
24 #include "vnl/algo/vnl_fft_2d.h"
31 template <
class TPixel,
unsigned int VDimension>
41 if ( !inputPtr || !outputPtr )
51 = outputPtr->GetLargestPossibleRegion().GetSize();
52 unsigned int num_dims = outputPtr->GetImageDimension();
54 if(num_dims != outputPtr->GetImageDimension())
58 outputPtr->SetBufferedRegion( outputPtr->GetRequestedRegion() );
59 outputPtr->Allocate();
61 std::complex<TPixel> *in =
const_cast<std::complex<TPixel> *
>
62 (inputPtr->GetBufferPointer());
64 unsigned int vec_size = 1;
65 for(i = 0; i < num_dims; i++)
67 vec_size *= outputSize[i];
71 for(i = 0; i < vec_size; i++)
74 TPixel *out = outputPtr->GetBufferPointer();
80 vnl_fft_1d<TPixel> v1d(vec_size);
81 v1d.fwd_transform(signal);
86 vnl_fft_2d<TPixel> v2d(outputSize[1],outputSize[0]);
87 v2d.vnl_fft_2d<TPixel>::base::transform(signal.data_block(),+1);
93 v3d.vnl_fft_3d<TPixel>::base::transform(signal.data_block(),+1);
99 for(i = 0; i < vec_size; i++)
101 out[i] = signal[i].real() / vec_size;
105 template <
class TPixel,
unsigned int VDimension>