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 :

[Algorithme] Correspondance de points


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut [Algorithme] Correspondance de points
    Bonjour à tous,

    Je suis à la recherche d'un algorithme (normal vous me direz vu où l'on se trouve dans le forum ...). Je vous explique ce que je cherche :
    Soit deux ensembles E1 et E2. La taille de ces ensembles pouvant être différente. Les éléments de E1 et E2 étant des points (une valeur X et une valeur Y).

    Ce que je cherche à faire c'est, dans la mesure du possible pour tous les éléments de E1, trouver l'élément de E2 le plus proche (pour le calcul de la distance on pourra simplifier par distance(), peut importe ma méthode). Sachant que un élément de E2 ne peut être associé qu'à 0 ou 1 élément de E1.

    Pour le moment je fais ça :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    // Calcul des distances
    Pour tout e1 élément de E1 faire
      Pour tout e2 élément de E2 faire
        dist[e1,e2] = distance(e1,e2)
      Fin pour
    Fin pour
    associe = 0
    // Traitement de la matrice
    Tant que (associe < size(E1) && associe < size(E2)) faire
       valeur = MAX
       e1c = NULL
       e2c = NULL
       // Recherche de la valeur minimum dans notre table  de distance
       Pour tout e1 de E1 faire
         Pour tout e2 de E2 faire
           si dist[e1,e2] < valeur alors
              valeur = dist[e1,e2]
              e1c = e1
              e2c = e2
           Fin si
         Fin pour
       Fin pour
       Traitement(e1c,e2c)
       // Suppression des distances correspondantes à e2c
       Pour tout e1 élement de E1 faire
         dist[e1,e2c] = MAX
       Fin pour
       // Suppression des distances correspondantes à e1c
       Pour tout e2 élément de E2 faire
         dist[e1c,e2] = MAX
       Fin pour
       incrémente associe
    Fin tant que
    Bon ... c'est l'algo que j'utilise (après évidemment je ne l'ai pas implémenté tel quel ... mais le principe est le même derrière).

    Que pouvez-vous me proposer de plus disons ... performant et peut-être même plus intelligent.
    Je dis intelligent car, admettons la matrice de distance suivante :
    ---------E11-|--E12--|--E13--|-E14
    E21-|--- 3 ---|---2---|---12--|--1
    E22-|--- 7 ---|---7---|---8 --|--8
    E23-|--- 9 ---|---4---|---4 --|--5
    E24-|--- 7 ---|---11--|---11--|--3
    E25-|--- 6 ---|---8---|---12--|--4
    E26-|---10---|---3---|---9 --|--1

    L'algorithme que je donne va donner les appels suivants :
    Traitement(E14,E21)
    Traitement(E12,E26)
    Traitement(E13,E23)
    Traitement(E11,E25)

    Alors qu'une réorganisation des éléments dans les ensembles aurait donnée un autre résultat (ceci à cause des valeurs égales en fait).


    Donc : comment améliorer cet algorithme ? Tant en terme de performance que d'un point de vue ... précision si je puis dire.
    Concernant la performance, sachez juste que, la manière dont j'ai codé l'algorithme, distance n'est qu'un simple tableau à une dimension ... Je le parcours avec seulement une boucle for (pour la recherche du minimum).

    Voilà, j'espère avoir été plus ou moins clair. Si vous avez besoin de plus d'informations, surtout N'HESITEZ PAS à me le dire ... Je détaillerai plus ou je ré-expliquerai les choses différemment ou je ne sais quoi


    Merci de m'avoir lu et de votre éventuelle réponse

    Bonne journée

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Je te suggère une recherche du document "A new point matching algorithm for non-rigid registration", qui explique un algorithme basé sur la meme idée que la tienne.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut
    Bonjour,


    J'étais effectivement tombé sur ce paper ... mais je reconnais ne pas avoir eu le courage de le lire sur le coup (je n'étais pas non plus certain que cela correspondait à ce que je cherchais ) ... Mais bon, il semblerait que ce soit le mieux à faire. Du coup je te remercie

    Par contre, si cela ne dérange pas, je laisse le topic ouvert au cas où d'autres personnes désirent contribuer ou autre.
    Si finalement je mets en application ce qu'il y a dans ce paper, je viendrais poster une réponse ici et fermerais le sujet (je l'espère )

    Merci encore et bonne journée

  4. #4
    Membre Expert Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Par défaut
    Pour chaque point p, tu construis la liste des points q à distance minimale. Ici à E12 on a associé la liste {E21} et à E14 la liste {E21,E26}.

    Tu commences ton traitement par les points p n'ayant qu'une seul point dans leur liste associée, puis tu passes à ceux qui en ont deux, etc.

    De cette façon tu auras E12<->E21 puis E14<->E26.

    Avantage de ces listes: tu peux y mettre qq points de plus si cela t'arrange...

  5. #5
    Membre expérimenté
    Inscrit en
    Mars 2008
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 209
    Par défaut
    Moi je ne vois qu'un simple problème d'affectation ... un algorithme comme la méthode hongroise résous le problème

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Comment se présente la répartition des points dans les ensembles :
    - bornes sur X et Y ?
    - répartion plus ou moins aléatoire ?
    - aggrégats ?
    - essaim ?
    - ...

Discussions similaires

  1. matrice fondamentale: algorithme des 8 points et normalisation
    Par MPEG4 dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 15/12/2008, 15h54
  2. 3D tracking : correspondances de points 2d 3d.
    Par TDDev dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 26/08/2008, 01h35
  3. Correspondance de points de Harris
    Par faroukus dans le forum OpenCV
    Réponses: 1
    Dernier message: 05/08/2008, 15h57
  4. Réponses: 1
    Dernier message: 05/08/2008, 15h47
  5. Algorithme zone de points sur une image
    Par Alain15 dans le forum 2D
    Réponses: 1
    Dernier message: 08/12/2006, 00h55

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