Procesamiento-opencv-10. Nitidez de imagen y detección de bordes
El operador de Roberts, también conocido como algoritmo de diferencia cruzada, es un algoritmo de gradiente basado en diferencia cruzada, que detecta líneas de borde mediante el cálculo de diferencia local. Normalmente se utiliza para procesar imágenes con bordes pronunciados y poco ruido. Cuando el borde de la imagen está cerca de más o menos 45 grados, el efecto de procesamiento de este algoritmo es ideal. Su desventaja es que el posicionamiento del borde es inexacto y las líneas de borde extraídas son más gruesas.
Prewitt es un operador diferencial utilizado para la detección de bordes de imágenes. Su principio es utilizar la diferencia en el valor de gris de los píxeles en un área específica para lograr la detección de bordes. Dado que el operador Prewitt usa una plantilla 3-3 para calcular los valores de píxeles en el área, mientras que la plantilla del operador Robert es 2-2, los resultados de detección de bordes del operador Prewitt son más obvios que los del operador Robert tanto en horizontal como y direcciones verticales. El operador Prewitt es adecuado para identificar imágenes con más ruido y gradientes.
dst = filter2D(src, d Depth, kernel[, dst[, Anchor[, delta[, borderType]]])
El operador RSobel se utiliza para la detección de bordes. Operador diferencial discreto. que combina suavizado gaussiano y derivación diferencial. Se utiliza un operador para calcular una aproximación del brillo de la imagen, y los puntos específicos que exceden un cierto número en el área se registran como bordes según el brillo junto al borde de la imagen. El operador de Sobel agrega el concepto de peso al operador de Prewitt, creyendo que la distancia entre puntos adyacentes tiene diferentes efectos en el píxel actual. Cuanto más cercana es la distancia, mayor es el impacto en el píxel actual, lo que agudiza la imagen y resalta el borde. contorno. El operador Sobel es más preciso en el posicionamiento de los bordes y se utiliza a menudo en imágenes con mucho ruido y gradientes de escala de grises.
El operador Sobel detecta bordes basándose en el fenómeno de que la diferencia ponderada en escala de grises entre los píxeles superiores e inferiores y los vecinos izquierdo y derecho alcanza un valor extremo en el borde. Suaviza el ruido y proporciona información más precisa sobre la dirección de los bordes. Debido a que el operador de Sobel combina suavizado gaussiano y derivación diferencial (diferenciación), el resultado será más resistente al ruido. El operador Sobel es un método de detección de bordes comúnmente utilizado cuando la precisión no es muy alta.
dst = Sobel(src, d Depth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]])
Después del procesamiento por parte del operador Sobel, También necesitamos llamar a la función convertScaleAbs() para calcular el valor absoluto y convertir la imagen en una imagen de 8 bits para su visualización.
dst = convertScaleAbs(src[, dst[, alpha[, beta]])
El operador laplaciano es un operador diferencial de segundo orden en el espacio euclidiano N-dimensional, de uso frecuente para mejorar la imagen y extraer los bordes. Calcula píxeles dentro de un vecindario a través de diferencias en escala de grises. El proceso básico es: determinar el valor de gris del píxel central de la imagen y el valor de gris de otros píxeles circundantes. Si el valor de gris del píxel central es mayor, aumente el valor de gris del píxel central; de lo contrario, reduzca el gris; valor del píxel central. Esto permite las operaciones de nitidez de la imagen. En la implementación del algoritmo, el operador laplaciano calcula los gradientes del píxel central en el vecindario en cuatro u ocho direcciones, luego agrega los gradientes para determinar la relación entre la escala de grises del píxel central y la escala de grises de otros píxeles en el vecindario. y, finalmente, ajuste la escala de grises de los píxeles utilizando los resultados de las operaciones de degradado.
El operador laplaciano se divide en cuatro vecindades y ocho vecindades se utilizan para calcular el gradiente del píxel del centro de la vecindad en cuatro direcciones, y las ocho vecindades se utilizan para calcular el gradiente del centro de la vecindad. píxel en cuatro direcciones para calcular gradientes en ocho direcciones. Cuando la escala de grises de los píxeles en el vecindario es la misma, el resultado de la operación de convolución de la plantilla es 0; cuando la escala de grises del píxel central es mayor que la escala de grises promedio de otros píxeles en el vecindario, el resultado de la operación de convolución de la plantilla es positivo; cuando la escala de grises del píxel central Cuando la intensidad es menor que la intensidad de gris promedio de otros píxeles en el vecindario, la convolución de la plantilla es negativa. El resultado de la operación de convolución se puede afinar procesando el resultado de la operación de convolución con un factor de debilitamiento apropiado y agregándolo al píxel central original.
dst = Laplaciano (src, dprofundidad[, dst[, ksize[, escala[, delta[, borderType]]])
Dado que el operador de Sobel se utiliza para calcular el Cuándo relativo el núcleo es más pequeño y la precisión del cálculo aproximado de la derivada es relativamente baja, como 33 para un operador de Sobel. Cuando el ángulo del gradiente se acerca a la dirección horizontal o vertical, su inexactitud se vuelve cada vez más obvia. El operador Scharr es tan rápido como el operador Sobel, pero tiene mayor precisión, especialmente al calcular núcleos pequeños. Por lo tanto, se recomienda utilizar el operador Scharr y utilizar un filtro 3 * 3 para extraer los bordes de la imagen.
El operador Scharr, también conocido como filtro Scharr, también se utiliza para calcular la diferencia de imagen en la dirección X o Y. En OpenCV, existe principalmente junto con el operador Sobel. El prototipo de función del operador Scharr es el siguiente, que es casi el mismo que el operador Sobel excepto que no hay ningún parámetro ksize.
dst = Scharr(src, d Depth, dx, dy[, dst[, scale[, delta[, borderType]]])
Operador de detección de bordes Canny (borde de varios niveles algoritmo de detección) es un algoritmo estándar ampliamente utilizado en la detección de bordes. Su objetivo es encontrar una solución óptima de detección de bordes o encontrar la ubicación en la imagen donde el nivel de gris cambia más. La mejor detección de bordes se evalúa principalmente mediante tres criterios: baja tasa de error, alta localización y respuesta mínima.
Los pasos de implementación del operador Canny son los siguientes:
bordes = Canny(imagen, umbral1, umbral2[, bordes[, tamaño de apertura[, gradiente L2]])
El operador de detección de bordes LOG (Laplaciano de Gauss) también se denomina operador de Marr & Hildreth. Encuentra el mejor filtro para la detección de bordes en función de la relación señal-ruido de la imagen. Este algoritmo primero filtra la imagen con un filtro gaussiano, luego calcula su derivada laplaciana de segundo orden y detecta el borde de la imagen en función del punto de cruce por cero de la derivada de segundo orden. Es decir, detectando el cruce por cero. punto del resultado del filtrado, se obtiene la imagen u objeto.
El operador LOG debe tener en cuenta tanto la supresión de ruido como la detección de bordes. Combina el filtrado de suavizado gaussiano y el filtrado de nitidez laplaciano para suavizar el ruido primero y luego detectar los bordes, de modo que el efecto sea mejor. Este operador es similar a un modelo matemático en fisiología visual, por lo que ha sido ampliamente utilizado en el campo del procesamiento de imágenes. Tiene las características de una fuerte capacidad antiinterferente, alta precisión de posicionamiento de límites y buena continuidad de los bordes, y puede extraer eficazmente límites de contraste débiles.