Procesamiento de imágenes y visión por computadora: Capítulo 5: Segmentación de imágenes: Operador astuto

1. Clasificación de los operadores de detección de bordes.

(1)一阶导数的边缘检测算子:
  通过模板作为核与图像的每个像素点做卷积和运算,然后选取合适的阈值来提取图像的边缘。常见的有Roberts算子、Sobel算子和Prewitt算子。
(2)二阶导数的边缘算子:
  依据于二阶导数过零点,常见的有Laplacian 算子,此类算子对噪声敏感。
(3)Canny算子:
  前面两类均是通过微分算子来检测图像边缘,还有一种就是Canny算子,其是在满足一定约束条件下推导出来的边缘检测最优化算子。

2.Teoría central del operador astuto

2.1.Una breve introducción al operador Canny

El operador Canny es un operador de detección de bordes muy utilizado y su representación es la siguiente:
Insertar descripción de la imagen aquí

2.2 Índice de detección de bordes del operador Canny

El operador Canny se implementa en función de la detección de bordes, por lo que los indicadores de detección de bordes son los siguientes:
(1) Buena relación señal-ruido, es decir, la probabilidad de determinar puntos que no son de borde como puntos de borde es baja.
(2) Posicionamiento alto, el borde detectado debe estar en el centro del borde real.
(3) Solo hay una respuesta única para un solo borde, es decir, los bordes falsos deben suprimirse al máximo.

2.3.Principios básicos del operador Canny

1.2个条件:一能有效抑制噪声,二能精确定位边缘位置
2.平滑后求导,用高斯滤波器进行平滑
3.用一阶偏导有限差分计算梯度幅值与方向
3.对梯度幅值进行非极大值抑制
4.用双闯值检测与连接边缘

3. Flujo de procesamiento del operador astuto

El contenido de la tercera parte está citado de: https://blog.csdn.net/zaishuiyifangxym/article/details/90142702
Mi trabajo es aprender a través de su blog. La columna de CV de este blogger es muy buena.
Si no entiendes nada en este blog, puedes consultar su columna, el contenido es muy completo y deberías poder obtener una mejor respuesta.

3.1 Filtrado gaussiano para eliminar ruido.

Según el primer principio del algoritmo anterior, debemos eliminar el ruido del impacto de la imagen.
Detección de bordes en imágenes susceptibles al ruido. Por lo tanto, normalmente se requiere eliminar el ruido antes de la detección de bordes. Por lo general, el filtrado gaussiano se utiliza para eliminar el ruido. El filtrado gaussiano es una función de eliminación de ruido de uso común. Su fórmula de plantilla 5x5 corresponde a la siguiente: 1 273
× [ 1 4 7 4 1 4 16 26 16 4 7 26 41 26 7 4 16 26 16 4 1 4 7 4 1 ] \frac{1}{273}\times\begin{bmatrix}1&4&7&4&1\\4&16&26&16&4\\7&26&41&26&7\\4&16&26&16&4\\1&4&7&4&1\end{bmatrix}2731× 147414dieciséis26dieciséis4726412674dieciséis26dieciséis414741

En la biblioteca Opencv, la función de filtro gaussiano es la siguiente:

img = cv2.GaussianBlur(src, ksize, sigmaX)
其中,参数:src 表示原始图像;ksize 表示核大小,而且ksize只能是奇数;sigmaX 表示X方向方差。

3.2 Búsqueda de gradiente de imagen

En esta parte del contenido, necesitamos calcular y encontrar la amplitud y dirección del gradiente, y encontrar el gradiente de la imagen. Primero debemos aplicar la plantilla de convolución a las direcciones x e y respectivamente, y luego calcular la amplitud y dirección del gradiente. La fórmula es la siguiente:
Convolución: dx = [ − 1 0 1 − 2 0 2 − 1 0 1 ] dy = [ − 1 − 2 − 1 0 0 0 1 2 1 ] Amplitud: S = dx 2 + dy 2 Dirección: θ = arctan ⁡ ( dydx ) \begin{aligned}Convolución: d_x&=\begin{bmatrix}-1&0&1 \ \-2&0&2\\-1&0&1\end{bmatrix}\quad d_y=\begin{bmatrix}-1&-2&-1\\0&0&0\\1&2&1\end{bmatrix}\\\\amplitud:S&=\sqrt{ d_x ^2+d_y^2}\\\\ dirección:\theta&=\arctan(\frac{d_y}{d_x})\end{aligned}Circunvolución:dxAmplitud:Sdirección:i= 12 1000121 dy= 101202101 =dX2+dy2 =arctán (dxdy)
La amplitud y dirección obtenidas después del cálculo se muestran en la figura:
              Insertar descripción de la imagen aquí

3.3 Procesamiento de supresión no máxima

  Para cada píxel, hace lo siguiente: aplica tecnología de supresión no máxima para filtrar los píxeles sin bordes y aclarar los límites borrosos. Este proceso conserva el valor máximo de la intensidad del gradiente en cada píxel y filtra otros valores.

Step1:将其梯度方向近似为以下值中的一个,包括04590135180225270315,即表示上下左右和45度方向。
Step2:比较该像素点和其梯度正负方向的像素点的梯度强度,如果该像素点梯度强度最大则保留,否则抑制(删除,即置为0)。

Los métodos de procesamiento del Paso 1 y Paso 2 se muestran en la figura:
Insertar descripción de la imagen aquí

