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

C++ Discussion :

Trie de points d'une image vectorielle


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Par défaut Trie de points d'une image vectorielle
    Bonjour,
    J'essaie de retrouver des formes fermées sur une image vectorielle. Pour ça j'utilise différentes structure du type :

    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
    35
    36
    struct PointLine{
    double abs;
    double ord;
    };
     
    struct PointArc {
    double absCentre;
    double ordCentre;
    double rayon;
    double angleDebut; // en degré
    double angleFin;
    };
     
    struct G03 {
    int numLigneG03;
    char GCode[];
    PointLine P1;
    PointLine P2;
    PointArc P3;
    };
     
    struct G01 { //....
    int numLigneG01;
    char GCode[];
    PointLine P1;
    PointLine P2;
    };
     
    struct Point {
    G03 Objet03;
    G01 Objet01;
    };
     
    struct Element {
    Point forme;
    };
    Je manipule des motifs dans mon image constitués de traits et d'arc de cercle, les coordonnées d'un motif ou d'une forme que j'estime fermée ne sont pas toujours identiques. C'est à dire quand j'ai un arc et un trait qui appartiennent au meme motif et qui se suivent, il arrive qu'il y ait dans les coordonnées censées etre une intersection du trait et de l'arc quelques dizièmes de mm de différence au lieu que se soient exactement les memes.
    Je crée une liste de ma structure Element de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Element element;
    QList<Element> list;
    Tous les arguments utilisés dans mes structures sont stockés dans un fichier.txt que j'ai appelé pour le coup : "CoordonneesCompletesGO1_GO2_GO3.txt".

    Il est donc très simple d'initialiser ma liste.
    Ce qui donne quelque chose comme ç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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    string file = "CoordonneesCompletesGO1_GO2_GO3.txt";
     
    if ( !fichier ) {
    cout << "fichier inexistant";
    }
    else {
    string chaine;
     
    for(int i = 0; i < CorrespondanceLignesArc ; i++)
    {
    getline(fichier, chaine);
    istringstream t(chaine);
    t.clear();
    t.str(chaine);
    t >> setprecision (20) >> element.forme.Objet03.numLigneG03
    >> element.forme.Objet03.GCode >> element.forme.Objet03.P1.abs
    >> element.forme.Objet03.P1.ord >> element.forme.Objet03.P2.abs
    >> element.forme.Objet03.P2.ord >> element.forme.Objet03.P3.absCentre
    >> element.forme.Objet03.P3.ordCentre >>element.forme.Objet03.P3.angleDebut
    >> element.forme.Objet03.P3.angleFin >> element.forme.Objet03.P3.rayon;
    list << element;
    }
    //element.forme.Objet03.P1.abs .... abscisse du Point1 d'un arc de cercle
    //element.forme.Objet03.P1.ord .... ordonnée du Point1 du même arc
    //element.forme.Objet03.P2.abs .... abscisse du Point2 du meme arc
    //element.forme.Objet03.P2.ord .... ordonnée du Point2 du meme arc
     
    for(int i = CorrespondanceLignesArc; i < CorrespondanceLignes ; i++)
    {
    getline(fichier, chaine);
    istringstream t(chaine);
    t.clear();
    t.str(chaine);
    t >> setprecision (20) >> element.forme.Objet01.numLigneG01
    >> element.forme.Objet01.GCode >> element.forme.Objet01.P1.abs
    >> element.forme.Objet01.P1.ord >> element.forme.Objet01.P2.abs
    >> element.forme.Objet01.P2.ord;
    list << element;
    }
    }
     
    valeur = list.count();
    }
     
    //element.forme.Objet01.P1.abs .... abscisse du Point1 d'un trait
    //element.forme.Objet01.P1.ord .... ordonnée du Point1 d'un trait
    //element.forme.Objet01.P2.abs .... abscisse du Point2 d'un trait
    //element.forme.Objet01.P2.ord .... ordonnée du Point2 d'un trait
    J'utilise beaucoup les librairie Qt4 donc je voulais trier ma liste avec qSort où d'ailleurs avec autre chose ce n'est pas forcément le soucis.
    Mes structures sont un peu lourdes car je traite des fichier de type autocad (.dxf) et qu'il est important pour moi de conserver suffisamment de données pour que mes résultats soient exploitables une fois les tris réalisés.
    Le soucis est qu'avec la liste que je manipule, je n'arrive pas à poser les bonnes conditions pour trier les coordonnées de manière à reconstituer les formes fermées de mon image.

    Voilà donc j'aurai souhaité un petit peu d'aide SVP. J'espère que j'ai été suffisamment claire sinon je m'en excuse
    Merci d'avance.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Pour trier, deux étapes : Établir une bonne relation d'ordre entre les éléments (pouvoir dire si l'un est plus petit que l'autre) et appeler le bon algo de tri (en général, std::sort est un bon choix).

    Sur quelle étape bloques-tu ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 2
    Par défaut
    Tout d'abord merci JolyLoic pour les balises, je suis novice dans le forum et je n'ai pas eu le reflexe.
    J'ai des coordonnées de traits ou d'ars dans chacunes des cases de ma liste, j'ai donc deux Points à vérifier à chaque teste. Ces deux points ont un sens physiques uniquement ensemble vu qu'il s'agit de trait ou d'arc de cercle, ce qui me paraît très différent d'un trie de tableau de points.
    Le second soucis que j'ai c'est pour retrouver les formes fermées de mon image étant donné que les points extrêmes de mes arcs et de mes cercles censés être identiques n'ont jamais exactement les mêmes coordonnées.
    En fait je ne visualise pas l'algorithme qu'il faudrait étant donné qu'il ne s'agit pas finalement d'un tri de points mais d'une reconnaissance de formes fermées, donc plutôt d'un teste sur chacun des segments pour savoir s'il a un segment voisin ou non.
    Merci d'avance

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/03/2014, 23h20
  2. Génerer une image vectorielle
    Par vence dans le forum Flash
    Réponses: 3
    Dernier message: 16/02/2007, 13h46
  3. Algorithme zone de points sur une image
    Par Alain15 dans le forum 2D
    Réponses: 1
    Dernier message: 08/12/2006, 00h55
  4. 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
  5. Mesure distance entre 2 points d'une image
    Par vexal dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/05/2005, 14h29

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