Estou tendo problemas para identificar os componentes de frequência de uma imagem,

Aqui, simplesmente gerei, 256×256 binários- imagem.

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

insira a descrição da imagem aqui

Pegando a imagem FFT e mudando a frequência zero ao centro,

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

resultará,

insira a descrição da imagem aqui

Como eu identifico quantos componentes de frequência existem e quais são essas frequências?

Além disso, se eu calcular FFT de qualquer sequência 1-D e plotar essa sequência, há certos valores negativos, o que isso significa? Como poderia haver frequências negativas?

Comentários

  • Relacionados (possível duplicata): dsp. stackexchange.com/q/1637/77
  • Uma das melhores maneiras de entender o que uma transformação faz é experimentar a transformação inversa . Desenhe um ponto e depois transforme-o no sentido inverso para ver as ondas que ele produz. Em seguida, tente um ponto em um lugar diferente, depois uma linha, etc. Quanto às frequências negativas, consulte dsp.stackexchange.com/q/431/29

Resposta

como pode haver frequências negativas?

Os coeficientes FFT não são frequências, mas amplitudes complexas. O módulo do coeficiente indica a amplitude, o argumento do coeficiente indica a fase.

Observe que você deve estar recebendo um aviso ou mensagem de erro do Matlab para calcular log(shft), como shft é uma matriz complexa, o resultado não é real e não pode ser plotado como uma imagem.

Comentários

  • Tudo o que você diz é verdade, mas também está evitando a questão. Metade dos coeficientes pode ser interpretada como correspondendo a frequências negativas.

Resposta

Minha primeira sugestão é que você entender FFT em 1 dimensão antes de tentar interpretar resultados em 2D.

A Transformada Discreta de Fourier (FFT é uma implementação de DFT) é uma transformada complexa: ela transforma entre 2 vetores vetores complexos de tamanho N.

Portanto, no caso 1D, você obterá não apenas valores negativos, mas também valores complexos em geral.

O mesmo se aplica a 2D. A função imshow provavelmente está pegando a parte real da matriz complexa (não está claro na documentação do imshow).

Resposta

Está faltando o comando abs.

Tente o seguinte:

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *