Am probleme cu identificarea componentelor de frecvență ale unei imagini,
Aici am generat pur și simplu, 256×256 binar- imagine.
a = [zeros(256,128) ones(256,128)]; imshow(a);
Preluarea imaginii FFT și deplasarea Frecvența zero către centru,
f = fft2(a) shft = fftshift(f); imshow(log(shft)) %stretching
va rezulta,
Cum identific câte componente de frecvență există și care sunt aceste frecvențe?
De asemenea, dacă calculez FFT a oricărei secvențe 1-D și trasez acea secvență există anumite valori pe negative, ce înseamnă asta? Cum ar putea exista frecvențe negative?
Comentarii
- Corelat (posibil duplicat): dsp. stackexchange.com/q/1637/77
- Una dintre cele mai bune modalități de a înțelege ce face o transformare este să experimentați transformarea inversă . Desenați un punct și apoi transformați-l invers pentru a vedea undele pe care le produce. Apoi încercați un punct într-un alt loc, apoi o linie etc. În ceea ce privește frecvențele negative, consultați dsp.stackexchange.com/q/431/29
Răspuns
cum ar putea exista frecvențe negative?
Coeficienții FFT nu sunt frecvențe, ci amplitudini complexe. Modulul coeficientului indică amplitudinea, argumentul coeficientului indică faza.
Rețineți că ar trebui să primiți un mesaj de avertizare sau de eroare de la Matlab pentru calcul log(shft)
, deoarece shft este o matrice complexă, rezultatul nu este real și nu poate fi reprezentat ca imagine.
Comentarii
- Tot ceea ce spui este adevărat, dar este, de asemenea, o întrebare pas cu pas. Jumătate din coeficienți pot fi interpretați pentru a corespunde frecvențelor negative.
Răspuns
Prima mea sugestie este că tu înțelegeți FFT în 1 dimensiune înainte de a încerca să interpretați rezultatele în 2D.
Transformata Fourier discretă (FFT este o implementare a DFT) este o transformare complexă: transformă între 2 vectori vectori complecși de dimensiunea N. p>
Deci, în cazul 1D, veți obține nu numai valori negative, ci și valori complexe în general.
La fel se aplică și în 2D. Funcția imshow ia probabil partea reală a matricei complexe (nu este clar în documentația imshow).
Răspuns
Vă lipsește comanda abs
.
Încercați următoarele:
f = fft2(a) shft = fftshift(abs(f)); imshow(log(shft)) %stretching