2010-11-22 8 views
14

Estoy escribiendo una aplicación que puede detectar carriles en un simulador de conducción. El entorno es relativamente simple, sus carreteras son en su mayoría rectas de varios carriles y casi no tienen curvatura. Por el momento, puedo detectar con éxito las líneas usando la Transformada Hough (clásica), pero el problema es que el HT naturalmente también detecta líneas que no son carriles.Detección de carril en un entorno artificial

¿Cómo puedo ser más selectivo? No dibujar líneas horizontales ya, pero todavía algunas líneas de fluencia en. Idealmente, me gustaría para detectar los límites de carril que el vehículo está viajando. La siguiente es una imagen típica del medio ambiente

Environment

Esto es lo que estoy haciendo hasta ahora:

    1. Como el entorno es más o menos el mismo en todos los lugares donde conduzco, configuro la región de interés (RoI) para excluir el horizonte y todo lo que esté sobre él.
    2. Umbral de la imagen (voy a explicar mi razón de umbral en un momento)
    3. Canny Edge Detección
    4. Aplicar una transformada de Hough
    5. Dibuje el detectados líneas que excluyen las que tienen un gradiente de 0.0 o casi 0.0

El motivo del umbral de las imágenes es el siguiente. Si echas un vistazo a la fotografía del entorno vinculada anteriormente, verás una línea grisácea que corre paralela a la carretera. Debido a que es una línea continua, a diferencia de los marcadores de carril, la HT termina detectándola. No puedo excluirlo en función del gradiente ya que tiene el mismo gradiente que los marcadores de carril. Con el umbral, puedo eliminar eso y, por lo tanto, solo detectar líneas que son los marcadores de carril reales.

Este es el resultado de las operaciones anteriores

Hough Transform

Entiendo que hay muchas soluciones a este problema y he leído innumerables artículos sobre esto, pero todos ellos parecen estar manejando entornos mucho más complicado que esto y/o simplemente están muy por encima de mi cabeza. Por lo que vale, hace poco más de un mes, no tenía experiencia en ComputerVision y todo esto es muy nuevo para mí.

ACTUALIZACIÓN 1:

supongo que para poner esto en mejores condiciones, estoy buscando una manera de modelar los carriles de modo que las líneas que no encajan en el modelo no se incluyen. Lamentablemente, no tengo ni idea de por dónde empezar con los modelos. ¿Alguna sugerencia?

Por lo que vale, he logrado identificar los carriles por los que viaja el vehículo y puedo excluir las líneas adicionales que no son parte del carril "activo", por así decirlo. Con suerte esta foto ayudará

Screenshot

No es perfecto, pero es algo que supongo. Mi objetivo final, después del modelado, es generar un rumbo/posición del vehículo. Pero solo quiero obtener una detección de carril relativamente robusta al principio.Espero que haya una técnica simple relativamente que puede ayudar a lograr esto (algo que no depende de los parámetros del sistema, como la distancia focal del campo de visión).

Respuesta

3

Una forma de hacerlo sería utilizar el conocimiento previo de la escena que está viendo. Podría tener un modelo con un estado oculto, que incluya parámetros más o menos estáticos como altura de la cámara, inclinación de la cámara o ancho de carril y parámetros dinámicos como la guiñada de la cámara, desplazamiento lateral de la cámara dentro del carril, curvatura del camino, etc. podría manejar dicho modelo en el marco de un Kalman filter. Una ventaja de dicho modelo sería la capacidad de tolerar otras marcas en la superficie de la carretera, como flechas de dirección, cebras y demás. ¡Buena suerte!

+0

Lamentablemente, no puedo averiguar la altura de la cámara y otros parámetros del simulador de conducción. Sin embargo, el entorno se ve exactamente como la foto superior al 95% del tiempo. ¿Valdría la pena investigar ese método? – saad

+0

Si conoce el campo de visión de la cámara, puede determinar la inclinación desde la coordenada y del punto de fuga. Si conoce la inclinación (inclinación) y el ancho del carril, puede determinar la altura de la cámara. – ssegvic

+0

¿Hay alguna manera de que pueda encontrar el campo de visión empíricamente? Sin saber la distancia focal. El problema es que la simulación de manejo no fue programada por mí y de hecho es de otra compañía completamente. Si bien trataré de preguntarles sobre tales cosas, ¡no creo que contestar esas preguntas sería una prioridad en su lista de prioridades! – saad

1

¿Quizás podría tratar de encontrar solo líneas en los bordes que se encuentran en las transiciones gris-blanca en lugar de en todos los bordes de toda la imagen?

+0

Esto es lo que se me ocurrió. No estoy seguro de qué tan elegante es. Voy a configurar una región de interés (RoI) amplia (pero corta en altura) en la imagen. Va a estar ubicado a aproximadamente 3/5 de la bajada. Si y solo si una línea se cruza con la parte inferior de este ROI, lo dibujaré. Si echas un vistazo a esta imagen: http://tinyurl.com/349hscq (la selección = RoI) verás que solo los límites de carril por los que viaja el vehículo se intersectarán con la parte inferior de la selección y, por lo tanto, puedo marcarlos como "carriles" y dibujarlos en consecuencia. Sé que no funcionará en todos los casos, pero quería ejecutarlo aquí. – saad

+2

suena razonable. En la visión computacional práctica, lo que funciona funciona. Guarde la claridad o la precisión científico-informática o estadística para cuando tiene algo que hace algo. –

Cuestiones relacionadas