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 elaboró una teoría computacional de detección de bordes que explica por qué funciona la técnica.
La detección de bordes de Canny es una técnica que permite extraer información estructural útil de diferentes objetos de visión y reducir drásticamente la cantidad de datos que se deben procesar. Se ha aplicado ampliamente en varios sistemas de visión artificial . 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 que aborde 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 una función dada . La función óptima en el detector de Canny se describe mediante la suma de cuatro términos exponenciales , pero se puede aproximar mediante la primera derivada de una función gaussiana .
Entre los métodos de detección de bordes desarrollados hasta el momento, 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 capacidad óptima para cumplir con los tres criterios de 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 de Canny se puede dividir en cinco pasos diferentes:
Dado que todos los resultados de detección de bordes se ven fácilmente afectados por el ruido en la imagen, es esencial filtrar el ruido para evitar detecciones falsas causadas por él. Para suavizar la imagen, se realiza una convolución de 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 5×5, utilizado para crear la imagen adyacente, con = 2. (El asterisco denota una operación de convolución ).
Es importante entender 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 tamaño de 5x5 es un buen tamaño para la mayoría de los casos, pero esto también variará según las 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 la dirección vertical (G y ). A partir de esto, se puede determinar el gradiente y la dirección del borde:
donde G se puede calcular utilizando 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 magnitudes de gradiente, o umbralización de límite inferior, es una técnica de adelgazamiento de bordes .
Se aplica la supresión de límite inferior para encontrar las ubicaciones con el cambio más pronunciado en el valor de intensidad. El algoritmo para cada píxel de la imagen de gradiente es:
En algunas implementaciones, el algoritmo clasifica las direcciones de gradiente continuo en un pequeño conjunto de direcciones discretas y luego mueve un filtro 3x3 sobre la salida del paso anterior (es decir, la intensidad del borde y las direcciones de 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 extienden 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 (utilizando las convenciones del último párrafo). La magnitud del gradiente en el píxel central debe ser mayor que ambos 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 aplicar la supresión no máxima, los píxeles de borde restantes proporcionan una representación más precisa de los bordes reales en una imagen. Sin embargo, quedan algunos píxeles de borde que son 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 mayor que el 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 de umbral se determinan empíricamente y su definición dependerá del contenido de una imagen de entrada determinada.
Los píxeles de borde fuerte ciertamente deberían estar involucrados en la imagen de borde final; se considera que provienen de bordes verdaderos en la imagen. Sin embargo, habrá cierto debate sobre los píxeles de borde débil. Queremos determinar si estos píxeles provienen de un borde verdadero o de variaciones de ruido/color. Los píxeles de borde débil deberían descartarse de la consideración si es lo último. Este algoritmo utiliza la idea de que los píxeles de borde débil de bordes verdaderos (generalmente) estarán conectados a un píxel de borde fuerte mientras que las respuestas de ruido no están conectadas. Para rastrear la conexión de borde, se aplica un 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 que esté involucrado en el blob, ese punto de borde débil puede identificarse como uno que debe conservarse. Estos píxeles de borde débil se convierten en bordes fuertes que luego pueden hacer que se conserven sus 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 solidez en 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 solucionar 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 de suavizado a 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 requerida ] Cuanto mayor sea la discontinuidad, menor será el valor de peso que se establece para el filtro de suavizado en ese punto. Por el contrario, cuanto menor sea la discontinuidad entre los valores de escala de grises, mayor será el valor de peso que se establece para el filtro. El proceso para implementar este filtro adaptativo se puede resumir en cinco pasos:
para suavizar la imagen, donde
La magnitud y la 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 el valor de umbral dual de manera empírica, se puede utilizar el método de Otsu [3] en la imagen de magnitud de gradiente suprimida no máxima para generar el umbral alto. El umbral bajo generalmente se establece en la mitad del umbral alto en este caso. Dado que la imagen de magnitud de gradiente tiene un valor continuo sin un máximo bien definido, el método de Otsu debe adaptarse para utilizar pares de valor/conteo en lugar de un histograma completo .
Si bien la detección de bordes tradicional de Canny logra 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 desarrollaron una técnica de morfología matemática para afinar 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 intensidad de los bordes de la imagen, a los que se aplican los pasos 3 a 5 del algoritmo Canny. Las curvas descomponen las señales en componentes separados de diferentes escalas, y la eliminación de 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 la detección de bordes diferenciales , 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 del espacio 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 2.ª derivada a lo largo de la dirección del gradiente, era el resultado de minimizar un funcional de Kronrod-Minkowski mientras se maximizaba la integral sobre la alineación del borde con el campo de 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 efectividad del algoritmo.
El algoritmo Canny se adapta a varios entornos. Sus parámetros permiten que se adapte al reconocimiento de bordes de diferentes características según los requisitos particulares de una implementación dada. En el artículo original de Canny, la derivación del filtro óptimo condujo a un filtro de respuesta de impulso finito , que puede ser lento de calcular 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 de impulso infinito de Rachid Deriche del filtro de Canny (el detector Canny-Deriche ), que es recursivo y que se puede calcular en una cantidad de tiempo fija y corta para cualquier cantidad de suavizado deseada. La segunda forma es adecuada para implementaciones en tiempo real en FPGA o DSP , o PC integrados muy rápidos. En este contexto, sin embargo, la implementación recursiva regular del operador Canny no da una buena aproximación de la simetría rotacional y, por lo tanto, da un sesgo hacia los bordes horizontales y verticales.