El detector de bordes Canny es un operador de detección de bordes que utiliza un algoritmo de varias etapas para detectar una amplia gama de bordes en imágenes. Fue desarrollado por John F. Canny en 1986. Canny también produjo una teoría computacional de detección de bordes que explica por qué funciona la técnica.
La detección de bordes Canny es una técnica para extraer información estructural útil de diferentes objetos de visión y reducir drásticamente la cantidad de datos a procesar. Se ha aplicado ampliamente en varios sistemas de visión por computadora . Canny ha descubierto que los requisitos para la aplicación de la detección de bordes en diversos sistemas de visión son relativamente similares. Por lo tanto, se puede implementar una solución de detección de bordes para abordar estos requisitos en una amplia gama de situaciones. Los criterios generales para la detección de bordes incluyen:
Para satisfacer estos requisitos, Canny utilizó el cálculo de variaciones , una técnica que encuentra la función que optimiza un funcional determinado . La función óptima en el detector de Canny se describe mediante la suma de cuatro términos exponenciales , pero puede aproximarse mediante la primera derivada de una gaussiana .
Entre los métodos de detección de bordes desarrollados hasta ahora, el algoritmo de detección de bordes Canny es uno de los métodos más estrictamente definidos que proporciona una detección buena y confiable. Debido a su optimización para cumplir con los tres criterios para la detección de bordes y la simplicidad del proceso de implementación, se convirtió en uno de los algoritmos más populares para la detección de bordes.
El proceso del algoritmo de detección de bordes Canny se puede dividir en cinco pasos diferentes:
Dado que todos los resultados de la detección de bordes se ven fácilmente afectados por el ruido de la imagen, es esencial filtrar el ruido para evitar una detección falsa causada por él. Para suavizar la imagen, se convoluciona un núcleo de filtro gaussiano con la imagen. Este paso suavizará ligeramente la imagen para reducir los efectos del ruido obvio en el detector de bordes. La ecuación para un núcleo de filtro gaussiano de tamaño (2 k +1)×(2 k +1) viene dada por:
A continuación se muestra un ejemplo de un filtro gaussiano de 5 × 5, utilizado para crear la imagen adyacente, con = 1. (El asterisco indica una operación de convolución ).
Es importante comprender que la selección del tamaño del núcleo gaussiano afectará el rendimiento del detector. Cuanto mayor sea el tamaño, menor será la sensibilidad del detector al ruido. Además, el error de localización para detectar el borde aumentará ligeramente con el aumento del tamaño del núcleo del filtro gaussiano. Un 5×5 es un buen tamaño para la mayoría de los casos, pero también variará dependiendo de situaciones específicas.
Un borde en una imagen puede apuntar en una variedad de direcciones, por lo que el algoritmo Canny utiliza cuatro filtros para detectar bordes horizontales, verticales y diagonales en la imagen borrosa. El operador de detección de bordes (como Roberts , Prewitt o Sobel ) devuelve un valor para la primera derivada en la dirección horizontal (G x ) y en la dirección vertical (G y ). A partir de esto se puede determinar la pendiente y la dirección del borde:
donde G se puede calcular usando la función hipot y atan2 es la función arcotangente con dos argumentos. El ángulo de dirección del borde se redondea a uno de los cuatro ángulos que representan la vertical, la horizontal y las dos diagonales (0°, 45°, 90° y 135°). La dirección del borde que cae en cada región de color se establecerá en un valor de ángulo específico; por ejemplo, θ en [0°, 22,5°] o [157,5°, 180°] se asigna a 0°.
La supresión de corte mínimo de las magnitudes de gradiente, o umbralización de límite inferior, es una técnica de adelgazamiento de bordes .
Se aplica la supresión del límite inferior para encontrar las ubicaciones con el cambio más pronunciado en el valor de intensidad. El algoritmo para cada píxel en la imagen degradada es:
En algunas implementaciones, el algoritmo clasifica las direcciones del gradiente continuo en un pequeño conjunto de direcciones discretas y luego mueve un filtro de 3x3 sobre la salida del paso anterior (es decir, la intensidad del borde y las direcciones del gradiente). En cada píxel, suprime la intensidad del borde del píxel central (estableciendo su valor en 0) si su magnitud no es mayor que la magnitud de los dos vecinos en la dirección del gradiente. Por ejemplo,
En implementaciones más precisas, se utiliza la interpolación lineal entre los dos píxeles vecinos que se encuentran a ambos lados de la dirección del gradiente. Por ejemplo, si el ángulo del gradiente está entre 89° y 180°, la interpolación entre los gradientes en los píxeles norte y noreste dará un valor interpolado, y la interpolación entre los píxeles sur y suroeste dará el otro (usando las convenciones del último párrafo). La magnitud del gradiente en el píxel central debe ser mayor que ambas para que se marque como un borde.
Tenga en cuenta que el signo de la dirección es irrelevante, es decir, norte-sur es lo mismo que sur-norte y así sucesivamente.
Después de la aplicación de una supresión no máxima, los píxeles de borde restantes proporcionan una representación más precisa de los bordes reales de una imagen. Sin embargo, quedan algunos píxeles de borde causados por el ruido y la variación de color. Para tener en cuenta estas respuestas espurias, es esencial filtrar los píxeles de borde con un valor de gradiente débil y preservar los píxeles de borde con un valor de gradiente alto. Esto se logra seleccionando valores de umbral alto y bajo. Si el valor de gradiente de un píxel de borde es superior al valor de umbral alto, se marca como un píxel de borde fuerte. Si el valor de gradiente de un píxel de borde es menor que el valor de umbral alto y mayor que el valor de umbral bajo, se marca como un píxel de borde débil. Si el valor de gradiente de un píxel de borde es menor que el valor de umbral bajo, se suprimirá. Los dos valores umbral se determinan empíricamente y su definición dependerá del contenido de una imagen de entrada determinada.
Los píxeles de borde fuertes ciertamente deberían participar en la imagen de borde final; se considera que provienen de bordes reales de la imagen. Sin embargo, habrá cierto debate sobre los píxeles de los bordes débiles. Queremos determinar si estos píxeles provienen de un borde real o de variaciones de ruido/color. Los píxeles de borde débil deben descartarse si se trata de lo último. Este algoritmo utiliza la idea de que los píxeles de borde débiles de los bordes verdaderos (normalmente) estarán conectados a un píxel de borde fuerte mientras que las respuestas al ruido no están conectadas. Para rastrear la conexión del borde, se aplica el análisis de blobs observando un píxel de borde débil y sus 8 píxeles vecinos conectados. Siempre que haya un píxel de borde fuerte involucrado en la mancha, ese punto de borde débil puede identificarse como uno que debe preservarse. Estos píxeles de borde débil se convierten en bordes fuertes que luego pueden hacer que se conserven los píxeles de borde débil vecinos.
Esta sección mostrará la progresión de una imagen a través de cada uno de los cinco pasos.
Si bien la detección de bordes tradicional de Canny proporciona una metodología relativamente simple pero precisa para el problema de detección de bordes, con requisitos más exigentes en cuanto a precisión y robustez de la detección, el algoritmo tradicional ya no puede manejar la desafiante tarea de detección de bordes. Los principales defectos del algoritmo tradicional se pueden resumir de la siguiente manera: [1]
Para abordar estos defectos, en los siguientes párrafos se presenta una mejora del algoritmo Canny Edge.
Como tanto el borde como el ruido se identificarán como una señal de alta frecuencia, un filtro gaussiano simple agregará un efecto suave en ambos. Sin embargo, para alcanzar una alta precisión en la detección del borde real, se espera que se aplique un efecto más suave al ruido y se agregue un efecto menos suave al borde. Bing Wang y Shaosheng Fan de la Universidad de Ciencia y Tecnología de Changsha desarrollaron un filtro adaptativo, donde el filtro evaluará la discontinuidad entre los valores de escala de grises de cada píxel [ cita necesaria ] . Cuanto mayor sea la discontinuidad, menor será el valor de peso establecido para el filtro suave en ese punto. Por el contrario, cuanto menor sea la discontinuidad entre los valores de la escala de grises, mayor será el valor de ponderación del filtro. El proceso para implementar este filtro adaptativo se puede resumir en cinco pasos:
para suavizar la imagen, donde
La magnitud y dirección del gradiente se pueden calcular con una variedad de operadores de detección de bordes diferentes, y la elección del operador puede influir en la calidad de los resultados. Uno de los más elegidos es el filtro Sobel 3x3 . Sin embargo, otros filtros pueden ser mejores, como un filtro Sobel 5x5, que reducirá el ruido, o el filtro Scharr , que tiene una mejor simetría rotacional. Otras opciones comunes son Prewitt (utilizado por Zhou [2] ) y Roberts Cross .
Para resolver los desafíos en los que es difícil determinar empíricamente el valor del umbral dual, se puede utilizar el método de Otsu [3] en la imagen de magnitud del gradiente suprimido no máximo para generar el umbral alto. En este caso, el umbral bajo normalmente se establece en la mitad del umbral alto. Dado que la imagen de magnitud del gradiente tiene un valor continuo sin un máximo bien definido, el método de Otsu debe adaptarse para utilizar pares valor/recuento en lugar de un histograma completo.
Si bien la detección de bordes tradicional de Canny implementa un buen resultado de detección para cumplir con los dos primeros criterios, no cumple estrictamente con la respuesta única por borde. Mallat S y Zhong desarrollan una técnica de morfología matemática para adelgazar el borde detectado. [4]
Se han utilizado curvas en lugar del filtro gaussiano y la estimación de gradiente para calcular un campo vectorial cuyas direcciones y magnitudes se aproximan a la dirección y la fuerza de los bordes de la imagen, al que luego se aplican los pasos 3 a 5 del algoritmo Canny. Los Curvelets descomponen las señales en componentes separados de diferentes escalas, y eliminar los componentes de escalas más finas puede reducir el ruido. [5]
Un enfoque más refinado para obtener bordes con precisión de subpíxeles es utilizar el enfoque de detección diferencial de bordes , donde el requisito de supresión no máxima se formula en términos de derivadas de segundo y tercer orden calculadas a partir de una representación espacial de escala (Lindeberg 1998): consulte el artículo sobre detección de bordes para obtener una descripción detallada.
Se demostró que una explicación variacional para el ingrediente principal del detector de bordes Canny, es decir, encontrar los cruces por cero de la segunda derivada a lo largo de la dirección del gradiente, es el resultado de minimizar un funcional de Kronrod-Minkowski mientras se maximiza la integral sobre la alineación de el borde con el campo gradiente (Kimmel y Bruckstein 2003). Consulte el artículo sobre cruces por cero laplacianos regularizados y otros integradores de bordes óptimos para obtener una descripción detallada.
El algoritmo Canny contiene una serie de parámetros ajustables que pueden afectar el tiempo de cálculo y la eficacia del algoritmo.
El algoritmo Canny es adaptable a diversos entornos. Sus parámetros le permiten adaptarse al reconocimiento de bordes de diferentes características según los requisitos particulares de una implementación determinada. En el artículo original de Canny, la derivación del filtro óptimo condujo a un filtro de respuesta de impulso finito , cuyo cálculo puede ser lento en el dominio espacial si la cantidad de suavizado requerida es importante (el filtro tendrá un gran soporte espacial en ese caso). . Por esta razón, a menudo se sugiere utilizar la forma de respuesta al impulso infinito del filtro de Canny de Rachid Deriche (el detector Canny-Driche ), que es recursivo y que se puede calcular en un período de tiempo corto y fijo para cualquier cantidad de suavizado deseada. . La segunda forma es adecuada para implementaciones en tiempo real en FPGA o DSP , o PC integradas muy rápidas. En este contexto, sin embargo, la implementación recursiva regular del operador Canny no proporciona una buena aproximación de la simetría rotacional y, por tanto, da una tendencia hacia los bordes horizontales y verticales.