Segmentación de imágenes de combate real basado en la transformada de Hough para extraer líneas rectas en la imagen

La base de la segmentación de imágenes se basa en el hecho de que cada región de la imagen tiene características diferentes (por ejemplo, escala de grises, color, textura). El objetivo de la segmentación de imágenes es dividir la imagen en varias subregiones con características similares o idénticas, para continuar extrayendo el objetivo en las regiones relacionadas segmentadas, y luego clasificarlo e identificarlo de acuerdo con las características o estructura de la información de la objetivo, y finalmente dar Se muestra la información descriptiva de los resultados del análisis de toda la imagen. Por lo tanto, la segmentación de imágenes es particularmente importante.

        En imágenes digitales, existe una definición relativamente estricta para la segmentación de imágenes:
1. La suma de todas las subregiones divididas en debería poder formar la región original R.

2. Las subáreas divididas no se superponen entre sí.

3. Los píxeles pertenecientes a la misma región obtenidos por segmentación deben tener algunas de las mismas características.

4. Los píxeles pertenecientes a diferentes regiones obtenidos por segmentación deben tener propiedades diferentes.

5. Los píxeles de la misma subregión deben estar conectados.

En primer lugar, introduzca el concepto de borde de la imagen. Debido a la diferencia en la forma física, las características geométricas, las características del material y el coeficiente de reflexión de los objetos, fondos y regiones en escenas naturales, el nivel de gris en la imagen cambia repentinamente y se forma una diferencia en la imagen Área. Los bordes de la imagen significan el final de una región y el comienzo de otra en la imagen. , es decir, la geometría de píxeles entre dos regiones adyacentes constituye el borde de la imagen. La característica del borde de la imagen es que los niveles de gris de los dos sufrirán algunos cambios significativos al pasar el borde.

        El cambio de paso ideal se muestra a la izquierda, pero de hecho la mayoría de ellos están a la derecha.

Características de borde ideales
Funciones de borde reales

 En el método de segmentación de imágenes basado en bordes, el primer paso debe ser determinar la información de los bordes en la imagen y luego conectarlos como el límite.

Algoritmo de detección de bordes basado en la transformada de Hough

En la práctica, a menudo usamos coordenadas polares para representar una línea recta, como se muestra en la siguiente figura:

 Representar una recta en coordenadas XY mediante coordenadas polares en realidad equivale a hacer corresponder una recta en el espacio XY con la intersección de un conjunto de curvas en coordenadas polares, la siguiente figura muestra muy bien esta relación:

 

  En cuanto a cómo extraer la línea recta en la imagen, no entraré en detalles. Puede consultar libros de procesamiento de imágenes relevantes y hablar brevemente sobre el proceso de implementación y las dos funciones importantes utilizadas:

Proceso de implementación:

        En primer lugar, el borde de la línea recta se obtiene a través del operador de Canny, y luego las coordenadas del borde de la línea recta en la imagen se obtienen a través de la transformada de Hough, y finalmente se dibuja de acuerdo con las coordenadas.

        Función astuta:

cv.Canny( imagen, umbral1, umbral2[, bordes[, tamaño de apertura[, gradiente L2]]] ) -> bordes

Aquí hay un uso de la función canny en cv, necesita ingresar 6 parámetros:

imagen: Estos son los datos de la imagen que deben ingresarse.

umbral1: este es el umbral inferior

umbral2: este es el umbral superior

Se puede entender comparando el gráfico de las características reales del borde anterior que el valor de gris entre estos dos umbrales se considerará como el límite.

openingSize: El tamaño de apertura del operador Sobel. En general, se utiliza un kernel de convolución de tamaño 3×3.

Lo que finalmente devuelve el operador Canny es una matriz que almacena datos de borde con el mismo tamaño que la imagen original, que es una imagen binaria.

        Función HoughLinesP():

cv.HoughLinesP(imagen, rho, theta, umbral[, líneas[, minLineLength[, maxLineGap]]]) ->líneas

Esta es la función HoughLinesP() en cv, que requiere que se ingresen 6 parámetros.

image: Esta es la imagen que almacena los datos del borde, es decir, el borde extraído por el operador Canny.

rho: La resolución de distancia del acumulador en píxeles.

theta: La resolución angular del acumulador en radianes.

umbral: Esto se compara con el resultado en el acumulador, solo los puntos mayores a este umbral se considerarán una línea recta

minLineLength: la longitud mínima de la línea, si la longitud de la línea es inferior a esta longitud mínima establecida, no se reconocerá como una línea recta

maxLineGap: El espacio máximo permitido entre puntos en la misma línea.

La función HoughLinesP finalmente devuelve una matriz [x1, y1, x2, y2] que almacena los puntos inicial y final de cada segmento de línea

El procedimiento de implementación es el siguiente, y las imágenes utilizadas son imágenes dibujadas al azar con un software de dibujo:

import cv2
import numpy as np
img = cv2.imread('C:\\Users\\yu\\Desktop\\picture_csdn\\lines_test.png', cv2.IMREAD_COLOR)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img_gray', img_gray)
# Canny边缘检测
img_Canny = cv2.Canny(img_gray, 0, 250, (3, 3))
cv2.imshow('img_canny', img_Canny)

result_HoughLinesP = cv2.HoughLinesP(img_Canny, 1, 1 * np.pi / 180, 10, minLineLength=1, maxLineGap=5)

# 画出检测的线段
for result in result_HoughLinesP:
    for x1, y1, x2, y2 in result:
        cv2.line(img, (x1, y1), (x2, y2), (0, 255, 255), 2)
cv2.imshow('result', img)

cv2.waitKey(0)

Imagen experimental:

Imagen de borde extraída por el operador Canny:

 

Una imagen de la línea final dibujada:

Materiales de referencia: detección de línea de transformación de Hough (python)_silencioso, elegante-CSDN blog_detección de línea de transformación de Hough Python

Supongo que te gusta

Origin blog.csdn.net/kuwola/article/details/122507069
Recomendado
Clasificación