Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

La transformada de Fourier

Definición de transformación de Fourier

La transformada de Fourier es una representación de una imagen como una suma de exponenciales complejos de diferentes magnitudes, frecuencias y fases. La transformada de Fourier desempeña un papel fundamental en una amplia gama de aplicaciones de procesamiento de imágenes, incluyendo la mejora, el análisis, la restauración y la compresión.

Si f(m,n) es una función de dos variables espaciales discretas m Y n, entonces el detwo-dimensional Fourier transform f(m,n) se define por la relación

F(ω1,ω2)=m=n=f(m,n)ejω1mejω2n.

Las variables ω1 Y ω2 son variables de frecuencia; sus unidades son radianes por muestra. F(ω1,ω2) a menudo se llama la representación defrequency-domain f(m,n). F(ω1,ω2) es una función de valor complejo que es periódica tanto en ω1 Y ω2, con período 2π. Debido a la periodicidad, por lo general sólo el rango πω1,ω2π se visualiza. Tenga en cuenta que F(0,0) es la suma de todos los valores de f(m,n). Por esta razón, F(0,0) a menudo se llama la o de la transformada de Fourier.constant componentDC component (DC significa corriente continua; es un término de ingeniería eléctrica que se refiere a una fuente de energía de voltaje constante, en contraposición a una fuente de energía cuyo voltaje varía sinusoidalmente.)

La inversa de una transformación es una operación que cuando se realiza en una imagen transformada produce la imagen original. La transformada inversa de Fourier bidimensional es dada por

f(m,n)=14π2ω1=ππω2=ππF(ω1,ω2)ejω1mejω2ndω1dω2.

Hablando más o menos, esta ecuación significa que f(m,n) puede representarse como una suma de un número infinito de exponenciales complejos (sinusoides) con diferentes frecuencias. La magnitud y la fase de la contribución en las frecuencias (ω1,ω2) son dadas por F(ω1,ω2).

Visualizando la transformada de Fourier

Para ilustrar, considere una función f(m,n) que equivale a 1 dentro de una región rectangular y 0 en cualquier otro lugar. Para simplificar el diagrama, f(m,n) se muestra como una función continua, aunque las variables y son discretas.mn

Función rectangular

La figura siguiente muestra, como una gráfica de malla, la magnitud de la transformada de Fourier,

|F(ω1,ω2)|,

de la función rectangular mostrada en la figura anterior. La gráfica de malla de la magnitud es una forma común de visualizar la transformada de Fourier.

Imagen de magnitud de una función rectangular

El pico en el centro de la trama es F(0,0), que es la suma de todos los valores en f(m,n). La trama también muestra que F(ω1,ω2) tiene más energía a altas frecuencias horizontales que a altas frecuencias verticales. Esto refleja el hecho de que las secciones transversales horizontales de f(m,n) son pulsos estrechos, mientras que las secciones transversales verticales son pulsos anchos. Los pulsos estrechos tienen más contenido de alta frecuencia que los pulsos anchos.

Otra forma común de visualizar la transformada de Fourier es mostrar

log|F(ω1,ω2)|

como una imagen, como se muestra.

Registro de la transformada de Fourier de una función rectangular

El uso del logaritmo ayuda a sacar detalles de la transformada de Fourier en regiones donde F(ω1,ω2) está muy cerca de 0.

A continuación se muestran ejemplos de la transformada de Fourier para otras formas simples.

Transformaciones de Fourier de algunas formas simples

La transformada de Fourier discreta

Trabajar con la transformada de Fourier en un ordenador suele implicar una forma de transformación conocida como la transformada discreta de Fourier (DFT). Una transformación discreta es una transformación cuyos valores de entrada y salida son muestras discretas, por lo que es conveniente para la manipulación del equipo. Hay dos razones principales para usar esta forma de transformación:

  • La entrada y salida de la DFT son discretas, lo que hace que sea conveniente para las manipulaciones del ordenador.

  • Hay un algoritmo rápido para calcular el DFT conocido como la transformada rápida de Fourier (FFT).

