Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Detección Avanzada de Carril Curvo con OpenCV

Historia

Introducción

Las marcas de carril son la columna vertebral de cualquier sistema de conducción autónoma, guiando vehículos de forma segura por el tráfico. Basándome en mi proyecto previo de detección de carril recto, he desarrollado un pipeline robusto de detección de carril curvo que funciona de forma fiable en entornos complejos como sombras, oclusiones y superficies de carretera irregulares.

El flujo completo de procesamiento de imagen se implementa en Python usando OpenCV:

Limitaciones del Sistema Previo

El modelo anterior se limitaba a carriles rectos y luchaba con curvas, sombras y oclusiones parciales. El nuevo pipeline aborda estas carencias incorporando filtrado basado en bordes y un enfoque de ventana deslizante dinámico.

Corrección de Distorsión

Las lentes de cámara introducen distorsión radial que puede sesgar mediciones. Calibrando la cámara contra un patrón conocido —típicamente un tablero de ajedrez asimétrico— generamos un modelo de distorsión que corrige todo el dataset.

El procedimiento de calibración implica capturar múltiples imágenes del tablero, detectar esquinas con cv2.findChessboardCorners(), y calcular la matriz de cámara y coeficientes de distorsión usando cv2.calibrateCamera(). Las imágenes corregidas se producen con cv2.undistort().

A continuación, una comparación lado a lado de una imagen de tablero sin distorsión, demostrando la mejora sutil pero crítica.

Este es el código de calibración usado:

def undistort_img():
    # Preparar puntos objeto 0,0,0 … 8,5,0
    obj_pts = np.zeros((6*9,3), np.float32)
    obj_pts[:,:2] = np.mgrid[0:9, 0:6].T.reshape(-1,2)
    objpoints = []
    imgpoints = []
    images = glob.glob('camera_cal/*.jpg')
    for fname in images:
        img = cv2.imread(fname)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        ret, corners = cv2.findChessboardCorners(gray, (9,6), None)
        if ret:
            objpoints.append(obj_pts)
            imgpoints.append(corners)
    img_size = (img.shape[1], img.shape[0])
    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img_size, None, None)
    dst = cv2.undistort(img, mtx, dist, None, mtx)
    dist_pickle = {'mtx': mtx, 'dist': dist}
    pickle.dump(dist_pickle, open('camera_cal/cal_pickle.p', 'wb'))
    return dst

def undistort(img, cal_dir='camera_cal/cal_pickle.p'):
    with open(cal_dir, 'rb') as f:
        file = pickle.load(f)
    mtx, dist = file['mtx'], file['dist']
    return cv2.undistort(img, mtx, dist, None, mtx)

undistort_img()
img = cv2.imread('camera_cal/calibration1.jpg')
dst = undistort(img)

Las funciones también están disponibles en el notebook Jupyter adjunto bajo la sección Code.

A continuación, un ejemplo de corrección de distorsión aplicada a una escena de conducción. Aunque la diferencia visual es sutil, la geometría precisa es crítica para el procesamiento posterior.

Transformación de Perspectiva (Perspective Warp)

Detectar carriles curvos directamente en espacio de cámara es difícil. Transformando la imagen a vista de pájaro, podemos asumir que el carril yace en un plano plano y ajustar un polinomio con alta precisión.

La transformación se realiza con cv2.getPerspectiveTransform() y cv2.warpPerspective(). Los puntos origen y destino se eligen para preservar la geometría del carril mientras maximizan la visibilidad.

def perspective_warp(img, dst_size=(1280,720), src=np.float32([(0.43,0.65),(0.58,0.65),(0.1,1),(1,1)]), dst=np.float32([(0,0),(1,0),(0,1),(1,1)])):
    img_size = np.float32([img.shape[1], img.shape[0]])
    src = src * img_size
    dst = dst * np.float32(dst_size)
    M = cv2.getPerspectiveTransform(src, dst)
    return cv2.warpPerspective(img, M, dst_size)

Filtrado Sobel

El filtrado por color solo puede clasificar erróneamente hormigón claro como marcas de carril. En su lugar, empleamos detección de bordes basada en gradientes. El operador Sobel computa gradientes horizontales en el espacio de color HLS, resaltando bordes de alto contraste del carril mientras suprime la superficie de la carretera.

La máscara binaria resultante es robusta a variaciones de iluminación y se usa como entrada para la búsqueda con ventana deslizante.

Detección de Picos en Histograma

Antes de aplicar la ventana deslizante, identificamos las posiciones horizontales aproximadas de las líneas de carril calculando un histograma de la imagen binaria junto al eje x. Los picos más altos a cada lado corresponden a los puntos base del carril izquierdo y derecho.

Búsqueda con Ventana Deslizante

Usando los puntos base, el algoritmo de ventana deslizante recopila iterativamente índices de píxeles pertenecientes a cada carril. Luego ajusta un polinomio de segundo grado a cada carril, permitiendo estimación precisa de curvatura y posición del vehículo relativa al centro del carril.

La superposición final muestra el área de carril detectada, curvatura y offset del vehículo en tiempo real.

Leer más: Detección de Carril Curvo

Proceso de manufactura

  1. Detección y Diagnóstico de Fallos: Mejorando la Fiabilidad y Eficiencia del Mantenimiento de Equipos
  2. Sistema de Alarma por Detección de Movimiento con Java y Reactive Blocks – Despliegue en Raspberry Pi y Envío de SMS
  3. Farmaid: Robot Autónomo para Detección y Marcado Preciso de Enfermedades en Plantas
  4. Integración de Microsoft Kinect con Raspberry Pi para Detección Humana en Tiempo Real en Robot Sonbi
  5. Fresado CNC de Precisión para Superficies Curvas
  6. Sensores fotoeléctricos Omron E3AS‑F logran detección ToF de 1,5 metros
  7. Sensor de Distancia Ultrasónico Basado en 8051 – Diseño, Circuito y Aplicaciones
  8. Sistemas de Detección de Intrusión: Protegiendo tu Red con Alertas Inteligentes
  9. Sensor ToF Hydra3D Entrega Detección 3D Rápida y Precisa para Aplicaciones Industriales y Exterior
  10. AEye presenta LiDAR de largo alcance que detecta vehículos a 1.000 m para conducción autónoma
  11. Uso de tecnología de microarrays para detectar expresión génica en investigación clínica