2010-11-22 3 views
14

J'écris une application qui peut détecter des voies dans un simulateur de conduite. L'environnement est relativement simple, ses routes à plusieurs voies droites et pratiquement pas de courbure du tout. Pour l'instant, je peux détecter avec succès les lignes en utilisant la transformée de Hough (classique) mais le problème est que le HT détecte naturellement les lignes qui ne sont pas des voies.Détection de voie dans un environnement artificiel

Comment puis-je être plus sélectif? Je ne dessine pas des lignes horizontales déjà, mais encore quelques lignes se glisser. Idéalement, je voudrais détecter les limites de la voie que le véhicule roule en. Ce qui suit est une image typique de l'environnement

Environment

Voici ce que je fais jusqu'à présent:

    1. Parce que l'environnement est plus ou moins le même partout où je conduis, je définis la région d'intérêt (RoI) pour exclure l'horizon et tout ce qui se trouve au-dessus.
    2. Seuil de l'image (je vais vous expliquer ma raison de seuil dans un peu)
    3. Canny bord de détection
    4. Appliquer une transformation de Hough
    5. Dessiner détecté lignes excluant celles qui ont un gradient de 0,0 ou presque 0,0

La raison du seuil de l'imagerie est la suivante. Si vous regardez la photo d'environnement ci-dessus, vous verrez une ligne grisâtre parallèle à la route. Parce que c'est une ligne continue - contrairement aux marqueurs de voie - le HT finit par le détecter. Je ne peux pas l'exclure en fonction du dégradé car il a le même dégradé que les marqueurs de ligne. Avec le seuillage, je peux enlever cela et donc ne détecter que les lignes qui sont les marqueurs de voie réels.

Voici le résultat des opérations ci-dessus

Hough Transform

Je comprends qu'il ya beaucoup de solutions à ce problème et je l'ai lu d'innombrables articles sur cela, mais ils semblent tous être manipuler des environnements beaucoup plus complexes que cela et/ou sont tout simplement moyen sur ma tête. Pour ce qui est de sa valeur, il y a un peu plus d'un mois, je n'avais aucune expérience dans ComputerVision et tout cela est très nouveau pour moi.

MISE À JOUR 1:

Je suppose que de mettre cela dans de meilleures conditions, je suis à la recherche d'un moyen de modéliser les voies pour que les lignes qui ne correspondent pas au modèle ne sont pas inclus. Malheureusement, je n'ai pas la moindre idée de l'endroit où commencer avec les modèles. Aucune suggestion? Pour ce que cela vaut, j'ai réussi à identifier les voies dans lesquelles le véhicule circule et peut exclure les lignes supplémentaires qui ne font pas partie de la voie «active», pour ainsi dire. Espérons que cette photo vous aidera

Screenshot

ne est pas parfait, mais ses quelque chose que je pense. Mon but ultime, après la modélisation, est de générer un cap/position du véhicule. Mais je veux juste obtenir, relativement, une détection de voie robuste au début.J'espère qu'il y a une relativement simple technique qui peut aider à atteindre cet objectif (quelque chose qui ne dépend pas des paramètres du système tels que la distance focale du champ de vision).

Répondre

3

Une façon d'aller serait d'utiliser la connaissance préalable de la scène que vous regardez. Vous pouvez avoir un modèle avec un état caché, comprenant plus ou moins de paramètres statiques tels que la hauteur de la caméra, l'inclinaison ou la largeur de la caméra et les paramètres dynamiques tels que le lacet de la caméra, le déplacement latéral de la caméra. pourrait gérer un tel modèle dans le cadre d'un Kalman filter. Un avantage d'un tel modèle serait une capacité à tolérer d'autres marques de surface de route telles que des flèches de direction, des zèbres et autres. Bonne chance!

+0

Malheureusement, je ne peux pas trouver la hauteur de la caméra et d'autres paramètres du simulateur de conduite. Cependant, l'environnement ressemble exactement à la photo ci-dessus 95% du temps. Cette méthode mériterait-elle d'être étudiée? – saad

+0

Si vous connaissez le champ de vision de la caméra, vous pouvez déterminer l'inclinaison à partir de la coordonnée du point de fuite y. Si vous connaissez l'inclinaison (hauteur) et la largeur de la voie, vous pouvez déterminer la hauteur de la caméra. – ssegvic

+0

Y a-t-il un moyen de trouver le champ de vision de manière empirique? Sans connaître la distance focale Le problème est que le simulateur de conduite n'a pas été programmé par moi et est infact d'une autre compagnie entièrement. Alors que je vais essayer de leur demander de telles choses, je ne pense pas que répondre à de telles questions serait en haut de leur liste de priorités! – saad

1

Peut-être que vous pourriez essayer de trouver seulement des lignes sur les bords trouvés dans les transitions gris-blanc plutôt que sur tous les bords de l'image entière?

+0

Voici ce que j'ai trouvé. Je ne sais pas comment c'est élégant. Je vais configurer une région d'intérêt large (mais de faible hauteur) dans l'image. Il va être situé à environ 3/5 la descente. Si et seulement si une ligne croise le bas de cette RoI, je vais le dessiner. Si vous jetez un coup d'oeil à cette image: http://tinyurl.com/349hscq (la sélection = RoI) vous verrez que seules les limites de la voie dans lesquelles le véhicule se déplace croiseront le bas de la sélection et donc je peux marquez-les comme des "voies" et dessinez-les en conséquence. Je sais que cela ne marchera pas dans tous les cas, mais je voulais l'exécuter ici. – saad

+2

semble raisonnable. En vision par ordinateur pratique, tout ce qui fonctionne fonctionne. Enregistrer la clarté ou la précision scientifique ou statistique de l'ordinateur lorsque vous avez quelque chose qui fait quoi que ce soit. –

Questions connexes