Bonjour,
Pour un projet de semestre on nous a demandé de coder la transformée de Fourier normale, rapide 1D et rapide 2D sous Matlab.
La Fourier normale fonctionne à merveille, tandis que la rapide pas du tout.
En fait, je suis proche d'un résultat propre mais pas optimal.
(Voir pièce-jointe. Figure 1 : image de base, figure 2 : TF normale, figure 3 : TFI normale, figure 4 :TFR, figure 5 : TFRI).
J'ai recopié exactement la formule de mon professeur donnée en TD sans succès, j'aimerai alors comprendre mon erreur malgré moult tentatives de résolutions.
La transformée 1D :
La transformée 2D :Code:function FIR = ftr(I, sens) %sens = 1 --> transformée, sens = autre valeur --> transformée inverse [n,m] = size(I); I = double(I); FIR = zeros (m,1); for u = 1 : m for x = 1 : m/2; if (sens == 1) FIR(u) = FIR(u) + I(2*(x))*exp((-2*1i*pi*(u-1)*(x-1))/(m/2)) + exp((-2*1i*pi*u)/m)*I(2*x-1)*exp((-2*1i*pi*(u-1)*(x-1))/(m/2)); else FIR(u) = FIR(u) + (1/m)*I(2*(x))*exp((2*1i*pi*(u-1)*(x-1))/(m/2)) + (1/m)*exp((-2*1i*pi*u)/m)*I(2*x-1)*exp((2*1i*pi*(u-1)*(x-1))/(m/2)); end end end
Un conseil ou une idée est la bienvenue, merciCode:function temp2 = ftr2d(I, sens) [m,n] = size(I); temp1 = zeros(m,n); temp2 = zeros(m,n); for k = 1 : m temp1(k,:) = ftr(I(k,:),sens); end for l = 1 : n temp2(:,l) = ftr(transpose(temp1(:,l)),sens); end end
-----