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