El DFT se define generalmente para una función discreta f(m,n) que es distinto de cero en la región finita 0mM1 Y 0nN1. Las relaciones bidimensionales-por-DFT e inversas-por-DFT son dadas porMNMN

F(p,q)=m=0M1n=0N1f(m,n)ej2πpm/Mej2πqn/N   p=0, 1, ..., M1q=0, 1, ..., N1

Y

f(m,n)=1MNp=0M1q=0N1F(p,q)ej2πpm/Mej2πqn/N   m=0, 1, ..., M1 n=0, 1, ..., N1

Los valores F(p,q) son los coeficientes de DFT de f(m,n). El coeficiente de frecuencia cero, F(0,0), a menudo se llama el "componente de DC." DC es un término de ingeniería eléctrica que significa corriente directa. (Tenga en cuenta que los índices de matriz en siempre comienzan en 1 en lugar de 0; por lo tanto, los elementos de matrizMATLAB® f(1,1) Y F(1,1) corresponden a las cantidades matemáticas f(0,0) Y F(0,0), respectivamente.)

Las funciones, e implementan el algoritmo de transformación rápida de Fourier para computar el DFT unidimensional, DFT bidimensional, y el DFT N-dimensional, respectivamente.MATLABfftfft2fftn Las funciones, y calcular el DFT inverso.ifftifft2ifftn

Relación con la transformada de Fourier

Los coeficientes DFT F(p,q) son muestras de la transformada de Fourier F(ω1,ω2).

F(p,q)=F(ω1,ω2)|ω1=2πp/Mω2=2πq/Np=0,1,...,M1q=0,1,...,N1

Visualizando la transformada de Fourier discreta

  1. Construya una matriz que sea similar a la funciónf f(m,n) en el ejemplo en.Definición de transformación de Fourier Recuerde que f(m,n) es igual a 1 dentro de la región rectangular y 0 en otros lugares. Utilice una imagen binaria para representar f(m,n).

    f = zeros(30,30); f(5:24,13:17) = 1; imshow(f,'InitialMagnification','fit')

  2. Calcule y visualice la DFT de 30 por 30 con estos comandos.f

    F = fft2(f); F2 = log(abs(F)); imshow(F2,[-1 5],'InitialMagnification','fit'); colormap(jet); colorbar

    Transformada de Fourier discreta calculada sin relleno

    Esta trama difiere de la transformada de Fourier mostrada en.Visualizando la transformada de Fourier En primer lugar, el muestreo de la transformada de Fourier es mucho más grueso. Segundo, el coeficiente de frecuencia cero se muestra en la esquina superior izquierda en lugar de la ubicación tradicional en el centro.

  3. Para obtener una muestra más fina de la transformada de Fourier, agregue cero relleno al calcular su DFT.f El relleno de cero y el cálculo de DFT se pueden realizar en un solo paso con este comando.

    F = fft2(f,256,256);

    Este comando cero-pads para ser 256-by-256 antes de calcular el DFT.f

    imshow(log(abs(F)),[-1 5]); colormap(jet); colorbar

    Transformada de Fourier discreta calculada con relleno

  4. El coeficiente de frecuencia cero, sin embargo, todavía se muestra en la esquina superior izquierda en lugar del centro. Puede solucionar este problema utilizando la función, que intercambia los cuadrantes de modo que el coeficiente de frecuencia cero esté en el centro.fftshiftF

    F = fft2(f,256,256);F2 = fftshift(F); imshow(log(abs(F2)),[-1 5]); colormap(jet); colorbar

    La gráfica resultante es idéntica a la mostrada en.Visualizando la transformada de Fourier

Las aplicaciones de la transformada de Fourier

Esta sección presenta algunas de las muchas aplicaciones relacionadas con el procesamiento de imágenes de la transformada de Fourier.

Respuesta de frecuencia de filtros lineales

La transformada de Fourier de la respuesta de impulso de un filtro lineal da la respuesta de frecuencia del filtro. La función calcula y muestra la respuesta de frecuencia de un filtro.freqz2 La respuesta de frecuencia del kernel de convolución gaussiana muestra que este filtro pasa frecuencias bajas y atenúa altas frecuencias.

