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

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