// fonction _fft1d // Calcule la transformée de Fourier rapide pour 1 dimension // @param Img Image à partir de laquelle la transformée de Fourier est calculée. L'image doit être en niveau de gris. // @param SensFFT Détermine le sens de la tranformation. Directe : -1; Inverse : 1. // @return ImgTrans Résultat de la transformée de Fourier appliquée à l'image Img. function [ImgTrans] = _fft1d(Img, SensFFT) // On calcule la taille de l'image passée en paramètre Width = size(Img, 2); // On créé la matrice qui sera retournée ImgTrans = Img // Si la Width est différent de 1, alors on traite l'image en paramètre if Width <> 1 then // On créé les matrices MPair = zeros(1, Width / 2) // Pixels de position paire MImpair = zeros(1, Width / 2) // Pixels de position impaire // On coupe en deux l'image reçue, pour traiter indépendamment chaque moitié for i = 1 : Width if modulo(i, 2) == 0 then // Pair MPair(i / 2) = Img(i) else // Impair MImpair( ( i + 1 ) / 2 ) = Img(i) end end // On appelle la fonction pour les deux nouvelles images ImgPair = _fft1d(MPair, SensFFT) ImgImpair = _fft1d(MImpair, SensFFT) // On applique la formule de la transformée de fourier pour les images obtenues for u = 1 : (Width / 2) coef = exp( ( SensFFT * 2 * %i * %pi * u ) / Width ) ImgTrans(u) = ImgPair(u) + ( coef * ImgImpair(u) ) ImgTrans( u + ( Width / 2 ) ) = ImgPair(u) - ( coef * ImgImpair(u) ) end end endfunction // fonction fft1d // Prépare les données pour le calcul de la transformée de Fourier en une dimension // @param Img Image à partir de laquelle la transformée de Fourier est calculée. L'image doit être en niveau de gris, et de taille (1, 2^n) // @param SensFFT Détermine le sens de la tranformation. Directe : -1; Inverse : 1. // @return ImgTrans Résultat de la transformée de Fourier appliquée à l'image Img. function [ImgTrans] = fft1d(Img, SensFFT) // Calcul de la taille de l'image Width = size(Img, 2) // Création d'une image temporaire pour l'inversion de l'image de base ImgTemp1 = zeros(1, Width) // Inversion des pixels de l'image passée en paramètre for i = 1 : Width ImgTemp1(i) = Img(Width + 1 - i) end // Calcul de la FFT1D sur l'image retournée ImgTemp2 = _fft1d(ImgTemp1, SensFFT) // Initialisation de l'image de retour ImgTrans = zeros(1, Width) // Inversion du résultat de la transformée de Fourier for i = 1 : Width ImgTrans(i) = ImgTemp2(Width + 1 - i) end // Si on est en sens inverse, il faut diviser chaque pixel du tableau par la taille du tableau if SensFFT == 1 then for i = 1 : Width ImgTrans(i) = ImgTrans(i) / Width end end endfunction