Filtros de Paso Bajo y Paso Alto
Uno de los principales beneficios de la Transformada de Fourier es que permite realizar filtrado pasa-altas y pasa-bajas.
Después de aplicar la Transformada de Fourier:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
es necesario crear una máscara de filtrado
Filtrado Pasa-Bajas (Desenfoque)
Un filtro pasa-bajas elimina los componentes de alta frecuencia, lo que da como resultado una imagen desenfocada. Máscara pasa-bajas:
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape
: obtiene el número de filas y columnas de la imagen en escala de grises;crow, ccol = rows // 2, cols // 2
: calcula las coordenadas centrales de la imagen;mask = np.zeros((rows, cols), np.uint8)
: crea una máscara de ceros con las mismas dimensiones que la imagen;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: establece una región cuadrada de 60×60 en el centro de la máscara en 1, permitiendo que solo los componentes de baja frecuencia (cerca del centro del dominio de frecuencia) pasen, mientras filtra los detalles de alta frecuencia.
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)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
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 inicialmente se permiten pasar todas las frecuencias;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
dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
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 Inversa de Fourier 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, resultando en una imagen filtrada de 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!
single
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Can you explain the difference between high-pass and low-pass filtering in more detail?
How do I choose the size of the mask for filtering?
What are some practical applications of these filters in image processing?
Awesome!
Completion rate improved to 3.45
Filtros de Paso Bajo y Paso Alto
Desliza para mostrar el menú
Uno de los principales beneficios de la Transformada de Fourier es que permite realizar filtrado pasa-altas y pasa-bajas.
Después de aplicar la Transformada de Fourier:
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)
es necesario crear una máscara de filtrado
Filtrado Pasa-Bajas (Desenfoque)
Un filtro pasa-bajas elimina los componentes de alta frecuencia, lo que da como resultado una imagen desenfocada. Máscara pasa-bajas:
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
rows, cols = image.shape
: obtiene el número de filas y columnas de la imagen en escala de grises;crow, ccol = rows // 2, cols // 2
: calcula las coordenadas centrales de la imagen;mask = np.zeros((rows, cols), np.uint8)
: crea una máscara de ceros con las mismas dimensiones que la imagen;mask[crow-30:crow+30, ccol-30:ccol+30] = 1
: establece una región cuadrada de 60×60 en el centro de la máscara en 1, permitiendo que solo los componentes de baja frecuencia (cerca del centro del dominio de frecuencia) pasen, mientras filtra los detalles de alta frecuencia.
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)
highpass_mask[crow-5:crow+5, ccol-5:ccol+5] = 0
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 inicialmente se permiten pasar todas las frecuencias;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
dft_inverse = np.fft.ifftshift(dft_filtered) # Inverse shifting
image_filtered = np.fft.ifft2(dft_inverse) # Inverse transformation
image_filtered = np.abs(image_filtered) # Remove negative values
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 Inversa de Fourier 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, resultando en una imagen filtrada de 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!
single