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 :

Question SIFT/SURF et FLANN


Sujet :

OpenCV

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Question SIFT/SURF et FLANN
    Bonjour,

    Surement certains connaissent les descripteurs de SIFT. En gros j'ai utilisé le code à cette adresse http://docs.opencv.org/2.4.2/doc/tut...ighlight=flann. Sauf que avec SURF le code ne marche pas trop (problème de correspondance). Mais avec SIFT cela marche. (SiftFeatureDetector et SiftDescriptorExtractor). Par curiosité j'ai essayé de détecter l'objet avec lui même (est-ce que vous saisissez?), afin de voir les lignes qui relis les key points, sauf que bizarrement ça ne marche pas.

    Je sais que c'est à cause de la distance minimal entre les key points mais j'ai un peu du mal à saisir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      //-- Draw only "good" matches (i.e. whose distance is less than 2*min_dist )
      //-- PS.- radiusMatch can also be used here.
      std::vector< DMatch > good_matches;
     
      for( int i = 0; i < descriptors_1.rows; i++ )
      { if( matches[i].distance < 2*min_dist )
        { good_matches.push_back( matches[i]); }
      }
    Quand on augmente la distance et bien on trouve des correspondances complément fausses. Je pensais que cela marchait du premier coup, sans regarder ce paramètre de distance.

    Si je vous demande de m'éclairer, c'est parce que là je cherche à utiliser SIFT pour de la détection de mouvement. Ce que je souhaite c'est donc observer (et dessiner) le mouvement des key points d'une frame à l'autre avec des petites flèches. Sauf que entre 2 frames d'une vidéo, les images sont presque identiques, donc j'ai une distance minimal proche de zéro et le critère de la distance n'est plus du tout utile car aucune correspondance n'est considérée comme bonne. Du coup je garde FlannBasedMatcher, je ne passe plus par ce critère de distance mais j'utilise les coordonnées des key points. Pour essayer de m'en sortir, je dis que si la distance euclidienne est proche de zéro (<3 pixels) alors ce n'est pas un bon point a dessiner. J'observe bien les descripteurs sur mon objet mais j'ai beaucoup d'erreurs à côté.

    La scène est sur le lien suivant:
    https://docs.google.com/open?id=0B3_...ThYaHpOREY1YUU

    et voila un exemple d'image résultat.
    https://docs.google.com/open?id=0B3_...WtheTJ5cDcwWEE
    Après les erreurs sont peut être dûes au léger fourmillement de la camera.

    La question serait donc, est-ce que vous avez des idées afin d'améliorer le résultat?

    J'espère avoir été claire.

    Merci d'avance.

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 43
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    Je ne suis pas sur que les descripteurs SIFT ou SURF soient adaptés pour de la détection de mouvement.
    De mémoire je les ai utilisé pour assembler des images ( créer une image panoramique, une carte façon google map...).
    Y'a d'autres utilisations bien sur mais dans ton cas est ce qu'une simple soustraction binaire ne serait pas plus efficace ?

    Par exemple :

    Image 1 : la zone que tu surveilles
    Image 2 : l'image ou tu veux détecter des mouvements issus de ta caméra

    Si tu as du bruit tu effectues un filtre median sur tes images.
    Puis tu soustrais image 1 par image 2 (en valeur absolue)

    Tu faits ensuite un treshold dont le seuil élimine les variations faible, tu obtiens donc une image binaire.
    Les tâches qui apparaissent sont les anomalies par rapport à ton image de base.
    Tu définis un rectangle par rapport à ces anomalies et tu y affecte un algo de tracking tel que le camshift dont tu prends soin de comparer image par image les résultats du camshift avec le résultat de ta soustraction binaire.

    (si le camshift + la soustration binaire trouvent un résultat au même endroit alors ce résultat est bon)

    C'est une réflexion qui n'est pas issus de tests ou de quoi que ce soit donc je peux me planter, c'est juste que je serais plus partis vers ce genre de méthode.

    En espérant que ça t'aide.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Optical flow
    Je ne sais pas si tu connais le principe des Optical Flow mais jette un oeil dessus.
    Si je ne dis pas de bêtises ça sert à calculer les déplacements des pixels d'une images à l'autre en gros.
    Jamais utilisé mais j'ai lu quelques bricoles deci delà.

    En espérant t'aider

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci pour vos réponses.

    Je testais également l'optical flow avec l'algorithme de LK en pyr. En fait je voulais comparer ces méthodes et voir laquelle fonctionne le mieux. C'est vrai que l'optical flow c'est plus rapide et ça marche mieux. Avec SIFT je n'arrive pas a trouver un résultat convaincant.

    Mais selon le principe des descripteurs ça devrait marcher. C'est ça que je ne comprend pas. Et puis j'ai vu des travaux de personnes qui utilisent SIFT et ça a l'air de fonctionner.

    Merci Jerôme L, mais l'optical flow marche déjà bien. Je vais voir ce que ça donne à l'occasion.

  5. #5
    Membre régulier
    Homme Profil pro
    Computer Vision engineer
    Inscrit en
    Mars 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Computer Vision engineer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 65
    Points : 86
    Points
    86
    Par défaut
    Euh les SIFT pour le suivi ?
    Ce genre de discripteurs sont généralement utlisés en statique (appariement ou Matching soit en calcul de distance direct ou en Learning), j'ai pas encore utilisé le 'flot optique' mais a mon avis la fonction implémenté sur OpenCv cherche elle-même les features a tracker, non ? (BestFeaturesToTrack, un truck du genre...)

  6. #6
    Membre régulier
    Homme Profil pro
    Computer Vision engineer
    Inscrit en
    Mars 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Computer Vision engineer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 65
    Points : 86
    Points
    86
    Par défaut
    Oups désolé, je me rends compte que j'étais à coté de la plaque !

    il faut quand même faire un codage préliminaire de l'image (d'ou les discripteurs) et le choix des meilleurs a tracker se fait justement,sur le codage et non pas l'image en question ! J'ai rien dis désolé ^^ !

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  2. Divers questions
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 06/08/2002, 21h57
  3. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11
  4. Question de faisabilité
    Par lisarasu dans le forum CORBA
    Réponses: 3
    Dernier message: 14/05/2002, 11h26
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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