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.

Transformación de Fourier

Definición de Transformación de Fourier

La transformación de Fourier es una representación de una imagen como una suma de exponenciales complejos de diferentes magnitudes, frecuencias y fases. La transformación de Fourier desempeña un papel fundamental en una amplia gama de aplicaciones de procesamiento de imágenes, incluida 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, a continuación, eltransformación bidimensional de Fourier 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 defrecuencia-dominio 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 muestra. 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 transformación de Fourier.componente constanteComponente de CC (DC significa corriente directa; es un término de ingeniería eléctrica que se refiere a una fuente de alimentación de voltaje constante, a diferencia de una fuente de alimentación 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 transformación inversa bidimensional de Fourier es dada por

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

En términos generales, esta ecuación significa que f(m,n) se puede representar como una suma de un número infinito de exponenciales complejos (sinusoidos) con diferentes frecuencias. La magnitud y la fase de la contribución a las frecuencias (ω1,ω2) son dadas por F(ω1,ω2).

Visualización de la transformación de Fourier

Para ilustrar, considere una función f(m,n) que es igual a 1 dentro de una región rectangular y 0 en todas partes. 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 siguiente figura muestra, como una gráfica de malla, la magnitud de la transformación de Fourier,

|F(ω1,ω2)|,

de la función rectangular que se muestra en la figura anterior. La gráfica de malla de la magnitud es una forma común de visualizar la transformación de Fourier.

Imagen de magnitud de una función rectangular

El pico en el centro de la parcela 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 transformación de Fourier es mostrar

log|F(ω1,ω2)|

como imagen, como se muestra.

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

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

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

Transformaciones de Fourier de algunas formas simples

Transformación discreta de Fourier

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

  • La entrada y salida del DFT son discretas, lo que lo hace conveniente para manipulaciones informáticas.

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

El DFT se define generalmente para una función discreta f(m,n) que es distinto de cero sólo sobre 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 DFT de f(m,n). El coeficiente de frecuencia cero, F(0,0), a menudo se llama el "componente 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 calcular el DFT unidimensional, DFT bidimensional y DFT en N, respectivamente.MATLABfftfft2fftn Las funciones , , y calcular el DFT inverso.ifftifft2ifftn

Relación con la transformación de Fourier

Los coeficientes DFT F(p,q) son muestras de la transformación 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

Visualización de la transformación discreta de Fourier

  1. Construir 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 otro lugar. Utilice una imagen binaria para representar f(m,n).

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

  2. Calcular y visualizar el 30-por 30 DFT de con estos comandos.f

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

    Transformación discreta de Fourier calculada sin relleno

    Esta gráfica difiere de la transformación de Fourier que se muestra en .Visualización de la transformación de Fourier En primer lugar, el muestreo de la transformación de Fourier es mucho más grueso. En segundo lugar, 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 un muestreo más fino de la transformación de Fourier, agregue cero relleno al calcular su DFT.f El relleno cero y el cálculo DFT se pueden realizar en un solo paso con este comando.

    F = fft2(f,256,256);

    Este comando zero-pads será 256-por-256 antes de calcular el DFT.f

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

    Transformación discreta de Fourier 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 que se muestra en .Visualización de la transformación de Fourier

Aplicaciones de la transformación de Fourier

En esta sección se presentan algunas de las muchas aplicaciones relacionadas con el procesamiento de imágenes de la transformación de Fourier.

Respuesta de frecuencia de filtros lineales

La transformación de Fourier de la respuesta de impulso de un filtro lineal proporciona 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 las frecuencias altas.

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ñar filtros lineales en el dominio de frecuencia

Realizar convolución rápida utilizando la transformación de Fourier

Este ejemplo muestra cómo realizar la convolución rápida de dos matrices mediante la transformación de Fourier. Una propiedad clave de la transformación 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 transformación rápida de Fourier, forma la base para un algoritmo de convolución rápida.

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

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

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

Zero-pad y para que sean al menos (M+P-1)-by-(N+Q-1).UnB (A menudo y están acolchados cero a un tamaño que es una potencia de 2 porque es más rápido para estos tamaños.)UnBfft2 El ejemplo rellena las matrices para que sean 8 por 8.

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

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

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

Extraiga la parte distinta de cero del resultado y elimine 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 localizar características de imagen

En este ejemplo se muestra cómo utilizar la transformación 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, la correlación se denomina a menudo .coincidencia de plantillas

Lea una imagen de ejemplo en el espacio 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);

Calcular la correlación de la imagen de plantilla con la imagen original girando la imagen de plantilla 180 grados y, a continuación, utilizando la técnica de convolución basada en FFT. (La convolución es equivalente a la correlación si gira el núcleo de convolución 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 de píxel máximo y, a continuación, defina un valor de umbral menor que este máximo. La imagen de umbral muestra las ubicaciones de estos picos como manchas blancas en la imagen de correlación umbral. (Para que las ubicaciones sean más fáciles de ver en esta figura, el ejemplo dilata 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.