Ik heb problemen met het identificeren van de frequentiecomponenten van een afbeelding,

Hier heb ik simpelweg 256×256 binaire- afbeelding.

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

voer de beschrijving van de afbeelding hier in

De afbeelding FFT maken en verschuiven de nul-frequentie naar het midden,

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

zal resulteren,

voer hier de afbeeldingsbeschrijving in

Hoe identificeer ik hoeveel frequentiecomponenten er zijn en wat zijn die frequenties?

Ook als ik de FFT van een 1-D-reeks bereken en die reeks plot, zijn er bepaalde waarden op negatief, wat betekent dat? Hoe kunnen er negatieve frequenties zijn?

Reacties

  • Gerelateerd (mogelijk duplicaat): dsp. stackexchange.com/q/1637/77
  • Een van de beste manieren om te begrijpen wat een transformatie doet, is door te experimenteren met de inverse transformatie. Teken een punt en transformeer het vervolgens in omgekeerde volgorde om de golven te zien die het produceert. Probeer dan een punt op een andere plaats, dan een lijn, enz. Zie voor negatieve frequenties dsp.stackexchange.com/q/431/29

Antwoord

hoe kunnen er negatieve frequenties zijn?

De FFT-coëfficiënten zijn geen frequenties, maar complexe amplitudes. De modulus van de coëfficiënt geeft de amplitude aan, het argument van de coëfficiënt geeft de fase aan.

Merk op dat je een waarschuwing of foutmelding van Matlab zou moeten krijgen voor het berekenen van log(shft), aangezien shft een complexe matrix is, is het resultaat niet echt en kan het niet als afbeelding worden geplot.

Opmerkingen

  • Alles wat je zegt is waar, maar het is ook een omkering van de vraag. De helft van de coëfficiënten kan worden geïnterpreteerd om overeen te komen met negatieve frequenties.

Antwoord

Mijn eerste suggestie is dat u begrijp FFT in 1 dimensie voordat u de resultaten in 2D probeert te interpreteren.

De Discrete Fourier Transform (FFT is een implementatie van DFT) is een complexe transformatie: het transformeert tussen 2 vectoren complexe vectoren van grootte N.

Dus in het 1D-geval krijg je niet alleen negatieve waarden, maar complexe waarden in het algemeen.

Hetzelfde geldt voor 2D. De imshow-functie neemt waarschijnlijk het echte deel van de complexe matrix (het is niet duidelijk in de imshow-documentatie).

Answer

Je mist het abs commando.

Probeer het volgende:

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *