Filtros espaciales: filtro promedio y filtro mediano en procesamiento de imágenes

La técnica de filtrado espacial se utiliza directamente en los píxeles de una imagen. Por lo general, se considera que la máscara se agrega en tamaño para que tenga un píxel central específico. Esta máscara se mueve en la imagen de manera que el centro de la máscara atraviesa todos los píxeles de la imagen.
En este artículo, vamos a cubrir los siguientes temas: 

  • Escribir un programa en Python para implementar un filtro promedio de dominio espacial y observar su efecto de desenfoque en la imagen sin usar funciones incorporadas 
  • Para escribir un programa en Python para implementar un filtro mediano de dominio espacial para eliminar el ruido de sal y pimienta sin usar funciones integradas 

Teoría

  • Procesamiento de vecindad en el dominio espacial: aquí, para modificar un píxel, también consideramos los valores de los píxeles vecinos inmediatos. Para este propósito, se puede considerar una máscara de vecindario de 3X3, 5X5 o 7X7. A continuación se muestra un ejemplo de una máscara 3X3.
f(x-1, y-1) f(x-1, y) f(x-1, y+1)
f(x, y-1) f(x, y) f(x, y+1)
f(x+1, y-1) f(x+1, y) f(x+1, y+1)
  • Filtrado de paso bajo: también se conoce como filtro de suavizado. Elimina el contenido de alta frecuencia de la imagen. También se utiliza para desenfocar una imagen. Como se muestra, se muestra una máscara de filtro de promedio de paso bajo.
1/9 1/9 1/9
1/9 1/9 1/9
1/9 1/9 1/9
  • Filtrado de paso alto: elimina las regiones de baja frecuencia mientras retiene o mejora los componentes de alta frecuencia. Se muestra una máscara de filtrado de paso alto.
-1/9 -1/9 -1/9
-1/9 8/9 -1/9
-1/9 -1/9 -1/9
  • Filtrado mediano: también se conoce como filtrado no lineal. Se utiliza para eliminar el ruido de sal y pimienta. Aquí, el valor del píxel se reemplaza por el valor medio del píxel vecino. 

A continuación se muestra la implementación.

Imagen de entrada:  

Filtro promedio: 

Python3

# Low Pass SPatial Domain Filtering
# to observe the blurring effect
 
 
import cv2
import numpy as np
  
     
# Read the image
img = cv2.imread('sample.png', 0)
 
# Obtain number of rows and columns
# of the image
m, n = img.shape
  
# Develop Averaging filter(3, 3) mask
mask = np.ones([3, 3], dtype = int)
mask = mask / 9
  
# Convolve the 3X3 mask over the image
img_new = np.zeros([m, n])
 
for i in range(1, m-1):
    for j in range(1, n-1):
        temp = img[i-1, j-1]*mask[0, 0]+img[i-1, j]*mask[0, 1]+img[i-1, j + 1]*mask[0, 2]+img[i, j-1]*mask[1, 0]+ img[i, j]*mask[1, 1]+img[i, j + 1]*mask[1, 2]+img[i + 1, j-1]*mask[2, 0]+img[i + 1, j]*mask[2, 1]+img[i + 1, j + 1]*mask[2, 2]
        
        img_new[i, j]= temp
         
img_new = img_new.astype(np.uint8)
cv2.imwrite('blurred.tif', img_new)

Producción:

averaging-filter-image-processing

En el ejemplo anterior, se observa que la imagen filtrada está ligeramente borrosa. Si aumentamos el tamaño de la máscara de promedio, se puede obtener más desenfoque. 

Filtrado mediano: 

Python3

# Median Spatial Domain Filtering
 
 
import cv2
import numpy as np
 
 
# Read the image
img_noisy1 = cv2.imread('sample.png', 0)
 
# Obtain the number of rows and columns
# of the image
m, n = img_noisy1.shape
  
# Traverse the image. For every 3X3 area,
# find the median of the pixels and
# replace the center pixel by the median
img_new1 = np.zeros([m, n])
 
for i in range(1, m-1):
    for j in range(1, n-1):
        temp = [img_noisy1[i-1, j-1],
               img_noisy1[i-1, j],
               img_noisy1[i-1, j + 1],
               img_noisy1[i, j-1],
               img_noisy1[i, j],
               img_noisy1[i, j + 1],
               img_noisy1[i + 1, j-1],
               img_noisy1[i + 1, j],
               img_noisy1[i + 1, j + 1]]
         
        temp = sorted(temp)
        img_new1[i, j]= temp[4]
 
img_new1 = img_new1.astype(np.uint8)
cv2.imwrite('new_median_filtered.png', img_new1)

Producción:

median-filter-image-processing

En el ejemplo anterior, podemos ver que la imagen mediana filtrada se mejora considerablemente sin apenas ruido de sal y pimienta.
 

Publicación traducida automáticamente

Artículo escrito por AmiMunshi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *