Main Page   Modules   Class Hierarchy   Compound List   File List   Compound Members   Related Pages   Examples  

FourierTransform.h

00001 /* Copyright (c) 2001 C. Grigorescu */
00002  
00003 #ifndef _FOURIER_TRANSFORM_H_
00004 #define _FOURIER_TRANSFORM_H_
00005  
00006 #include "FloatImage.h"
00007  
00008 #define HALF_SHIFT(A,size_x,size_y) \
00009    { float temp; \
00010      int i,j; \
00011      for (j=0; j<(size_y)/2; j++)  \
00012        for (i=0; i<(size_x)/2; i++)  \
00013          { temp = A[(size_x)*j+i]; \
00014            A[(size_x)*j+i] = A[(size_x)*(j+((size_y)/2))+i+(size_x)/2]; \
00015            A[(size_x)*(j+((size_y)/2))+i+(size_x)/2] = temp;} \
00016      for (j=(size_y)/2; j<(size_y); j++)  \
00017        for (i=0; i<(size_x)/2; i++)  \
00018          { temp = A[(size_x)*j+i]; \
00019            A[(size_x)*j+i] = A[(size_x)*(j-((size_y)/2))+i+(size_x)/2]; \
00020            A[(size_x)*(j-((size_y)/2))+i+(size_x)/2] = temp;} \
00021    }
00022  
00028 class FourierTransform
00029 {
00030  private:
00031   FloatImage real_part;
00032   FloatImage imag_part;
00033   int pid_magnitude;
00034   int pid_phase;
00035   void _fft(float *data, int nn, int isign);
00036  
00037  public:
00039   FourierTransform(FloatImage &input);
00040  
00042   FourierTransform(FloatImage &input_real, FloatImage &input_imag);
00043  
00045   void fft();
00046  
00048   void ifft();
00049  
00053   void showMagnitude(int log_values);
00054  
00059   void showPhase(int log_values);
00060  
00062   void closeWindows();
00063  
00065   FloatImage getReal() { return real_part;} 
00066  
00068   FloatImage getImag() { return imag_part;}
00069 };
00070  
00071 void  fft(FloatImage &input, FloatImage &output_real, FloatImage &output_imag);
00076 /* \example test_fft2.cpp */
00077  
00078 void ifft(FloatImage &input_real, FloatImage &input_imag, FloatImage &output);
00087 #endif