Problémáim vannak egy kép frekvenciakomponenseinek azonosításával,
Itt egyszerűen generáltam, 256×256 bináris- kép.
a = [zeros(256,128) ones(256,128)]; imshow(a);
A kép FFT készítése és eltolása a nulla frekvencia a középpontba,
f = fft2(a) shft = fftshift(f); imshow(log(shft)) %stretching
eredményezi,
Hogyan tudom azonosítani, hogy hány frekvenciakomponens van és melyek ezek a frekvenciák? bizonyos értékek negatívon, mit jelent ez? Hogyan lehetnek negatív frekvenciák?
Megjegyzések
- Kapcsolódó (lehetséges ismétlés): dsp. stackexchange.com/q/1637/77
- Az egyik legjobb módja annak, hogy megértsük, mi a transzformáció, ha kísérletezünk az inverz transzformációval. Rajzoljon egy pontot, majd fordítva alakítsa át, hogy lássa a keletkező hullámokat. Ezután próbáljon meg egy pontot egy másik helyen, majd egy vonalat, stb. A negatív frekvenciákról lásd: dsp.stackexchange.com/q/431/29
Válasz
hogyan lehetnek negatív frekvenciák?
Az FFT együtthatók nem frekvenciák, hanem összetett amplitúdók. Az együttható modulusa az amplitúdót, az együttható argumentuma a fázist jelzi.
Ne feledje, hogy figyelmeztetést vagy hibaüzenetet kell kapnia a Matlab-tól a log(shft)
, mivel az shft összetett mátrix, az eredmény nem valós és képként nem ábrázolható.
Megjegyzések
- Minden, amit mondasz igaz, de a kérdés mellé áll. Az együtthatók fele értelmezhető úgy, hogy megfeleljen a negatív frekvenciáknak.
Válasz
Az első javaslatom az, hogy Ön megérteni az FFT-t 1 dimenzióban, mielőtt megpróbálná értelmezni az eredményeket a 2D-ben.
A Diszkrét Fourier-transzformáció (az FFT a DFT megvalósítása) egy komplex transzformáció: 2 vektor komplex N méretű vektor között transzformál. p>
Tehát 1D esetben nemcsak negatív értékeket, hanem általában komplex értékeket is kap.
Ugyanez vonatkozik a 2D-re is. Az imshow függvény valószínűleg a komplex mátrix valós részét veszi át (ez nem világos az imshow dokumentációjában).
Válasz
Hiányzik a abs
parancs.
Próbálja ki a következőket:
f = fft2(a) shft = fftshift(abs(f)); imshow(log(shft)) %stretching