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

Algorithmes et structures de données Discussion :

Algortihme d'association de points 2D


Sujet :

Algorithmes et structures de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Par défaut Algortihme d'association de points 2D
    Bonjour,

    Je suis à la recherche d'un algorithme d'association de points 2D (x,y) en paquets (typiquement un rectangle). Le nombre de points est variable et se situe entre 1200 et 1500 environ.

    La méthode utilisée actuellement consiste à calculer les distances entre chaque point 2 à 2 et à seuiller mais c'est très consommateur de ressources...
    Quelqu'un aurait-il une méthode plus rapide ?

    Merci.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    classer les points par distance x par exemple (qsort, O(N logN))

    puis calculer les distances (N)

    je l'ai fait pour des polygones quelquonques, et en gros c'est en 5*N*log(N)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Par défaut
    Salut souviron34,

    Merci pour la réponse, mais pourrais-tu être un peu plus précis, je ne suis pas un expert en algorithmie et j'avoue ne pas avoir tout compris.

    Si je comprends bien la complexité pour N = 1300 par exemple reviendrait à 5*1300*log(1300) ~= 20 240 itérations, c'est çà ?

    Comment retrouve-t-on aussi les zones de points et leurs caractéristiques (taille de la zone par exemple)

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    en fait ca revient a de l'etiquetage, mais sur des points et non sur des images



    D'abord tu classes en x ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            ***
      *     ******
    *  *
      * * *          *
                      * ****

    deviendra :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            7911
      2     81012131617
    1  4
      3 5 6          15
                      14 18192021
    puis tu etiquettes en prenant les points les uns a la suite des autres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            222
      1     2222222
    1  1
      1 1 1          3
                      3 3333
    comme c'est classe en x, des que en x tu as plus que ton seuil -> autre "paquet"

    si maintenant a x constant tu as plusieurs y, kif kif..

    j'ai un algo, je te posterais le principe exact...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Par défaut
    Ok merci pour les illustrations, c'est beaucoup plus clair.
    Pour l'algo avec le principe exact, je suis preneur.

    Bonne soirée.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tu programmes en quoi ?

    le principe exact est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tri en X des donneées
     
    intialisation d'un tableau d'indicateurs (taille du nombre de points)
     
    numero paquet = 0
    pour tous les points
        si indicateur = valeur initialisation
             appel d'une routine recursive qui explore le vosinage de'un point de chaque côté
       fin si
       numero paquet = numero paquet + 1
    fin pour
    la routine recursive est :

    routine ( pts, j, indics )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    point j appartient a paquet
    indicateur (j) = paquet
     
       pour point de j -> 0 (décroissant)
          si indicateur = valeur initialisation
               si distance est dans le seuil : 
                     appel routine recursive avec cet indice
               sinon
                      sortie pour
               fin si
          fin si
       fin pour
     
       pour point de j -> N (croissant)
          si indicateur = valeur initialisation
                si distance est dans le seuil : 
                      appel routine recursive avec cet indice
                sinon
                       sortie pour
                fin si
         fin si
      fin pour

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Par défaut
    Hello
    Je programme en C++
    Je vais essayer de tester le pseudocode aujourd'hui.
    Encore merci pour ton aide.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    j'ai oublié un truc d'optimisation dans la routine récursive

    dans les 2 boucles il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
       pour point de j -> 0 (décroissant)
    
          si delta X (point, j) > seuil
               sortie pour
          fin si
    
          si indicateur = valeur initialisation
               si delta Y (point , j) < seuil )
                     si distance (point, j) est dans le seuil : 
                            appel routine recursive avec cet indice
                     fin si
               fin si
          fin si
    
       fin pour
    note : j'ai le code en C, mais ce serait mieux que tu te débrouilles avec ce que tu as, et fasse fonctionner un peu ta tête maintenant

  9. #9
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    la méthode n'est valable que si tous les rectangles sont connexes et avec des coordonnées assez petites pour être mises dans une matrice...

    Si ce n'est pas le cas, tu peux tenter une transformée de Hough pour déterminer les bords des rectangles.

    Si tu connais le nombre de rectangles que tu dois trouver, tu peux tenter une classification par KMeans.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Bonjour,

    la méthode n'est valable que si tous les rectangles sont connexes et avec des coordonnées assez petites pour être mises dans une matrice...

    Si ce n'est pas le cas, tu peux tenter une transformée de Hough pour déterminer les bords des rectangles.

    Si tu connais le nombre de rectangles que tu dois trouver, tu peux tenter une classification par KMeans.


    euh Toto, je crois qu'en cette après-midi t'as loupé ton café

    C'est au contraire valable pour un nuage de points de forme irrégulière.... et SANS matrice...


    C'est bien la raison pour laquelle j'avais fait cet algo... pas de place mémoire pour faire la matrice nécessaire (60K * 60K). Pas de figure géométrique connue à priori.

    (le problème était regrouper les éclairs observés en cellules orageuses sur l'Amérique du Nord, seuil de distance 500m).

    et pour finir : 150 000 points répartis en moins 1/40 seconde sur un Toshiba Satellite de 1999....

  11. #11
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    je comprends ce que tu veux dire maintenant , mais en regardant ton dessin, on aurait dit que tous les points qui formaient un rectangle étaient connexes... d'où ma remarque.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

Discussions similaires

  1. Mettre chaque point d'un graphe de la même couleur que la cellule associée
    Par ANGLIQUESOIG dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/09/2013, 18h43
  2. [XL-2007] nuage de points et etiquettes associées
    Par laduche31 dans le forum Excel
    Réponses: 2
    Dernier message: 23/01/2012, 14h20
  3. Associer un point à un objet
    Par Antoine_935 dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 08/05/2009, 01h14
  4. [Débutant] Association de points à un id
    Par dwight dans le forum MATLAB
    Réponses: 15
    Dernier message: 26/03/2009, 23h24
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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