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

Images Discussion :

[plot] Enregistrer les points présents sur une figure


Sujet :

Images

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut [plot] Enregistrer les points présents sur une figure
    Bonjour a tous,

    J'essaye de detecter des points et des cercles (sans avoir a les differencier tout les deux) sur une image independamment d'autres formes bien plus grosses. Apres avoir applique une detection de contour par sobel, j'utilise la fonction bwboundaries pour trouver les contours de tous les objets. Comme l'image est degardee par une fonction de seuil, des points parasites apparaissent autour des formes. Pour les supprimer facilement sans avoir a augmenter le seuil (qui degraderait encore plus l'image), j'utilise la fonction "plot" pour afficher les contours en gras (epaisseur 5) autour des formes en utilisant les coordonnes renvoyes par b = bwboundaries --> b{k} pour k formes. Ainsi les cercles deteriores et coupes en deux sont colles a nouveau et les points parasites sont absorbes par les formes environnantes.

    Le probleme, c'est que lorsque j'appelle la fonction getimage(h), celle ci ne me renvoie que les donnes concernant l'image pre-traitee et pas l'image ET les contours ajoutes l'image grace a "plot". Si quelqu'un a une idee je suis preneur.

    Merci d'avance,
    mAo

    EDIT : voir exemple de detection de piece dans matlab image toolbox (edge detection)

  2. #2
    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 : 52 882
    Points
    52 882
    Par défaut
    Je ne suis pas sûr d'avoir tout compris mais bon, essaie ceci : How can I print only the axes of my figure?
    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)

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Interessant, en fait l'idee est la : recuperer la "Frame", c.a.d l'image telle qu'on la voit lorsqu'on a appliques des modifications avec plot sur une image. Le seul probleme de ton exemple est qu'il me retrecie mon image (probleme 1) en y ajoutant les axes x et y dont je n'ai pas besoin (probleme 2). Merci pour ce debut de piste en tout cas.

  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 : 52 882
    Points
    52 882
    Par défaut
    Pour avoir l'image en "grandeur réelle", il faut mettre la propriété Units de l'objet Axes à Pixels.

    Sinon, l'autre méthode : How can I add text to an image and make the text become part of the image within MATLAB?

    Que j'aurais dû te soumettre en premier, je pense
    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
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Je n'arrive pas a eviter la modification de taille de l'image(640*480) avant de recuperer l'image. J'obtiens une image plus grande. Ce que je ne comprends pas, c'est que un appel a "size" sur les donnes de la frame (cdata) me renvoie trois valeurs.

    EDIT : En fait, des bordures on ete ajoutes lors de la capture de la frame, il faudrait que je trouve le moyen de les supprimer.

    Voici mon 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    %On charge l'image
    Image = myjpgload('~/IVR/assessment/map.jpeg',0);
     
    % On la transcrit en image binaire par seuil
    BW = imageprocess(Image,52);
     
    [W,L] = size(BW);
     
    % Sobel pour detection des contours
    BW = edge(BW,'sobel' );
    BW = imfill(BW,'holes');
     
    % Recuperation des contours
    B = bwboundaries(BW);
    nb_f = size(B,1);
     
    figure(1);
    imshow(BW);
     
    % Ici on applique les contours autour des formes detectees
    % sur la MEME figure ou l'image a ete affichee
    hold on;
    for k=1:nb_f
     
       b = B{k};
       plot(b(:,2),b(:,1),'b','LineWidth',5);
     
    end
    hold off;
     
     
    set(gca,'units','pixels','visible','off');
    Frame = getframe(1);
     
     
    figure(2);
    imshow(Frame.cdata);

  6. #6
    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 : 52 882
    Points
    52 882
    Par défaut
    Voici comment je procèderais pour une image de 640x480:

    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
    %On charge l'image
    img = myjpgload('~/IVR/assessment/map.jpeg',0);
    
    % On la transcrit en image binaire par seuil
    BW = imageprocess(img,52);
    
    [W,L] = size(BW);
    
    % Sobel pour detection des contours
    BW = edge(BW,'sobel' );
    BW = imfill(BW,'holes');
    
    % Recuperation des contours
    B = bwboundaries(BW);
    nb_f = size(B,1);
    
    fig=figure(1);
    set(fig,'units','pixels','position',[50 50 750 500]);
    
    imshow(BW);
    
    % Ici on applique les contours autour des formes detectees
    % sur la MEME figure ou l'image a ete affichee
    hold on;
    for k=1:nb_f
    
       plot(B{k}(:,2),B{k}(:,1),'b','LineWidth',5);
    
    end
    hold off;
    
    
    set(gca,'units','pixels','visible','off','position',[1 1 640 480]);
    Frame = getframe(gca);
    
    
    figure(2);
    imshow(Frame.cdata);
    Il faut éviter d'utiliser des noms de fonction comme nom de variables (img à la place de image)

    Voir la documentation à propos de la propriété Position des objets graphiques
    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)

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup ! Ca marche au poil. Affaire resolue, donc.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Autre solution (plus propre que d utiliser getframe)
    En fait avec getframe tu risques d avoir des problemes (notamment si tu utilises des images de dimension superieures a ta resolution d ecran... c est du vecu lol)

    donc en fait en utilisant boundary tu obtiens une liste des points de ton contour... donc tout simplement tu modifies la valeur correspondant a la couleur de ces point dans ta matrice image. et voila tu obtient ton image + le contour dans la meme image.

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

Discussions similaires

  1. enregistrer les données airodump sur une FTA32
    Par neoboy dans le forum Distributions
    Réponses: 0
    Dernier message: 30/11/2011, 12h02
  2. Réponses: 3
    Dernier message: 14/12/2010, 19h35
  3. Plusieurs plots sur une figure
    Par Newenda dans le forum MATLAB
    Réponses: 11
    Dernier message: 19/01/2010, 12h41
  4. Représenter un point sur une figure
    Par berberat dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/08/2007, 15h32
  5. Enregistrer les actions effectuée sur une fenêtre
    Par netomax dans le forum WinDev
    Réponses: 5
    Dernier message: 25/04/2007, 21h11

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