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   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 =========================================================================*/
    00039 #ifndef __vtkImageFourierFilter_h
    00040 #define __vtkImageFourierFilter_h
    00041
    00042
    00043 #include "vtkImageDecomposeFilter.h"
    00044
    00045
    00046 //BTX
    00047 /*******************************************************************
    00048                         COMPLEX number stuff
    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 // This macro calculates exp(cIn) and puts the result in cOut
    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 /******************* End of COMPLEX number stuff ********************/
    00102 //ETX
    00103
    00104 class VTK_IMAGING_EXPORT vtkImageFourierFilter : public vtkImageDecomposeFilter
    00105 {
    00106 public:
    00107   vtkTypeRevisionMacro(vtkImageFourierFilter,vtkImageDecomposeFilter);
    00108
    00109
    00110   // public for templated functions of this object
    00111   //BTX
    00112
    00115   void ExecuteFft(vtkImageComplex *in, vtkImageComplex *out, int N);
    00116
    00117
    00120   void ExecuteRfft(vtkImageComplex *in, vtkImageComplex *out, int N);
    00121
    00122   //ETX
    00123
    00124 protected:
    00125   vtkImageFourierFilter() {};
    00126   ~vtkImageFourierFilter() {};
    00127
    00128   //BTX
    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   //ETX
    00136 private:
    00137   vtkImageFourierFilter(const vtkImageFourierFilter&);  // Not implemented.
    00138   void operator=(const vtkImageFourierFilter&);  // Not implemented.
    00139 };
    00140
    00141
    00142
    00143 #endif
    00144
    00145