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 :

Clustering de points dans une image


Sujet :

OpenCV

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 59
    Par défaut Clustering de points dans une image
    Bonjour à tous,

    Dans le cadre de mon projet de diplome, je dois fais de la détection d'obstacles à partir d'images filmées depuis une caméra placée sur une chaise roulante a moteur en environnement intérieur et immobile.

    Pour ce faire, j'utilise opencv et le flux optique. Puis je clusterise les points détectés pour en faire des objets potentiels. Maintenant, je ne sais le faire qu'avec un nombre de clusters fixé en dur, vu que je ne sais pas à l'avance combien il devrait y avoir d'objets dans mes images...

    J'aurais donc aimé savoir comment décider de manière dynamique le nombre de clusters à former, même si je ne sais pas si c'est possible...

    Par ailleurs pour faire en sorte que les clusters formés soient cohérents d'une image à l'autre, est il possible de définir les graines (seeds) des clusters de la prochaine image à partir du centre des clusters détectés dans l'image précedente?

    Merci pour votre aide

  2. #2
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 39
    Par défaut
    je bosse aussi sur quelque chose d'equivalent , mais dans mon cadre d'etude sa concerne la mise en correspendance et la carte de disparité

    il est prévu ds mon projet de faire du clusuring a l'aide des reseaux de neurones , mais j'en ss au tout début ds cette partie dc......

    je vais chercher plus ds ça et je posterai du nouveau la prochaines fois , sinon si quelqu'un a de la bonne Doc ds ça sa m'interesse tjr

    merci

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 59
    Par défaut
    En cherchant un peu, j'ai fini par tomber sur un algorithme de clustering qui s'appelle le mean shift. Cet algo a l'avantage de n'avoir pas besoin de connaitre le nombre de clusters à former et n'est pas "contraignant sur leur forme" (même si je ne suis pas sur d'avoir compris ce que ca signifie... ).

    Bien sur, ca serait pas marrant si c'était aussi simple Le problème est que j'ai essentiellement trouvé des papiers très "mathématiques", mais apperement il correspond assez bien à ce que je cherche. Ses défauts (par rapport à ce que j'ai compris bien entendu) sont qu'il devient vite lourd au delà d'un certain nombre de dimensions et le pire de tout, il ne se trouve apperement déjà codé, pré-maché et optimisé dans OpenCV

    Pour ceux que ca interesse, il y a un article plutot bien expliqué et une implementation en Java (c'est mieux que le reste que j'ai trouvé, tjrs en Matlab ^^).

    Enfin bref, je vais tenter ca, selon le résultat et si ca interesse qqun, je vous tient au courrant

  4. #4
    Membre expérimenté Avatar de Vinsss84
    Profil pro
    Inscrit en
    Février 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2008
    Messages : 175
    Par défaut
    2 remarques. Pour débuter dans le clustering, regarde peut être du côté des k-means ; tu obtiendra facilement un premier set de résultats

    Ensuite, poru implémenter le meanshift (j'avais cru le voir implémenté quelque part dans opencv mais j'ai du rever) tu peux suivre ce papier relativement bien expliqué et réecrire ton implémentation. Sinon le choix de meanshift est sans doute adapté a tes objectifs, après les résultats vont beaucoup dépendre du type de scènes observées.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 59
    Par défaut
    Salut et merci pour ta réponse,

    Alors pour ce qui est du k-mean, c'est par ca que j'ai commencé (étant donné que c'est celui que j'avais appris en cours de proba ), mais le résultat n'est pas vraiment satisfaisant, vu que je ne peux pas définir par avance combien de clusters je souhaite avoir d'avance...

    Sinon, pour ce qui est du document sur le mean shift, le code est clair, son fonctionnement aussi, c'est au sujet des données en entrée que j'ai de la peine. L'exemple parle ici de débruitage d'une image et se base donc sur un histogramme RVB (tableau 3D) de l'image et lance le mean shift sur chacun des points pour récuperer le centre du cluster auquel il appartient, ce qui donne la nouvelle couleur du point.

    Mais dans mon cas, c'est différent et je ne comprends pas comment l'adapter. J'ai un tableau uni dimensionnel contenant les coordonnées des points que je veux clusteriser. Donc si j'ai plus ou moins compris, voila ce que je dois faire :
    - Créer un tableau bi-dimensionnel de la taille de mon image et y disposer mes points détectés, de manière à ce que la valeur d'un élément [x][y] soit de 1 si il y a un point dessus et de 0 dans le cas contraire
    - Pour chacun de mes points, appliquer le mean shift, ce qui va me donner un nouveau centroid, qui représente le centre du cluster dans lequel il va aller

    Est-ce que je suis un peu juste ou alors je patauge méchamment?

  6. #6
    Membre expérimenté Avatar de Vinsss84
    Profil pro
    Inscrit en
    Février 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2008
    Messages : 175
    Par défaut
    Extrait de la doc open cv
    Pas le temps de em pencher sur la question tout de suite

    MeanShift
    Iterates to find object center.
    int cvMeanShift( IplImage* imgProb, CvRect windowIn, CvTermCriteria
    criteria, CvConnectedComp* out );
    2D object probability distribution.
    imgProb
    Initial search window.
    windowIn
    Criteria applied to determine when the window search should be
    criteria
    finished.
    Resultant structure that contains converged search window
    out
    coordinates (rect field) and sum of all pixels inside the window
    (area field).
    Discussion
    The function MeanShift iterates to find the object center given its 2D color
    probability distribution image. The iterations are made until the search window center
    moves by less than the given value and/or until the function has done the maximum
    number of iterations. The function returns the number of iterations made.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Clustering de points dans une image
    Par DirtyBoy dans le forum Traitement d'images
    Réponses: 15
    Dernier message: 28/01/2009, 17h34
  2. Extraire coordonnées entre deux points dans une image
    Par Pg043 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 16/01/2009, 09h35
  3. Clusturing de points dans une image
    Par faroukus dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 28/08/2008, 15h05
  4. recherche de points dans une image
    Par Clemsouille dans le forum Images
    Réponses: 4
    Dernier message: 26/05/2008, 14h38
  5. le pixel noir le plus proche d'un point dans une image
    Par tlemcenvisit dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 28/03/2006, 08h44

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