h = fspecial('gaussian'); freqz2(h)

Respuesta de frecuencia de un filtro gaussiano

Consulte para obtener más información sobre el filtrado lineal, el diseño de filtros y las respuestas de frecuencia.Diseñe filtros lineales en el dominio de frecuencia

Realizar Convolución rápida mediante la transformación de Fourier

Este ejemplo muestra cómo realizar una convolución rápida de dos matrices utilizando la transformada de Fourier. Una propiedad clave de la transformada de Fourier es que la multiplicación de dos transformaciones de Fourier corresponde a la convolución de las funciones espaciales asociadas. Esta propiedad, junto con la transformada rápida de Fourier, constituye la base de un algoritmo de convolución rápido.

Nota: El método de convolución basado en FFT se utiliza con mayor frecuencia para entradas grandes. Para las entradas pequeñas es generalmente más rápido utilizar la función.imfilter

Cree dos matrices simples y. es una matriz M-by-N y es una matriz P-by-Q.UnBUnB

A = magic(3); B = ones(3);

Cero-Pad y por lo que son por lo menos (M + P-1)-por-(N + Q-1).UnB (A menudo y son de relleno cero a un tamaño que es una potencia de 2 porque es más rápido para estos tamaños.)UnBfft2 El ejemplo pads las matrices para ser 8-por-8.

A(8,8) = 0; B(8,8) = 0;

Calcule el DFT bidimensional de y utilizando la función.UnBfft2 Multiplique los dos DFTs juntos y calcule el DFT inverso bidimensional del resultado usando la función.ifft2

C = ifft2(fft2(A).*fft2(B));

Extraiga la parte distinta de cero del resultado y quite la parte imaginaria causada por el error de redondeo.

C = C(1:5,1:5); C = real(C)
C = 5×5

    8.0000    9.0000   15.0000    7.0000    6.0000
   11.0000   17.0000   30.0000   19.0000   13.0000
   15.0000   30.0000   45.0000   30.0000   15.0000
    7.0000   21.0000   30.0000   23.0000    9.0000
    4.0000   13.0000   15.0000   11.0000    2.0000

Realizar correlación basada en FFT para ubicar las entidades de imagen

Este ejemplo muestra cómo utilizar la transformada de Fourier para realizar la correlación, que está estrechamente relacionada con la convolución. La correlación se puede utilizar para localizar entidades dentro de una imagen. En este contexto, se suele llamar a la correlación.template matching

Lea una imagen de muestra en el área de trabajo.

bw = imread('text.png');

Cree una plantilla para la coincidencia extrayendo la letra "a" de la imagen. Tenga en cuenta que también puede crear la plantilla mediante la sintaxis interactiva de la función.imcrop

a = bw(32:45,88:98);

Calcule la correlación de la imagen de plantilla con la imagen original girando la imagen de plantilla en 180 grados y, a continuación, utilizando la técnica de convolución basada en FFT. (La convolución equivale a la correlación si se rota el kernel de convolución en 180 grados.) Para hacer coincidir la plantilla con la imagen, utilice las funciones y.fft2ifft2 En la imagen resultante, los picos brillantes corresponden a las apariciones de la letra.

C = real(ifft2(fft2(bw) .* fft2(rot90(a,2),256,256))); figure imshow(C,[]) % Scale image to appropriate display range.

Para ver las ubicaciones de la plantilla en la imagen, busque el valor máximo de píxel y, a continuación, defina un valor de umbral que sea menor que este máximo. La imagen de umbral muestra las ubicaciones de estos picos como manchas blancas en la imagen de correlación de umbral. (Para que las ubicaciones sean más fáciles de ver en esta figura, el ejemplo Dilate la imagen de umbral para ampliar el tamaño de los puntos.)

max(C(:))
ans = 68 
thresh = 60; % Use a threshold that's a little less than max. D = C > thresh; se = strel('disk',5); E = imdilate(D,se); figure imshow(E) % Display pixels with values over the threshold.