This module computes the Fast Fourier Transform 
\index{FFT|see{Fourier Transform}}
\index{Fourier Transform}
of a complex $M\times N$ image $u$, defined by
$$v(p,q) = \sum_{k,l} u(k,l)\; 
\exp\left(2i\pi \left(\frac{kp}M+\frac{lq}N\right)\right).$$
The input image $u$ is given
by two Fimages $input\_re$ and $input\_im$ (real and imaginary parts),
and the result $v$ is returned through through two Fimages
$output\_re$ and $output\_im$. If the \verb+-i+ option is selected,
then the inverse Fourier Transform is computed, that is
$$v(k,l) = \frac 1{MN} \sum_{p,q} u(p,q)\;
\exp\left(-2i\pi \left(\frac{kp}M+\frac{lq}N\right)\right).$$
Note that the opposite sign convention ($-1$ for the direct transform, $+1$ for
the inverse transform) is also frequently found in the literature.

\vskip 0.3cm

Since the efficiency of the FFT depends on the image dimensions in
a complex way (involving the prime factor decomposition of the dimensions),
a preliminary crop may be applied to the input image to speed-up the 
computation. The modules {\sf fft2dshrink} and {\sf fshrink2} are
devoted to this task.

\vskip 0.3cm

Since it is a separable transform, 
the two-dimensional FFT is performed by applying a 1D-FFT on each row
of the 2D input, and then on each column.

\vskip 0.3cm

Several special cases can occur when you use this module as a 
C subroutine~:
\begin{itemize}
\item If $in\_im=NULL$, the input imaginary part is assumed to be zero 
everywhere.
\item If $out\_re=NULL$ or $out\_im=NULL$, the module assumes that you
don't need the corresponding output.
\end{itemize}
