Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

OpenCV con Python, Unidad 6 — Detección de bordes y gradientes, 6.2 — Detector de bordes Canny ·

Flujo del algoritmo

Detección de bordes Canny: Flujo del algoritmo

Introducción

La detección de bordes es un paso crucial en la visión por computador, ya que permite identificar los contornos de objetos y áreas de interés dentro de una imagen. El detector de bordes Canny es uno de los métodos más utilizados debido a su alta eficacia y robustez. En este artículo, exploraremos el flujo del algoritmo Canny, desde la obtención de las derivadas en todas direcciones hasta la obtención de un mapa de bordes.

Explicación principal

El detector de bordes Canny fue propuesto por Adelson y Canny en 1983. Es conocido por ser uno de los métodos más eficientes para detección de bordes, cumpliendo con tres criterios fundamentales: contundencia (capacidad de detectar el borde), invariancia a fase (no afecta la orientación del borde) y buena localización. El flujo del algoritmo Canny consta de cinco pasos:

  1. Suavizado Gaussiano: Se aplica un filtro Gaussiano para eliminar ruido, lo que ayuda a reducir las derivadas parciales, minimizando el artefacto llamado "saltos del salame".
  1. Cálculo de gradientes en todas direcciones: Se calculan las derivadas en todas las direcciones (horizontal, vertical y diagonal) utilizando convoluciones con kernels.
  1. Máximo supresión: Se suprime cualquier punto que no sea un extremo local del gradiente, reduciendo la cantidad de píxeles a considerar.
  1. Supresión de falsos bordes (supresión por ancho de borde): Se eliminan bordes sueltos o cortos basándose en el ancho del borde.
  1. Supresión suplementaria (thresholding): Finalmente, se aplica un umbral para seleccionar los bordes que son más evidentes.

A continuación, presentamos una implementación simplificada de este algoritmo en Python utilizando OpenCV:

import cv2
import numpy as np

def canny_edge_detection(image_path):
    # Leer la imagen en escala de grises
    img = cv2.imread(image_path, 0)
    
    # Paso 1: Suavizado Gaussiano
    blur_img = cv2.GaussianBlur(img, (5, 5), 0)
    
    # Paso 2: Cálculo de gradientes en todas direcciones
    sobelx = cv2.Sobel(blur_img, cv2.CV_64F, 1, 0, ksize=3)
    sobely = cv2.Sobel(blur_img, cv2.CV_64F, 0, 1, ksize=3)
    
    # Paso 3: Máximo supresión
    gradient_magnitude = np.sqrt(sobelx**2 + sobely**2)
    gradient_direction = np.arctan2(sobely, sobelx) * (180 / np.pi)
    
    # Paso 4: Supresión de falsos bordes
    non_max_suppression = cv2.nonMaxSuppression(gradient_magnitude, gradient_direction)
    
    # Paso 5: Aplicar umbral
    edges = cv2.threshold(non_max_suppression, 100, 255, cv2.THRESH_BINARY)[1]
    
    return edges

# Ejecutar la función y mostrar los resultados
edges = canny_edge_detection('image_path.jpg')
cv2.imshow('Edges', edges)
cv2.waitKey(0)

Errores típicos / trampas

Aunque el algoritmo Canny es robusto, hay varios errores comunes que pueden surgir durante su implementación:

  1. Ruido residual: Si el ruido no se elimina adecuadamente en la fase de suavizado Gaussiano, los bordes detallados pueden resultar en bordes falsos o bordeudos.
  1. Umbrales incorrectos: Los umbrales seleccionados son críticos para el éxito del algoritmo. Un umbral demasiado bajo puede capturar muchos ruido y artefactos, mientras que uno muy alto puede perder detalles importantes.
  1. Ancho de borde mal configurado: En la supresión por ancho de borde, es importante elegir un valor adecuado para el ancho del borde. Un ancho demasiado corto puede eliminar bordes verdaderos, mientras que uno muy largo puede no reducir suficientemente los falsos bordes.

Checklist accionable

Al implementar la detección de bordes Canny en tu proyecto, ten presente estos puntos clave:

  1. Verifica la calidad del suavizado: Asegúrate de que el suavizado Gaussiano sea lo suficientemente fuerte para eliminar el ruido pero no tanto como para distorsionar los contornos.
  1. Ajusta los umbrales adecuadamente: Experimenta con diferentes valores de umbral para encontrar una configuración óptima que capture los bordes relevantes sin perder detalles menores.
  1. Suprime correctamente el ruido: Configura adecuadamente el ancho del borde en la supresión por ancho de borde, y ajusta si es necesario.
  1. Valida los resultados: Antes de aplicar un umbral final, considera usar una visualización interactiva o guardar varios pasos para revisar manualmente.
  1. Optimiza el rendimiento: Si trabajas con imágenes grandes, considera implementar técnicas de procesamiento en paralelo o optimizar la implementación para reducir el tiempo de ejecución.

Cierre: Siguientes pasos

Ahora que has aprendido sobre el flujo del algoritmo Canny y sus trampas comunes, estás listo para aplicarlo a tus propios proyectos. Aquí hay algunos pasos siguientes:

  • Aplica el algoritmo en tu proyecto: Usa la implementación proporcionada como punto de partida e incorpora los cambios necesarios para adaptarlo a tus necesidades específicas.
  • Aprende más sobre visión por computador con Deep Learning: Si quieres avanzar más allá del Canny, considera estudiar cómo se aplican los algoritmos de aprendizaje profundo en la detección de bordes y segmentación de imágenes.
  • Explore OpenCV para otros propósitos: OpenCV tiene muchas otras funciones útiles que pueden complementar tu conocimiento sobre visión por computador, como el procesamiento de video o la detección de movimiento.

Siguiendo estos pasos, podrás mejorar tus habilidades en la detección de bordes y aplicarlas de manera efectiva a diversos problemas de visión por computador.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).