Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

131 lines
3.9 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkImageFourierFilter.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkImageFourierFilter - Superclass that implements complex numbers.
// .SECTION Description
// vtkImageFourierFilter is a class of filters that use complex numbers
// this superclass is a container for methods that manipulate these structure
// including fast Fourier transforms. Complex numbers may become a class.
// This should really be a helper class.
#ifndef __vtkImageFourierFilter_h
#define __vtkImageFourierFilter_h
#include "vtkImageDecomposeFilter.h"
//BTX
/*******************************************************************
COMPLEX number stuff
*******************************************************************/
typedef struct{
double Real;
double Imag;
} vtkImageComplex;
#define vtkImageComplexEuclidSet(C, R, I) \
(C).Real = (R); \
(C).Imag = (I)
#define vtkImageComplexPolarSet(C, M, P) \
(C).Real = (M)*cos(P); \
(C).Imag = (M)*sin(P)
#define vtkImageComplexPrint(C) \
printf("(%.3f, %.3f)", (C).Real, (C).Imag)
#define vtkImageComplexScale(cOut, S, cIn) \
(cOut).Real = (cIn).Real * (S); \
(cOut).Imag = (cIn).Imag * (S)
#define vtkImageComplexConjugate(cIn, cOut) \
(cOut).Imag = (cIn).Imag * -1.0; \
(cOut).Real = (cIn).Real
#define vtkImageComplexAdd(C1, C2, cOut) \
(cOut).Real = (C1).Real + (C2).Real; \
(cOut).Imag = (C1).Imag + (C2).Imag
#define vtkImageComplexSubtract(C1, C2, cOut) \
(cOut).Real = (C1).Real - (C2).Real; \
(cOut).Imag = (C1).Imag - (C2).Imag
#define vtkImageComplexMultiply(C1, C2, cOut) \
{ \
vtkImageComplex _vtkImageComplexMultiplyTemp; \
_vtkImageComplexMultiplyTemp.Real = (C1).Real*(C2).Real-(C1).Imag*(C2).Imag;\
_vtkImageComplexMultiplyTemp.Imag = (C1).Real*(C2).Imag+(C1).Imag*(C2).Real;\
cOut = _vtkImageComplexMultiplyTemp; \
}
// This macro calculates exp(cIn) and puts the result in cOut
#define vtkImageComplexExponential(cIn, cOut) \
{ \
double tmp = exp(cIn.Real); \
cOut.Real = tmp * cos(cIn.Imag); \
cOut.Imag = tmp * sin(cIn.Imag); \
}
/******************* End of COMPLEX number stuff ********************/
//ETX
class VTK_IMAGING_EXPORT vtkImageFourierFilter : public vtkImageDecomposeFilter
{
public:
vtkTypeRevisionMacro(vtkImageFourierFilter,vtkImageDecomposeFilter);
// public for templated functions of this object
//BTX
// Description:
// This function calculates the whole fft of an array.
// The contents of the input array are changed.
// (It is engineered for no decimation)
void ExecuteFft(vtkImageComplex *in, vtkImageComplex *out, int N);
// Description:
// This function calculates the whole fft of an array.
// The contents of the input array are changed.
// (It is engineered for no decimation)
void ExecuteRfft(vtkImageComplex *in, vtkImageComplex *out, int N);
//ETX
protected:
vtkImageFourierFilter() {};
~vtkImageFourierFilter() {};
//BTX
void ExecuteFftStep2(vtkImageComplex *p_in, vtkImageComplex *p_out,
int N, int bsize, int fb);
void ExecuteFftStepN(vtkImageComplex *p_in, vtkImageComplex *p_out,
int N, int bsize, int n, int fb);
void ExecuteFftForwardBackward(vtkImageComplex *in, vtkImageComplex *out,
int N, int fb);
//ETX
private:
vtkImageFourierFilter(const vtkImageFourierFilter&); // Not implemented.
void operator=(const vtkImageFourierFilter&); // Not implemented.
};
#endif