Sistema de detección en tiempo real de líneas de carril basado en OpenCV (código fuente y tutorial)

1. Antecedentes de la investigación

Con el rápido desarrollo de la tecnología de conducción de vehículos no tripulados, se plantean mayores requisitos para el rendimiento en tiempo real de la tecnología de detección de líneas de carril.Para detectar líneas de carril basadas en OpenCV, primero, las imágenes recopiladas por el sistema del vehículo se recortan, se escalan en gris y filtre la imagen en escala de grises para mejorar la calidad de la imagen, luego expanda la imagen mejorada y realice la detección de bordes en ella, y finalmente seleccione la región de interés, la transformación y el ajuste de la línea de Hough de probabilidad, para obtener la imagen de detección de línea de carril esperada. que cortar la imagen recopilada dos veces puede hacer que la imagen de la línea del carril del vehículo se detecte de manera eficiente, en tiempo real y con alta precisión, lo cual es adecuado para la detección de la línea del carril de vehículos que circulan a alta velocidad al aire libre.

2. Demostración de imagen

1.png

3.png
2.png

3. Vídeo de demostración

Sistema de detección de carriles en tiempo real basado en OpenCV (código fuente y tutorial)_哔哩哔哩_bilibili

4. Diagrama de flujo del algoritmo

imagen.png

5. Filtrado gaussiano

El filtrado gaussiano se usa a menudo para eliminar algo de ruido gaussiano en la imagen. En la actualidad, la tecnología de filtrado de imágenes comúnmente utilizada se divide principalmente en tecnología de filtrado de dominio espacial y tecnología de filtrado de dominio de frecuencia. Debido a los altos requisitos en tiempo real para la detección de líneas de carril en este documento y la señal de alta frecuencia no se contaminará, por lo que se selecciona el filtro gaussiano en el dominio de la frecuencia. El filtro gaussiano es esencialmente un filtro de paso bajo, como se muestra en la figura.

imagen.png
La comparación antes y después de la reducción de ruido se muestra en la figura:
imagen.png

6. Extracción de borde adaptativo de imagen

La solución propuesta por este blog , después del filtrado de escala de grises y suavizado gaussiano de los gráficos recopilados, la imagen obtenida se mejora, pero su nivel de escala de grises sigue siendo 256, lo que tendrá un impacto en el trabajo posterior de detección de líneas de carril. Por lo tanto, este documento utiliza la tecnología de varianza máxima entre clases y la tecnología de binarización para procesar la imagen, a fin de eliminar algunas interferencias en la imagen, de modo que se pueda mejorar la precisión y la eficiencia de detección de la imagen en la detección de líneas de carril. La selección del umbral está determinada por las imágenes recopiladas.En este artículo, se utilizan el método de varianza máxima entre clases (otsu) y la función CV2.Threshold(img,0,255,cv2.THRESH_BINARY+ CV2.OTSU) en la biblioteca OpenCV. , como se muestra en la figura. Las técnicas de extracción de bordes de imágenes incluyen principalmente algoritmos de detección de bordes como Sobel, Laplace, Canny, Roberts y Prewitt. Dado que el operador de Canny puede detectar más información de borde de línea de carril, este documento utiliza el operador de detección de borde de Canny para realizar la detección de borde en la imagen procesada con la máxima variación entre clases. La imagen detectada se muestra en la figura:
imagen.png

7. Línea de carril área de división de interés

Debido a que los píxeles de imagen tomados por la cámara del automóvil son generalmente de 616 × 808, la resolución es buena, pero contiene información que no pertenece al carril, como vehículos, cielo, árboles en las calles, casas y tráfico vulnerable. Con el fin de mejorar la eficiencia y precisión de la detección de líneas de carril y reducir el tiempo de detección, este documento divide y selecciona las regiones de interés en las imágenes recopiladas por la cámara del vehículo. De acuerdo con la situación actual y el análisis de un gran número de resultados experimentales, la información efectiva de la línea del carril generalmente se distribuye en la parte inferior de la imagen, por lo que este documento corta la imagen recopilada y solo conserva la parte inferior de la imagen. , lo que es beneficioso para reducir el tiempo de cálculo de detección posterior y la precisión de detección. La imagen se recorta usando la función crop() en la biblioteca PIL. Después de la detección del borde de la imagen, es necesario seleccionar aún más la región de interés y realizar una operación AND bit a bit en la información de la región de interés seleccionada y la máscara seleccionada para obtener información de línea de carril más precisa, como muestra la imagen:
imagen.png

8. Detección de línea de transformación de Hough

