Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

dox/Imaging/vtkImageFourierFilter.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkImageFourierFilter.h,v $ 00005 Language: C++ 00006 00007 Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 00008 All rights reserved. 00009 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00010 00011 This software is distributed WITHOUT ANY WARRANTY; without even 00012 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00013 PURPOSE. See the above copyright notice for more information. 00014 00015 =========================================================================*/ 00028 #ifndef __vtkImageFourierFilter_h 00029 #define __vtkImageFourierFilter_h 00030 00031 00032 #include "vtkImageDecomposeFilter.h" 00033 00034 00035 //BTX 00036 /******************************************************************* 00037 COMPLEX number stuff 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 // This macro calculates exp(cIn) and puts the result in cOut 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 /******************* End of COMPLEX number stuff ********************/ 00091 //ETX 00092 00093 class VTK_IMAGING_EXPORT vtkImageFourierFilter : public vtkImageDecomposeFilter 00094 { 00095 public: 00096 vtkTypeRevisionMacro(vtkImageFourierFilter,vtkImageDecomposeFilter); 00097 00098 00099 // public for templated functions of this object 00100 //BTX 00101 00104 void ExecuteFft(vtkImageComplex *in, vtkImageComplex *out, int N); 00105 00106 00109 void ExecuteRfft(vtkImageComplex *in, vtkImageComplex *out, int N); 00110 00111 //ETX 00112 00113 protected: 00114 vtkImageFourierFilter() {}; 00115 ~vtkImageFourierFilter() {}; 00116 00117 //BTX 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 //ETX 00125 private: 00126 vtkImageFourierFilter(const vtkImageFourierFilter&); // Not implemented. 00127 void operator=(const vtkImageFourierFilter&); // Not implemented. 00128 }; 00129 00130 00131 00132 #endif 00133 00134