Filtrado bilateral en Python

Aditya Raj 30 enero 2023
  1. ¿Qué es el filtrado bilateral?
  2. Pasos para realizar el filtrado bilateral en Python
  3. la función bilateralFilter() en Python
  4. Utilice la función bilateralFilter() para realizar el filtrado bilateral en Python
Filtrado bilateral en Python

El filtrado se utiliza para procesar imágenes en aplicaciones de visión artificial. Este artículo discutirá la implementación del filtrado bilateral en Python utilizando el módulo OpenCV.

¿Qué es el filtrado bilateral?

El filtrado bilateral es una técnica de filtrado de suavizado. Es un filtro no lineal y reductor de ruido que reemplaza cada valor de píxel con el valor de píxel promedio ponderado de los vecinos.

El filtrado bilateral también se denomina filtrado de preservación de bordes, ya que no promedia el píxel en los bordes.

Pasos para realizar el filtrado bilateral en Python

Para realizar el filtrado bilateral, realizamos principalmente cuatro tareas.

  1. Reemplazamos cada píxel de la imagen con el promedio ponderado de sus vecinos.

  2. El peso de cada vecino se decide por su distancia desde el píxel actual. Asignamos a cada píxel un peso donde los píxeles más cercanos obtienen el peso más alto y los píxeles distantes reciben el peso más bajo.

    Para realizar esta tarea, utilizamos un parámetro espacial.

  3. El peso del vecino también depende de la diferencia de intensidad de los píxeles. A los píxeles con una intensidad similar al píxel actual se les asigna más peso, mientras que a los píxeles con grandes diferencias de intensidad se les asigna un peso menor.

    Para realizar esta tarea, usamos un parámetro de rango.

  4. Al aumentar el parámetro espacial, puede suavizar las características más grandes de la imagen. Por otro lado, si aumenta el parámetro de rango, el filtrado bilateral se comporta como un filtrado gaussiano.

la función bilateralFilter() en Python

Podemos realizar un filtrado bilateral en Python usando el módulo OpenCV usando la función bilateralFilter(). La sintaxis de la función bilateralFilter() es la siguiente.

bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)

Aquí,

  • El parámetro src toma como argumento de entrada la imagen de origen que se tiene que procesar.

  • El parámetro d toma el diámetro de la vecindad en la que se van a considerar los píxeles durante el filtrado.

  • El parámetro sigmaColor es el valor del filtro sigma en el espacio de color. Tener un valor más alto de sigmaColor significa que los colores más alejados en el espacio de color se consideran durante el filtrado.

    El parámetro sigmaColor debe contener un valor en el rango de sigmaSpace.

  • El parámetro sigmaSpace denota el valor de sigma en el dominio espacial. Un valor más alto de sigmaSpace significa que los píxeles más alejados del píxel actual se consideran durante el filtrado.

    El parámetro sigmaSpace debe contener un valor en el rango de sigmaColor.

  • El parámetro borderType se usa para definir un modo para extrapolar los píxeles fuera de la imagen mientras se filtran los píxeles en los límites de la imagen.

Utilice la función bilateralFilter() para realizar el filtrado bilateral en Python

Los siguientes son los pasos para realizar el filtrado bilateral en Python.

  • Primero, importaremos cv2.
  • A continuación, abriremos una imagen utilizando la función imread(), que toma la ruta del archivo de una imagen como argumento de entrada y devuelve un array que representa la imagen.
  • Guardaremos el array en una variable img.
  • Después de cargar la imagen, usaremos la función bilateralFilter() para realizar el funcionamiento bilateral en Python. Después de la ejecución, la función bilateralFilter() devuelve un array que contiene la imagen procesada.
  • Después de obtener la imagen procesada, la guardaremos en el sistema de archivos utilizando la función imwrite(), que toma una cadena que contiene el nombre del archivo de salida como su primer argumento de entrada y la matriz que contiene la imagen procesada como su segunda entrada. argumento. Después de ejecutar la función, el archivo se guarda en el sistema de archivos.

A continuación se muestra la imagen que usaremos para realizar el filtrado bilateral en Python.

patrón

El siguiente es el código para realizar el filtrado bilateral en Python.

import cv2

img = cv2.imread("pattern.jpg")
output_image = cv2.bilateralFilter(img, 15, 100, 100)
cv2.imwrite("processed_image.jpg", output_image)

Aquí está la imagen de salida después de realizar un filtrado bilateral en la imagen de entrada:

imagen procesada de python de filtro bilateral

En la imagen dada, puede observar que las características de las tiras se han desenfocado en la imagen de salida. Esto se debe a que los píxeles vecinos de cada píxel se consideran al crear el píxel de salida.

El promedio de los píxeles da un efecto de desenfoque y las características se ven borrosas.

En comparación con el filtrado gaussiano, el filtrado bilateral conserva los bordes. Por lo tanto, mientras realiza operaciones de suavizado, siempre puede usar el filtrado bilateral si necesita conservar los bordes de su imagen.

Autor: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub