dox/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
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