Minulla on vaikeuksia kuvan taajuuskomponenttien tunnistamisessa.

Täällä yksinkertaisesti luotiin, 256×256 binaari- kuva.

a = [zeros(256,128) ones(256,128)]; imshow(a); 

kirjoita kuvan kuvaus tähän

Kuvan ottaminen FFT: ksi ja siirtäminen nollataajuus keskelle

f = fft2(a) shft = fftshift(f); imshow(log(shft)) %stretching 

johtaa,

kirjoita kuvan kuvaus tähän

Kuinka tunnistan kuinka monta taajuuskomponenttia on ja mitkä ovat nämä taajuudet?

Myös, jos lasken minkä tahansa 1-D-sekvenssin FFT: n ja piirrän kyseisen sekvenssin tietyt arvot negatiivisilla, mitä se tarkoittaa? Kuinka negatiivisia taajuuksia voi olla?

Kommentit

  • Liittyvät (mahdollinen kaksoiskappale): dsp. stackexchange.com/q/1637/77
  • Yksi parhaista tavoista ymmärtää muutoksen tehtävä on kokeilla käänteistä -muunnosta. Piirrä piste ja muunna se sitten käänteisesti nähdäksesi sen tuottamat aallot. Kokeile sitten pistettä eri paikassa, sitten viivaa jne. Negatiivisten taajuuksien osalta katso dsp.stackexchange.com/q/431/29

Vastaa

miten negatiivisia taajuuksia voi olla?

FFT-kertoimet eivät ole taajuuksia, vaan kompleksisia amplitudeja. Kertoimen moduuli osoittaa amplitudin, kerroimen argumentti osoittaa vaiheen.

Huomaa, että Matlabilta pitäisi saada varoitus tai virheilmoitus log(shft), koska shft on monimutkainen matriisi, tulos ei ole todellinen eikä sitä voida piirtää kuvana.

Kommentit

  • Kaikki mitä sanot on totta, mutta se on myös sivutoiminen kysymys. Puolet kertoimista voidaan tulkita vastaamaan negatiivisia taajuuksia.

Vastaa

Ensimmäinen ehdotukseni on, että sinä ymmärrä FFT yhdellä ulottuvuudella ennen kuin yrität tulkita tuloksia 2D-muodossa.

Diskreetti Fourier-muunnos (FFT on DFT: n toteutus) on monimutkainen muunnos: se muuntuu kahden vektorin välillä, kompleksiset vektorit, joiden koko on N.

Joten 1D-tapauksessa saat paitsi negatiiviset arvot myös monimutkaiset arvot.

Sama pätee 2D-arvoon. Imshow-funktio vie todennäköisesti kompleksisen matriisin todellisen osan (se ei ole selvää imshow-dokumentaatiossa).

Vastaa

Sinulta puuttuu komento abs.

Kokeile seuraavaa:

f = fft2(a) shft = fftshift(abs(f)); imshow(log(shft)) %stretching 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *