Tengo problemas para identificar los componentes de frecuencia de una imagen,

Aquí simplemente generé, 256×256 binario- imagen.

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

ingrese la descripción de la imagen aquí

Tomando la imagen FFT y cambiando la frecuencia cero hacia el centro,

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

resultará,

ingrese la descripción de la imagen aquí

¿Cómo identifico cuántos componentes de frecuencia hay y cuáles son esas frecuencias?

Además, si calculo FFT de cualquier secuencia 1-D y trazo esa secuencia, hay ciertos valores en negativo, ¿qué significa eso? ¿Cómo podría haber frecuencias negativas?

Comentarios

  • Relacionados (posible duplicado): dsp. stackexchange.com/q/1637/77
  • Una de las mejores formas de entender lo que hace una transformación es experimentar con la transformación inversa . Dibuja un punto y luego transfórmalo a la inversa para ver las ondas que produce. Luego, pruebe con un punto en un lugar diferente, luego una línea, etc. En cuanto a las frecuencias negativas, consulte dsp.stackexchange.com/q/431/29

Responder

¿Cómo podría haber frecuencias negativas?

Los coeficientes FFT no son frecuencias, sino amplitudes complejas. El módulo del coeficiente indica la amplitud, el argumento del coeficiente indica la fase.

Tenga en cuenta que debería recibir un mensaje de advertencia o error de Matlab para calcular log(shft), dado que shft es una matriz compleja, el resultado no es real y no se puede trazar como una imagen.

Comentarios

  • Todo lo que dices es cierto, pero también está eludiendo la cuestión. Se puede interpretar que la mitad de los coeficientes corresponden a frecuencias negativas.

Respuesta

Mi primera sugerencia es que comprender FFT en 1 dimensión antes de intentar interpretar los resultados en 2D.

La Transformada Discreta de Fourier (FFT es una implementación de DFT) es una transformación compleja: transforma entre 2 vectores vectores complejos de tamaño N.

Entonces, en el caso 1D, obtendrá no solo valores negativos, sino valores complejos en general.

Lo mismo se aplica en 2D. La función imshow probablemente está tomando la parte real de la matriz compleja (no está claro en la documentación de imshow).

Respuesta

Falta el comando abs.

Intente lo siguiente:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *