Blog
Suavizando imágenes
- Publicado por: Alberto Sosa-Costa
- Categoría: Blog OpenCV Procesamiento de Imagenes
Aplicar filtros personalizados a imágenes (convolución 2D).
Difuminar imágenes utilizando diferentes filtros pasa bajo.
Suavizando Imágenes con OpenCV
En el proceso de alisado (smoothing en inglés) las imágenes son difuminadas. Una imagen se ve más nítida o más detallada si somos capaces de percibir todos los objetos y sus formas, correctamente, en ella. Mientras menos definidos son los bordes de las formas individuales dentro de la imagen, más difícil es distinguir una forma de otra. Esto es precisamente lo que hace el alisado, es decir, reducir el contenido de los bordes de las formas en la imagen, suavizando así la transición entre los distintos colores. Para este fin se utilizan filtros de imágenes.
Convolución 2D (Filtrado de imágenes)
Al igual que las señales unidimensionales, las imágenes también pueden ser filtradas con varios tipos de filtros, como por ejemplo, filtros pasa bajo (FPB), filtros pasa alto (FPA), filtros pasa banda, etc. Mientras que un FPB ayuda a eliminar el ruido en la imagen o a difuminar la imagen, un FPA ayuda a encontrar los bordes en una imagen. La función cv2.filter2D(), disponible en OpenCV, permite aplicar una convolución entre un kernel dado y una imagen. Un ejemplo de un kernel es un filtro para promediar, como el FPB de 5×5 que se muestra a continuación:

import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('TajMahal.jpg') #Crea el kernel kernel = np.ones((5,5),np.float32)/25 #Filtra la imagen utilizando el kernel anterior dst = cv2.filter2D(img,-1,kernel) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(dst),plt.title('Promediada') plt.xticks([]), plt.yticks([]) plt.show()
Difuminando imágenes (alisando o suavizando imágenes)
Promedio
Si no desea utilizar un filtro de caja normalizado, utilice cv2.boxFilter() y pase el argumento normalize = False a la función.
import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('TajMahal.jpg') blur = cv2.blur(img,(3,3)) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title('Difuminada') plt.xticks([]), plt.yticks([]) plt.show()
Filtro Gaussiano
Si sólo se especifica sigmaX, sigmaY se toma como igual a sigmaX. Si ambas se pasan como ceros, se calculan a partir del tamaño del núcleo.
blur = cv2.GaussianBlur(img,(5,5),0)

Filtro de Mediana
median = cv2.medianBlur(img,5)

¡Felicidades por completar esta lección! El suavizado de imágenes es uno de tantos efectos que podemos darle a nuestras imágenes con OpenCV. En nuestro curso Python de OpenCV puedes aprender mucho más de OpenCV:
[…] ➡ Suavizando Imágenes […]
[…] a la convolución 2D, en el proceso de erosionado un kernel se desliza a través de la imagen. Un píxel de la imagen […]