3.4.Procesamiento de límites de doble umbral

  El principio del procesamiento de límites de doble umbral también es relativamente simple: aplicamos dos umbrales T bajo T_ {low} a la imagen de supresión no máxima.tbajo _ _T alto T_{alto}thola _ _. Haga que el valor del gradiente sea menor que T bajo T_{low}tbajo _ _El valor de gris del píxel se establece en 0 y se obtiene la imagen 1. Luego haga que el valor del gradiente sea mayor que T alto T_{high}thola _ _El valor de escala de grises del píxel se establece en 0 y se obtiene la imagen 2.
 Dado que el valor umbral de la imagen 2 es relativamente alto, se elimina la mayor parte del ruido, pero también se pierde información útil de los bordes. La imagen 1 tiene un umbral más bajo y retiene más información. Podemos usar la imagen 2 como base y la imagen 1 como complemento para conectar los bordes de la imagen.
      Insertar descripción de la imagen aquí

3.5 Seguimiento de la tecnología de retraso de límites

La investigación sobre los métodos de seguimiento de la tecnología de retraso de límites proviene de: https://blog.csdn.net/qq_44736333/article/details/109152380

 Suponemos dos tipos de aristas: entre los puntos de arista después de una supresión no máxima, aquellos con valores de gradiente superiores a T1 se denominan aristas fuertes, aquellos con valores de gradiente inferiores a T1 y superiores a T2 se denominan aristas débiles y aquellos con Los gradientes menores que T2 no son aristas.
 Lo que es seguro es que los bordes fuertes deben ser puntos de borde, por lo que T1 debe establecerse lo suficientemente alto como para requerir que el valor de gradiente del píxel sea lo suficientemente grande (el cambio es bastante drástico), mientras que los bordes débiles pueden ser bordes o ruido. juez ¿Paño de lana?
 Cuando hay puntos de borde fuertes en los ocho vecindarios alrededor de un borde débil, el punto de borde débil se convierte en un punto de borde fuerte para complementar el borde fuerte.
 En la práctica, las personas encuentran que la relación T1: T2 = 2: 1 es mejor. T1 se puede especificar manualmente o se puede diseñar un algoritmo para especificarlo de forma adaptativa. Por ejemplo, la línea divisoria del primer 30% del gradiente El histograma se define como T1, que implementé. Es un umbral especificado artificialmente.
Insertar descripción de la imagen aquí
 En la imagen de arriba, el cuadrado blanco representa la existencia de un borde (incluidos los bordes fuertes y débiles). Se atraviesa cada píxel en el borde débil. Si hay un píxel correspondiente a un borde fuerte en los ocho vecindarios del píxel, este El píxel de borde débil se clasifica como un borde real (para entenderlo desde una perspectiva visual, hay un borde incierto. Si hay un borde real al lado de este borde incierto, entonces este borde se clasificará como un borde real; de lo contrario, se clasificará como un borde real). ser eliminado)

3.6 Características de la detección de bordes del operador Canny

1.检出准则: 该准则要求不应丢失重要的边缘,而且不应输出噪声性的多余边缘。
2.定位准则: 该准则要求检测到的边缘位置与实际边缘位置之间的距离为最小。
3.单一响应准则: 该准则在一定程度上多涵盖为检出准则,它要求尽可能减少对于同一边缘出现多个响应的情况。

4. Código del algoritmo del operador astuto

import cv2
import numpy as np
import matplotlib.pyplot as plt
# 支持中文
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号

def All_Canny(img):
    grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#图像灰度化处理
    gaussian = cv2.GaussianBlur(grayImage, (5, 5), 0)# 高斯滤波降噪
    Canny = cv2.Canny(gaussian, 50, 150)# Canny算子
    return grayImage, gaussian,Canny

# 读取图像
img = cv2.imread('lena.jpg')#imread出来的是BRG图像
lenna_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)#转化为RGB图像
# 显示图形
Figure=All_Canny(img)#获取Canny检测之后的图片

#图像可视化处理
titles = [u'原始图像', u'灰度处理图',u'高斯去噪处理图', u'Canny算子c处理图']
images = [lenna_img ,Figure[0],Figure[1], Figure[2]]
#subplot绘制
#第一张图
plt.subplot(2, 2, 1)
plt.imshow(images[0], 'gray'),plt.title(titles[0])
plt.xticks([]),plt.yticks([])
#第二张图
plt.subplot(2, 2, 2)
plt.imshow(images[1], 'gray'),plt.title(titles[1])
plt.xticks([]),plt.yticks([])
#第三张图
plt.subplot(2, 2, 3)
plt.imshow(images[2], 'gray'),plt.title(titles[2])
plt.xticks([]),plt.yticks([])
#第四张图
plt.subplot(2, 2, 4)
plt.imshow(images[3], 'gray'),plt.title(titles[3])
plt.xticks([]),plt.yticks([])

plt.savefig(r"D:\HuaweiMoveData\Users\27182\Desktop\py\Canny.png",dpi=1000)
plt.show()

5. Visualización del efecto de operador astuto

Insertar descripción de la imagen aquí

6. Artículos de referencia y agradecimientos

本章内容的完成离不开以下大佬文章的启发和帮助,在这里列出名单,如果对于内容还有不懂的,可以移步对应的文章进行进一步的理解分析。
1.Canny边缘检测算子流程:https://blog.csdn.net/zaishuiyifangxym/article/details/90142702
2.边界滞后技术跟踪算法:https://blog.csdn.net/qq_44736333/article/details/109152380
我的工作就是根据两位大佬的blog来进行学习,这两位博主的cv的专栏写的非常好。
如果大家这这篇blog中有什么不明白的可以去他们俩个的专栏里面看看,内容非常全面,应该能够有比较好的解答。
在文章的最后再次表达由衷的感谢!!

Supongo que te gusta

Origin blog.csdn.net/m0_71819746/article/details/133516091
Recomendado
Clasificación