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 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
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 . Debido a la periodicidad, por lo general sólo el rango 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
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).
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,
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
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
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 Y . Las relaciones bidimensionales -por DFT e inversas -por- DFT son dadas porMNMN
Y
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.MATLABfft
fft2
fftn
Las funciones , , y calcular el DFT inverso.ifft
ifft2
ifftn
Los coeficientes DFT F(p,q) son muestras de la transformación de Fourier F(ω1,ω2).
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')
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.
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
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.fftshift
F
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
En esta sección se presentan algunas de las muchas aplicaciones relacionadas con el procesamiento de imágenes de la transformación de Fourier.
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
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.Un
B
Un
B
A = magic(3); B = ones(3);
Zero-pad y para que sean al menos (M+P-1)-by-(N+Q-1).Un
B
(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.)Un
B
fft2
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.Un
B
fft2
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
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.fft2
ifft2
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.