Filtros de Paso Bajo y Paso Alto
Uno de los principales beneficios de la Transformada de Fourier es que nos permite realizar filtrado de alta y baja frecuencia.
Después de aplicar la Transformada de Fourier:
es necesario crear una máscara de filtrado
Filtrado de Baja Frecuencia (Desenfoque)
Un filtro de baja frecuencia elimina los componentes de alta frecuencia, lo que da como resultado una imagen desenfocada. Máscara de baja frecuencia:
rows, cols = image.shape
: retrieves the number of rows and columns from the grayscale image;crow, ccol = rows // 2, cols // 2
: computes the center coordinates of the image;mask = np.zeros((rows, cols), np.uint8)
: creates a mask of zeros with the same dimensions as the image;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: sets a 60×60 square region at the center of the mask to 1, allowing only the low-frequency components (near the center of the frequency domain) to pass through while filtering out high-frequency details.
Filtrado de alta frecuencia (Detección de bordes)
Un filtro de alta frecuencia elimina los componentes de baja frecuencia y realza los bordes. Máscara de alta frecuencia:
highpass_mask = np.ones((rows, cols), np.uint8)
: inicializa una máscara de unos con las mismas dimensiones que la imagen, lo que significa que todas las frecuencias están permitidas inicialmente;highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
: establece un pequeño cuadrado de 10×10 en el centro (región de baja frecuencia) en cero, bloqueando efectivamente esas frecuencias.
Aplicación del filtro
Después de crear la máscara, se debe aplicar un filtro y transformar la imagen de nuevo al dominio espacial:
dft_filtered = dft_shift * mask
: aplica la máscara en el dominio de la frecuencia (por ejemplo, pasa bajos o pasa altos) mediante la multiplicación elemento a elemento con la DFT desplazada de la imagen;dft_inverse = np.fft.ifftshift(dft_filtered)
: revierte el desplazamiento aplicado anteriormente para devolver los componentes de frecuencia a sus posiciones originales;image_filtered = np.fft.ifft2(dft_inverse)
: calcula la Transformada de Fourier Inversa para convertir los datos de frecuencia filtrados nuevamente al dominio espacial;image_filtered = np.abs(image_filtered)
: toma el valor absoluto para eliminar cualquier componente imaginario residual, obteniendo así una imagen filtrada con valores reales.
Swipe to start coding
Se proporciona una imagen de una oveja en la variable image
y una imagen en el dominio de la frecuencia en la variable dft_shift
:
- Obtener la forma de la matriz
image
y almacenarla en las variablesrows
ycols
; - Calcular el punto central y almacenarlo en
crow
yccol
; - Definir
low_mask
como un arreglo de ceros con forma(rows, cols)
y tiponp.uint8
; - Seleccionar la región central de 20x20 de
low_mask
y rellenarla con1
. - Definir
high_mask
como un arreglo de unos con forma(rows, cols)
y tiponp.uint8
; - Seleccionar la región central de 20x20 de
high_mask
y rellenarla con0
; - Aplicar
low_mask
yhigh_mask
adft_shift
y almacenar las frecuencias filtradas enlowpass_dft_filtered
yhighpass_dft_filtered
respectivamente; - Realizar la transformación inversa para
lowpass_dft_filtered
:- Realizar el desplazamiento inverso y almacenar en
lowpass_dft_inverse
; - Realizar la transformación inversa y almacenar la imagen en
image_lowpass
; - Eliminar los valores negativos de
image_lowpass
.
- Realizar el desplazamiento inverso y almacenar en
- Realizar la transformación inversa para
highpass_dft_inverse
:- Realizar el desplazamiento inverso y almacenar en
lowpass_dft_inverse
; - Realizar la transformación inversa y almacenar la imagen en
image_highpass
; - Eliminar los valores negativos de
image_highpass
.
- Realizar el desplazamiento inverso y almacenar en
Solución
¡Gracias por tus comentarios!