Jai du mal à identifier les composantes de fréquence dune image,
Ici, jai simplement généré, 256×256 binaire- image.
a = [zeros(256,128) ones(256,128)]; imshow(a);
Prise de limage FFT et décalage la fréquence zéro au centre,
f = fft2(a) shft = fftshift(f); imshow(log(shft)) %stretching
en résultera,
Comment puis-je identifier le nombre de composantes de fréquence et quelles sont ces fréquences?
Aussi si je calcule la FFT dune séquence 1-D et que je trace cette séquence, il y a certaines valeurs sur le négatif, quest-ce que cela signifie? Comment pourrait-il y avoir des fréquences négatives?
Commentaires
- Connexes (doublon possible): dsp. stackexchange.com/q/1637/77
- Lun des meilleurs moyens de comprendre ce que fait une transformation est dexpérimenter la transformation inverse . Dessinez un point, puis transformez-le en inverse pour voir les ondes quil produit. Essayez ensuite un point à un autre endroit, puis une ligne, etc. En ce qui concerne les fréquences négatives, voir dsp.stackexchange.com/q/431/29
Réponse
comment il pourrait y avoir des fréquences négatives?
Les coefficients FFT ne sont pas des fréquences, mais des amplitudes complexes. Le module du coefficient indique lamplitude, largument du coefficient indique la phase.
Notez que vous devriez recevoir un message davertissement ou derreur de Matlab pour le calcul log(shft)
, puisque shft est une matrice complexe, le résultat nest pas un réel et ne peut pas être tracé comme une image.
Commentaires
- Tout ce que vous dites est vrai, mais cela évite également la question. La moitié des coefficients peut être interprétée comme correspondant à des fréquences négatives.
Réponse
Ma première suggestion est que vous comprendre la FFT en 1 dimension avant dessayer dinterpréter les résultats en 2D.
La Transformée de Fourier Discrète (FFT est une implémentation de DFT) est une transformée complexe: elle transforme entre 2 vecteurs vecteurs complexes de taille N.
Donc dans le cas 1D, vous obtiendrez non seulement des valeurs négatives, mais des valeurs complexes en général.
La même chose sapplique en 2D. La fonction imshow prend probablement la partie réelle de la matrice complexe (ce nest pas clair dans la documentation imshow).
Réponse
Il vous manque la commande abs
.
Essayez ce qui suit:
f = fft2(a) shft = fftshift(abs(f)); imshow(log(shft)) %stretching