vtkImageFourierFilter.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00028 #ifndef __vtkImageFourierFilter_h
00029 #define __vtkImageFourierFilter_h
00030
00031
00032 #include "vtkImageDecomposeFilter.h"
00033
00034
00035
00036
00037
00038
00039
00040
00041 typedef struct{
00042 double Real;
00043 double Imag;
00044 } vtkImageComplex;
00045
00046
00047 #define vtkImageComplexEuclidSet(C, R, I) \
00048 (C).Real = (R); \
00049 (C).Imag = (I)
00050
00051 #define vtkImageComplexPolarSet(C, M, P) \
00052 (C).Real = (M)*cos(P); \
00053 (C).Imag = (M)*sin(P)
00054
00055 #define vtkImageComplexPrint(C) \
00056 printf("(%.3f, %.3f)", (C).Real, (C).Imag)
00057
00058 #define vtkImageComplexScale(cOut, S, cIn) \
00059 (cOut).Real = (cIn).Real * (S); \
00060 (cOut).Imag = (cIn).Imag * (S)
00061
00062 #define vtkImageComplexConjugate(cIn, cOut) \
00063 (cOut).Imag = (cIn).Imag * -1.0; \
00064 (cOut).Real = (cIn).Real
00065
00066 #define vtkImageComplexAdd(C1, C2, cOut) \
00067 (cOut).Real = (C1).Real + (C2).Real; \
00068 (cOut).Imag = (C1).Imag + (C2).Imag
00069
00070 #define vtkImageComplexSubtract(C1, C2, cOut) \
00071 (cOut).Real = (C1).Real - (C2).Real; \
00072 (cOut).Imag = (C1).Imag - (C2).Imag
00073
00074 #define vtkImageComplexMultiply(C1, C2, cOut) \
00075 { \
00076 vtkImageComplex _vtkImageComplexMultiplyTemp; \
00077 _vtkImageComplexMultiplyTemp.Real = (C1).Real*(C2).Real-(C1).Imag*(C2).Imag;\
00078 _vtkImageComplexMultiplyTemp.Imag = (C1).Real*(C2).Imag+(C1).Imag*(C2).Real;\
00079 cOut = _vtkImageComplexMultiplyTemp; \
00080 }
00081
00082
00083 #define vtkImageComplexExponential(cIn, cOut) \
00084 { \
00085 float tmp = exp(cIn.Real); \
00086 cOut.Real = tmp * cos(cIn.Imag); \
00087 cOut.Imag = tmp * sin(cIn.Imag); \
00088 }
00089
00090
00091
00092
00093 class VTK_IMAGING_EXPORT vtkImageFourierFilter : public vtkImageDecomposeFilter
00094 {
00095 public:
00096 vtkTypeRevisionMacro(vtkImageFourierFilter,vtkImageDecomposeFilter);
00097
00098
00099
00100
00101
00104 void ExecuteFft(vtkImageComplex *in, vtkImageComplex *out, int N);
00105
00106
00109 void ExecuteRfft(vtkImageComplex *in, vtkImageComplex *out, int N);
00110
00111
00112
00113 protected:
00114 vtkImageFourierFilter() {};
00115 ~vtkImageFourierFilter() {};
00116
00117
00118 void ExecuteFftStep2(vtkImageComplex *p_in, vtkImageComplex *p_out,
00119 int N, int bsize, int fb);
00120 void ExecuteFftStepN(vtkImageComplex *p_in, vtkImageComplex *p_out,
00121 int N, int bsize, int n, int fb);
00122 void ExecuteFftForwardBackward(vtkImageComplex *in, vtkImageComplex *out,
00123 int N, int fb);
00124
00125 private:
00126 vtkImageFourierFilter(const vtkImageFourierFilter&);
00127 void operator=(const vtkImageFourierFilter&);
00128 };
00129
00130
00131
00132 #endif
00133
00134