Después de dividir la región de interés, para detectar las líneas rectas en la región y realizar la conversión de la imagen de la región de interés del sistema de coordenadas cartesianas xy al sistema de coordenadas Hough kb. En este artículo, la función de transformada de Hough de probabilidad se selecciona para la detección de línea recta. Para detectar líneas rectas más claramente, consulte este blog para mejorar la transformación de Hough de probabilidad de la siguiente manera :
(1) Acepte la longitud mínima de las líneas rectas. Si la línea detectada es muy corta, la línea se suprime.
(2) Distancia entre píxeles máxima permitida cuando se aceptan líneas rectas. Si una línea recta está formada por múltiples píxeles, pero la distancia de píxeles entre los píxeles que forman la línea recta es grande, no es aceptable.
El principio de la transformada de Hough es el siguiente:
(1) La esencia es detectar todos los puntos de píxeles en la línea recta, es decir, encontrar todos los puntos (x0, y0) conforme a la función lineal unaria y=kx+b ; (2) Para el sistema de coordenadas cartesianas
y =kx+b se transforma en la forma de b=-xk+y, y todos los puntos en la línea recta en el sistema de coordenadas cartesianas reflejan la línea recta que pasa por (k,b ) en el sistema de coordenadas de Hough, de modo que el punto de detección se convierta en una línea de detección;
(3) Todos los puntos de la imagen representan varias líneas rectas en el sistema de coordenadas de Hough. Si se encuentra la intersección de las líneas rectas, entonces la línea recta en se encuentra el sistema de coordenadas cartesianas. La esencia de la transformada de Hough es expresar cualquier línea recta en el plano en un sistema de coordenadas polares
, y su fórmula es:
imagen.png

9. Implementación del código

import cv2
import numpy as np


def make_coordinates(image,line_parameters):
    slope, intercept = line_parameters
    y1 = image.shape[0]  # Height
    y2 = int(y1 * (3/5))
    x1 = int((y1 - intercept)/slope)
    x2 = int((y2 - intercept)/slope)
    return np.array([x1,y1,x2,y2]) 

def average_slope_intercept(image,lines):
    left_fit = []
    right_fit = []
    for line in lines:
        x1,y1,x2,y2 = line.reshape(4)
        parameters = np.polyfit((x1,x2),(y1,y2),1)
        slope = parameters[0]
        intercept = parameters[1]
        if slope<0:
            left_fit.append((slope,intercept))
        else :
            right_fit.append((slope,intercept))
    left_fit_average = np.average(left_fit,axis=0)
    right_fit_average = np.average(right_fit,axis=0)
    left_line = make_coordinates(image,left_fit_average)
    right_line = make_coordinates(image,right_fit_average)
    return np.array([left_line,right_line])


def canny(image):
    gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
    blur = cv2.GaussianBlur(gray,(5,5),0)   # Kernel size is 5x5
    canny = cv2.Canny(blur,50,150)
    return canny

def display_lines(image,lines):
    line_image = np.zeros_like(image)
    if lines is not None:
        for line in lines:
            x1,y1,x2,y2 = line.reshape(4)  # Reshaping all the lines to a 1D array.
            cv2.line(line_image,(x1,y1),(x2,y2),(255,0,0),10) # Draw a Blue Line(BGR in OpenCV)
    return line_image

10. Integración del sistema

El código fuente completo y el video tutorial de implementación del entorno y la interfaz de usuario personalizada en la imagen a continuación
4.png
se refieren al blog "Sistema de detección de carril en tiempo real basado en OpenCV (Código fuente y tutorial)"

11. Referencias


[1] Liu Danping . Detección de carril en escenas complejas basada en el posicionamiento adaptativo de ROI [J]. Revista de la Universidad Normal de Changchun (Edición de Ciencias Naturales) . 2020, (5).

[2] Bai Songrang , Duan Min , Cao Jingsheng , et al. Detección inteligente y reconocimiento de líneas de carril basadas en OpenCV [J]. Journal of Liaoning University of Technology (Edición de Ciencias Naturales) . 2020, (2). DOI: 10.15916 /j.issn1674-3261.2020.02.006 .

[3] Zhang Daofang , Zhang Ruliang . Investigación sobre el algoritmo de detección de línea de carril basado en la segmentación semántica [J]. Innovación y aplicación de ciencia y tecnología . 2019, (6). DOI: 10.3969/j.issn.2095-2945.2019.06.005 .

[4] Jiang Liangchao , Li Chuanyou , Yin Fanqing . Detección de carril basada en OpenCV [J]. Tecnología de motocicletas . 2018, (8). DOI: 10.3969/j.issn.1001-7666.2018.08.004 .

[5] Tang Yangshan , Li Dongliang , Zhu Tingding , et al. Investigación sobre el algoritmo de reconocimiento de línea de carril basado en la transformada de Canny y Hough [J]. Tecnología práctica del automóvil . 2017, (22). DOI: 10.16638/j.cnki.1671 -7988.2017 .22.029 .

[6] Wang Baofeng , Qi Zhiquan , Ma Guocheng , et al. Método de reconocimiento de curva de carril basado en aproximación lineal [J]. Journal of Beijing Institute of Technology . 2016, (5). DOI: 10.15918/j.tbit1001-0645.2016. 05.006 .

[7] Jia Huiqun . Investigación sobre tecnologías clave de navegación autónoma para vehículos no tripulados [D]. 2019.

[8] HG Zhu , HG Zhu . Un método eficiente de detección de líneas de carril basado en visión artificial [J].Journal of Physics: Conference Series.2021,1802(3).032006 (8pp).DOI: 10.1088/1742-6596/1802/3/032006 .

[9] Pattas Bastos Franco, Iago José , Ribeiro, Tiago Trindade , Scolari Conceicao, André Gustavo . Un nuevo sistema de detección visual de líneas de carril para un esquema de control de seguimiento de ruta basado en NMPC [J]. Revista de sistemas robóticos e inteligentes: teoría y aplicación .2021,101(1).DOI: 10.1007/s10846-020-01278-x .

Supongo que te gusta

Origin blog.csdn.net/qunmasj/article/details/128551062
Recomendado
Clasificación