IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenCV Discussion :

Reconnaissance de panneaux routier avec SURF


Sujet :

OpenCV

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Reconnaissance de panneaux routier avec SURF
    Bonjour,

    Je cherche à faire de la reconnaissance de panneaux routier à l'aide d'OpenCV et de la méthode SURF. J'obtiens des résultats aléatoires (parfois très bon, parfois totalement abberant), et je suis à court d'idée..

    Voilà mon approche :

    .Je fais une passe de détection de contours sur la photo
    .Puis j'utilise cvExtractSURF sur chaque contour pour déterminer quel panneau il contient (si il en contient)


    La phase de détection de contour marche parfaitement, en appliquant un flou gaussien + canny edge j'obtients un contour similaire à celui ci :





    Ensuite je compare cette image à plusieurs modèles de panneaux, par exemple :





    La méthode cvExtractSURF me retourne 189 descriptors pour l'image correspondant à mon contour. J'utilise ensuite la méthode naiveNearestNeighbor pour déterminer les similitudes entre mon contour et chacun des templates.

    J'obtient comme résultat :

    6/189 pour la comparaison avec le modèle de sens interdit...
    92/189 pour la comparaison avec le modèle de de parking (???)


    Je ne comprends vraiment pas ces résultats….

    Voici les traitements que j'effectue pour arriver à ce résultat :

    Je passe l'image correspondant au contour en niveau de gris
    Je passe le modèle de panneau en niveau de gris
    J'égalise l'histograme de l'image (cvEqualizeHist)
    Je resize le modèle de panneau pour le faire matcher avec la taille de l'image
    J'applique un flou gaussien sur l'image (cvSmooth)
    J'applique un flou gaussien sur le template de l'image (cvSmooth)
    Je fais un cvExtractSURF sur le modèle
    Je fais un cvExtractSURF sur l'image
    Pour chaque descriteur de l'image je fais un naiveNearestNeighbor
    Je stocke le nombre de point positif

    Pour déterminer la similitude entre le contour et le modèle je me base sur le ratio :

    nombre de point positif / nombre totale de descripteur de l'image


    Merci d'avance pour votre aide, je suis preneur de toutes les idées.
    Vincent

    P.S: Je me suis basé sur l'exemple suivant :

    http://www.emgu.com/wiki/index.php/T...tion_in_CSharp

    L'exemple étant en C# je me suis appuyé sur l'exemple dans find_obj.cpp pour l'adapter en C.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Points : 968
    Points
    968
    Par défaut
    Flouter l'image me semble être une mauvaise idée puisque ça risque de supprimer un paquet de bonnes features. Apres, je connais pas SURF, mais je pense pas que tu aies besoin de redimensionner l'image.
    Peut être que quelqu'un qui s'y connait plus que moi pourra t'aider.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 72
    Points : 104
    Points
    104
    Par défaut
    Surf est invariante à la rotation et redimensionnement, donc pas besoin de redimensionner l'image.
    L'image que t'as pris avec la camera est en perspective, donc les caractéristique géomètrique de l'image sont belle et bien différentes de l'image référence donc c'est normal que ca match pas, je pense qu'il faut essayer d'abord de faire une projection en 2D de l'image capturé par la camera et après tu fais l'extraction des points d'intérêts et la comparaison, je ne connais pas bien le domaine de la 3D et la projection 3D->2D (je pense que ca nécessite un calibrage de la camera ...), mais ton idée m'intéresse beaucoup, je vais essayer de travailler sur ca quand j'aurai le temps..


    Bon courage

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses rapides !

    @ehkhalid : Le problème de perspective me semble une très bonne piste ! Mais ça sous entend que sur l'example de openCV find_obj, ils ne traitent que les images prisent de face ?


    @math_lab : Floutter l'image réduit effectivement le nombre de points mais d'après les tests que j'ai fais ca n'influe pas trop sur le nombre de bonnes feature, ça retire plutot le "bruit" de l'image (saleté sur le panneau, bout de scotch, etc).

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je suis tombé sur ce comparatif hyper intéressant des différents algo de reconnaissance, visiblement SURF est trop lent.

    http://computer-vision-talks.com/201...-algorithms-2/

    Mais de toute façon vu qu'on a en tête de faire cette reconnaissance sur mobile, tous ces algo semble inadapté (si on doit comparé à 400 modèle de panneaux ca va prendre un temps fou)

    Concernant le problème de perspective, je suis tombé sur cette étude de SURF qui effectivement montre que au delà d'un changement d'angle de vue de 30° les algo de reconnaissance perde énormément en précision :

    http://www.vision.ee.ethz.ch/publica...biwi_00517.pdf
    (page 9, figure 16).


    A mon avis c'est l'approche qui est à revoir, j'ouvre un autre sujet

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 72
    Points : 104
    Points
    104
    Par défaut
    Bonjour,
    en effet, Surf n'est pas la plus rapide, pas la plus lente non plus, mais c'est vrai que pour une utilisation sur une plateform mobile, la contrainte des performance est très critique.

    J'ai trouvé cette publication qui utilise une autre approche (Detection par coleur + detection par forme)

    http://www.di.ens.fr/~amini/Publication/PANNEAUX.pdf

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup !!

    Cette mise en oeuvre sans openCV semble abordable en terme d'algo et les résultats sont très intéressant je vais regarder ça de plus près. Encore merci.

    Vincent.

  8. #8
    Membre régulier Avatar de Vestaproman
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2003
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2003
    Messages : 95
    Points : 84
    Points
    84
    Par défaut
    effectivement ce papier semble très intéressant

    VPM

  9. #9
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    En fait la partie interessante (la reconnaissance de forme) est très peu détaillée, ils expliquant simplement qu'ils sont parti d'une approche à base de matrice sans donner les détails d'implémentation.. c'est difficilement exploitable, dommage...

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 20
    Points : 10
    Points
    10
    Par défaut
    sali,
    j'ai une idée pour toi je croix quel va résoudre ton problème :
    Déterminer la couleur dominante du panneau avant de procéder au calcul du SURF. Dans ce cas il existe 3 couleurs dominantes dans les panneaux : Rouge / Bleu / Jaune. Détermine celle qui correspond au panneau souhaité identifié utilisé mode couleur HSV ( TSL ).

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    Citation Envoyé par bayramos Voir le message
    sali,
    j'ai une idée pour toi je croix quel va résoudre ton problème :
    Déterminer la couleur dominante du panneau avant de procéder au calcul du SURF. Dans ce cas il existe 3 couleurs dominantes dans les panneaux : Rouge / Bleu / Jaune. Détermine celle qui correspond au panneau souhaité identifié utilisé mode couleur HSV ( TSL ).
    L'idée est intéressante avec les contours tu peux définir une zone d'intéret et en comparant les histogrammes il devrait être similairement identique ou tout simplement en moyennant la valeur des pixels et en définissant un seuil qui t'es propres. Tout ceci bien sur après avoir fait la perspective

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut SURF critique
    Salut

    Je suis en stage et je cherche a faire la même choque que vous (a peu près ) je cherche à tracker un robot dont j'aurait une image qui me servirait de marker.J'ai déjà repris un algo de SURF que j'ai adapté et ça marche très bien sauf que une image toutes les 600ms c'est pas jouable du tout de faire quelques chose.Avez vous trouver une solution pour accélérer le traitement tout en restant robuste?

    Merci

Discussions similaires

  1. Reconnaissance automatique d'images avec méthode SURF
    Par wilfryjules dans le forum C++
    Réponses: 0
    Dernier message: 04/02/2012, 18h03
  2. Reconnaissance de panneaux routier
    Par vincent.daubry dans le forum OpenCV
    Réponses: 1
    Dernier message: 17/03/2011, 14h01
  3. [Débutant] Détection de panneaux routiers dans une image
    Par syl55 dans le forum Images
    Réponses: 1
    Dernier message: 05/05/2009, 00h17
  4. problème de reconnaissance des HDD IDE avec MB P5Q
    Par Toshi dans le forum Composants
    Réponses: 3
    Dernier message: 09/09/2008, 09h11
  5. Problème sur un réseau routier avec l'algo de Ford-Fulkerson
    Par Yakurena dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 20/02/2006, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo