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

MATLAB Discussion :

Coordonnées du contour d'un ensemble de points


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2011
    Messages : 42
    Points : 15
    Points
    15
    Par défaut Coordonnées du contour d'un ensemble de points
    Bonjour à tous et à toutes,

    Je suis face à un obstacle: je trace une matrice 2D comportant un nombre important de points. En fait il s'agit de la forme d'un collimateur.

    Ce que je souhaite c'est récupérer les coordonnées (x,y) des points qui sont à l'extérieur (de TOUS les points) de mon ensemble sachant que je connais la matrice (x,y) de tous les points formant mon ensemble. Donc le contour extérieur.

    J'ai essayé convhull mais il ne m'offre qu'une approximation or je veux quelque chose d'ultra précis.

    Ci-joint une image avec le contour de convhull.

    Existe-t-il une solution me permettant de récupérer tous mes points?



    Merci d'avance!

    Ed
    Images attachées Images attachées  

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    si je comprends bien, tu ne possède pas le maillage ou une table de connexité de ces points? Ils ont l'air d'être placé sur une grille régulière, non?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2011
    Messages : 42
    Points : 15
    Points
    15
    Par défaut
    Exact. Je possède juste la matrice (x,y) de chaque points qui sont espacés du même intervalle dans les deux directions.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 163
    Points
    53 163
    Par défaut
    Quelques idées => Obtenir le contour d'une forme
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2011
    Messages : 42
    Points : 15
    Points
    15
    Par défaut
    hmm oui j'avais pensé à implémenter un algo de ce style: je teste chaque ligne chaque colonne, dès que je rencontre un point je vérifie ces 8 voisins s'il en existe 7 ou moins je conserve le point s'il en a 8 je continue.
    Mais à la base, j’eusse espéré qu'il existât une fonction toute faite ou une option de convhull qui me permette d'obtenir le résultat souhaité.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    convhull permet d'obtenir l'enveloppe convexe, sans contrainte supplémentaire, tu ne pourras pas obtenir les zones concaves.

    Comme ta grille est régulière, tu peux voir ton ensemble de points comme une image, et si tu as accès à la toolbox traitement d'image, tu peux utliser la fonction :
    qui d'ailleurs est basé sur l'algorithme de Moore qui est évoqué dans le lien pointé par Dut.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2011
    Messages : 42
    Points : 15
    Points
    15
    Par défaut
    Je ne suis pas sûr de comprendre ce que me retourne bwboundaries.
    En tout cas il ne me retourne pas ce que je cherche.

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Tu ne cherches pas les coordonnées des points de ton contour?

    As-tu regardé l'exemple de la doc? Quel code as-tu utilisé?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2011
    Messages : 42
    Points : 15
    Points
    15
    Par défaut
    Voilà le code que j'ai utilisé mais je ne suis pas sûr de bien l'appliquer....
    En fait si j'ai bien compris. L'argument de bwboundaries doit être une image binaire? Là en l’occurrence ce n'est pas ce que j'ai. En fait j'ai juste des points tracés en 2D issus de ma matrice colli_Matrix.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    h=figure(1)
    plot(colli_Matrix(:,1),colli_Matrix(:,2),'.');
    B = bwboundaries(h);

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 163
    Points
    53 163
    Par défaut
    Il "suffit" de passer du repère cartésien (x1...xn,y1...ym) au repère discret (1...mLigne,1...nColonne) comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    x = colli_Matrix(:,1);
    y = colli_Matrix(:,2);
     
    rows = 1+(y-min(y))/intervalle;
    cols = 1+(x-min(x))/intervalle;
     
    nrows = max(rows);
    ncols = max(cols);
     
    bw = zeros(nrows,ncols);
     
    bw(rows,cols) = 1;
    et ensuite :

    Le changement de repère inverse te donnera les valeurs (x,y) du "contour"

    C'est l'idée...
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2011
    Messages : 42
    Points : 15
    Points
    15
    Par défaut
    Et sinon si j'effectue le changement de repère comme tu le proposes, est-ce que contourc peut marcher aussi?

    Bon en fait je récupère la matrice de 0 et de 1, sauf qu'en utilisant bwboundaries, je récupère quoi? Les indices de ma matrice pour lesquels bw(rows,cols)==1?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2011
    Messages : 42
    Points : 15
    Points
    15
    Par défaut
    J'avance un peu. Je récupère bien la matrice de mon contour mais c'est lors du retour au cartésien que je dois pas faire quelque chose de bien. Cf image et code:

    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
    xc = colli_Matrix(:,1);
    yc = colli_Matrix(:,2);
     
    xmin = min(xc);
    ymin = min(yc);
     
    B=bwboundaries(colliMat);
    B{1,1}(1,:) = [];
     
    rows = B{1,1}(:,1);
    cols = B{1,1}(:,2);
     
    x = (rows-1)*0.5+xmin;
    y = (cols-1)*0.5+ymin;
     
    figure(1)
    plot(x,y,'r.');
    hold on
     
    plot(colli_Matrix(:,1),colli_Matrix(:,2),'.');
    colliMat est la matrice de 0 et 1
    Images attachées Images attachées  

  13. #13
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 163
    Points
    53 163
    Par défaut
    Dans un premier temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rows = B{1,1}(:,2);
    cols = B{1,1}(:,1);
    La correspondance exacte est (x,y) <=> (colonne,ligne)
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

Discussions similaires

  1. [Google Maps] Centre d'un ensemble de points-coordonnées
    Par glouk dans le forum APIs Google
    Réponses: 1
    Dernier message: 05/04/2012, 23h01
  2. Réponses: 5
    Dernier message: 16/02/2007, 15h53
  3. boule minimale contenant un ensemble de points
    Par tlemcenvisit dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 28/02/2006, 10h36
  4. Récupérer l'ensemble des points d'une droite
    Par Psycho_Kwak dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 18/01/2006, 11h42
  5. Réponses: 3
    Dernier message: 12/06/2002, 19h03

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