Canny Edge Detection
La detección de bordes de Canny es un algoritmo de varias etapas que reduce el ruido, detecta cambios bruscos de brillo y crea mapas de bordes finos para la visión artificial.
La detección de bordes de Canny es un algoritmo de procesamiento de imágenes de varias etapas que identifica cambios bruscos de brillo y los convierte en un mapa de bordes binario y fino. Reduce el ruido, localiza las transiciones de intensidad y conecta los píxeles de borde fiables para formar contornos. En la visión artificial, estos contornos describen la estructura de la imagen para analizar formas y realizar mediciones.
John Canny desarrolló el método en 1983 y lo describió en su artículo de 1986, A Computational Approach to Edge Detection. Su diseño equilibra tres objetivos: detectar bordes reales, localizarlos con precisión y producir una sola respuesta por borde. «Detector de bordes de Canny» es un sinónimo del algoritmo.
Cómo funciona la detección de bordes de Canny#
El algoritmo combina el preprocesamiento de datos con el filtrado y el análisis de conectividad. Sus cinco etapas tienen funciones distintas:
- Reducción del ruido: El suavizado gaussiano promedia los píxeles cercanos con pesos que dependen de la distancia y suprime las fluctuaciones que crearían bordes no deseados.
- Estimación del gradiente: Las derivadas horizontal y vertical miden la rapidez con que cambia el brillo. Al combinarlas se obtiene la intensidad del borde y una dirección perpendicular al límite. OpenCV utiliza derivadas de Sobel en esta etapa.
- Adelgazamiento de bordes: La supresión de no máximos conserva los picos locales del gradiente en la dirección del gradiente y produce líneas finas en lugar de franjas anchas.
- Doble umbral: Un umbral alto identifica los bordes fuertes; uno bajo elimina las respuestas débiles. Los píxeles situados entre ambos umbrales se convierten en candidatos.
- Enlace por histéresis: Los píxeles candidatos se conservan si están conectados a un borde fuerte a través de otros candidatos. Los candidatos aislados desaparecen.
Umbrales, suavizado y modos de fallo#
Los umbrales se aplican a la intensidad del gradiente, no al brillo sin procesar ni a la confianza del modelo. Si los bajas, conservas más detalles y ruido; si los subes, eliminas los límites débiles. Subir el umbral alto también reduce las semillas de bordes fuertes disponibles para la conexión por histéresis.
La escala gaussiana controla una compensación distinta. Un mayor suavizado suprime el ruido, pero elimina las estructuras finas. En el ejemplo del cuadrado con ruido de scikit-image, cambiar la desviación estándar gaussiana modifica cuánto ruido permanece alrededor del cuadrado.
En la inspección de grietas, las superficies de hormigón rugosas producen bordes de textura no deseados y contornos de grietas incompletos. Aumentar los umbrales elimina algunos bordes falsos, pero también hace que se pierdan secciones reales de las grietas.
Sobel estima las derivadas de intensidad; Canny combina la estimación del gradiente con el suavizado, el adelgazamiento y la selección basada en la conectividad. La etapa de adelgazamiento de Canny compara píxeles vecinos, mientras que la NMS para detección de objetos compara cajas predichas que se solapan.
Detección de bordes de Canny en Python#
Instala las dependencias con pip install opencv-python numpy. Este ejemplo usa OpenCV para guardar un mapa de bordes de la muestra del autobús:
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
encoded = np.frombuffer(response.read(), dtype=np.uint8)
gray = cv2.imdecode(encoded, cv2.IMREAD_GRAYSCALE)
# Suaviza la imagen antes de calcular los gradientes de intensidad.
smoothed = cv2.GaussianBlur(gray, (5, 5), 1.4)
edges = cv2.Canny(smoothed, 50, 150, L2gradient=True)
cv2.imwrite("canny_edges.png", edges)El PNG guardado muestra los bordes conservados en blanco sobre un fondo negro. En el flujo de trabajo de detección de bordes de OpenCV, el segundo y el tercer argumento de Canny especifican los umbrales bajo y alto. L2gradient=True usa la magnitud euclídea del gradiente; el valor predeterminado usa la suma de las derivadas horizontales y verticales en valor absoluto. Estas opciones cambian los valores del gradiente y, por tanto, el comportamiento de los umbrales.
Aplicaciones y tareas de visión relacionadas#
Canny permite la extracción de características geométricas: el ejemplo de detección de líneas de scikit-image lo aplica a una fotografía de un cameraman antes de que una transformada de Hough probabilística extraiga segmentos rectos. Canny proporciona píxeles de borde; la votación de Hough los agrupa en líneas. La detección de objetos asigna categorías y cajas, mientras que la segmentación de instancias asigna píxeles a objetos individuales.
La segmentación de YOLO26 de Ultralytics devuelve máscaras para el aislamiento de objetos, que pueden seleccionar regiones de la imagen para procesarlas por separado con Canny. Esto combina la selección de objetos aprendida con la extracción clásica de límites.
En la IA generativa, ControlNet usa mapas de Canny como condiciones espaciales para los modelos de difusión. Su implementación condicionada por Canny guía la generación con Stable Diffusion 1.5 usando contornos extraídos junto con una instrucción de texto.










