Procesamiento de imágenes-opencv-10. Nitidez de imágenes 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. Detecta líneas de borde mediante el cálculo de diferencia local. Este algoritmo se utiliza a menudo para procesar imágenes con poco ruido y pendiente y funciona mejor cuando los bordes de la imagen están cerca de más o menos 45 grados. La desventaja es que el posicionamiento del borde no es lo suficientemente preciso 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 entre los valores de gris de 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 los valores de píxeles dentro de la región, 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 el plano horizontal como en el plano horizontal. direcciones verticales.
dst = filter2D(src, d Depth, kernel[, dst[, Anchor[, delta[, borderType]]]])
El operador RSobel se utiliza para la detección de bordes. Operador diferencial que combina suavizado gaussiano y derivación diferencial. Este operador se utiliza para calcular una aproximación de la oscuridad y el brillo de una imagen, marcando puntos específicos en una región que exceden un cierto número como bordes en función de la oscuridad y el brillo junto a los bordes de la imagen. El operador de Sobel agrega el concepto de peso sobre la base del operador de Prewitt, que muestra que la distancia de los puntos adyacentes tiene diferentes efectos en el píxel actual. Cuanto más cerca esté el píxel, mayor será el impacto en el píxel actual, lo que hará que el píxel actual sea más cercano. contorno del borde más nítido y prominencia. El operador Sobel es más preciso en la ubicación de los bordes y suele usarse en imágenes con mucho ruido y gradientes de escala de grises.
El operador Sobel detecta bordes basándose en la diferencia ponderada entre los niveles de gris de los vecinos superior, inferior, izquierdo y derecho de un píxel que alcanza su valor extremo en el borde. Tiene el efecto de suavizar el ruido y puede proporcionar información más precisa sobre la dirección del borde. Dado que el operador Sobel combina suavizado gaussiano y derivación diferencial (diferencial), el resultado tendrá una capacidad antirruido más fuerte. Cuando los requisitos de precisión no son muy altos, el operador Sobel es un método de detección de bordes de uso común.
dst = Sobel(src, d Depth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]]))
Después de la operación de Sobel Después del procesamiento de caracteres, también debe llamar a la función convertScaleAbs() para calcular el valor absoluto y convertir la imagen a un mapa 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 de n dimensiones y se utiliza a menudo en los campos de mejora de imágenes y extracción de bordes. Calcula los píxeles en el vecindario a través de la diferencia de escala de grises. El proceso básico es: determinar el valor de escala de grises del píxel central de la imagen y los valores de escala de grises de otros píxeles circundantes. Si el valor de escala de grises del píxel central es mayor, aumente el valor. valor de escala de grises del píxel central; por el contrario, el valor de gris del píxel central se reduce para lograr la nitidez de la imagen. Durante la implementación del algoritmo, el operador laplaciano encontrará gradientes en cuatro u ocho direcciones para el píxel central en el vecindario y luego agregará los gradientes para determinar la diferencia entre la escala de grises del píxel central y la escala de grises de otros píxeles en el relación de vecindad y, finalmente, ajuste la escala de grises de los píxeles de acuerdo con el resultado de la operación de gradiente.
El operador laplaciano se divide en cuatro barrios y ocho barrios. Cuatro vecinos son para encontrar el gradiente del píxel central del vecindario en cuatro direcciones, y ocho vecinos son para encontrar el gradiente 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 el píxel central Cuando la escala de grises de un píxel es menor 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 negativo. El resultado de la operación de convolución se procesa con un coeficiente de atenuación apropiado y se agrega al píxel central original para lograr una imagen más nítida.
dst = Laplacian(src, d Depth[, dst[, ksize[, scale[, delta[, borderType]]]]])
Dado que el operador de Sobel es relativamente pequeño kernels, las derivadas se utilizan para aproximar kernels relativamente pequeños, por ejemplo, el operador 33 Sobel, cuya inexactitud se vuelve más evidente cuando el ángulo del gradiente se aproxima a la dirección horizontal o vertical. El operador Scharr, también conocido como filtro Scharr, también calcula la diferencia de imágenes en la dirección xoy. Se utiliza principalmente junto con la operación del operador Sobel en OpenCV. El prototipo de función del operador Scharr se muestra a continuación y es casi idéntico al prototipo de función del operador Sobel excepto que no hay ningún parámetro ksize.
dst = Scharr(src, d Depth, dx, dy[, dst[, scale[, delta[, borderType]]]]]))
Operador astuto de detección de bordes ( A Algoritmo de detección de bordes multinivel) es un algoritmo de detección de bordes ampliamente utilizado. Hay tres criterios para evaluar la detección óptima de bordes: baja tasa de error, alta localización y respuesta mínima.
Los pasos para implementar el operador Canny son los siguientes:
bordes = Canny(imagen, umbral1, umbral2[, bordes[, tamaño de apertura[, L2gradient]]])
El operador de detección de bordes LOG (Laplaciano de Gauss), también conocido como operador de Marr&Hildreth, encuentra el mejor filtro para detectar bordes basándose en la relación señal-ruido de la imagen. Este algoritmo primero realiza un filtrado gaussiano en la imagen, luego encuentra su derivada laplaciana de segundo orden y detecta el límite de la imagen en función del punto cero de la derivada de segundo orden, es decir, la imagen se obtiene detectando los cruces por cero. del resultado del filtrado o el borde de un objeto.
El operador LOG tiene en cuenta tanto la supresión de ruido como la detección de bordes. Combina un filtro de suavizado gaussiano y un filtro de nitidez laplaciano para suavizar el ruido antes de detectar los bordes, por lo que el efecto es mejor. Este operador es similar a un modelo matemático en fisiología visual y, por tanto, se ha utilizado ampliamente 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.