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 :

Problème ginput dans une fonction matlab


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut Problème ginput dans une fonction matlab
    Bonjour,

    J'utilise ginput dans une fonction matlab afin de placer des points qu'il me manque. Je fais appelle dans mon fichier principal par une boucle plusieurs fois à cette fonction contenant ginput. Le problème est qu' à la première itération j'arrive à placer mes points sur la figure avec ginput, mais à la deuxième itération lorsque je dois placer mes points sur la nouvelle image, ça plante et le programme s'arrête sans que je puisse placer aucun points...
    Est-il possible donc de faire appelle à une fonction contenant ginput sans que cela bug ?? et cela marche-t-il sans problème de manière itérative ?

    Merci de vos réponses

  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 318
    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 318
    Points : 52 953
    Points
    52 953
    Par défaut
    Peux-tu nous montrer le bout de code qui ne fonctionne pas ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    C'est assez complexe à comprendre puisque j'utilise un fichier .m principal qui fait appel à plusieurs fonctions matlab que j'ai implémenté. Ci-dessous un petit aperçu du fichier .m :
    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
    clear all;
    close all;
     
    for cp = 1:62
     
            name1='Corrigées_manuel\TRS.';
            name3='.dcm';
            name=strcat(name1,int2str(cp),name3);
     
        if exist(name)~=0
     
            % Calcul erreurs résiduelles sur images corrigées manuelles : détection manuelle et fit 
     
            [Cgc,Ima1] = detection_TRS(name);
            but=1;
            n=0;
            xyc=[];
            figure (1)                      
            imshow(Ima1,[],'notruesize');hold on;
            plot(Cgc(:,1),Cgc(:,2),'.');
                while but == 1
                    [xi,yi,but] = ginput(1);
                    if but==1
                        plot(xi,yi,'.r')
                        n = n+1;
                        xyc(n,: ) = [xi yi];
                    end
                end
            hold off
            Cgc=[Cgc;xyc];
     
        end 
     
    end
    J'ai un répertoire d'images que je parcours afin de vérifier si le nom que je donne est présent dans ce répertoire. S'il est présent, je lance la fonction detection_TRS qui prend en entrée le nom du fichier image et me renvoie en sortie l'image concernée Ima1 et les centres de gravités des billes situées sur les images par opérations morphologiques (la detection des centres de gravités de certaines structures m'intéressent ici). Cependant, la détection n'étant pas efficace à 100 %, je souhaite rajouter manuellement sur l'image concernée les centres de gravités qui sont passés au travers de la méthode automatique. C'est pourquoi, j'utilise la fonction ginput, que j'avais initialement mise dans la fonction detection_TRS, et que j'ai placé maintenant dans le fichier principal pour voir si l'erreur ne venait pas de là...
    Mais toujours le même problème, ginput peut fonctionner sur la première image, mais arrivée à la seconde itération (ou même des fois la première) impossible de rentrer à la souris de nouveau points et le programme se termine...
    J'ai regardé dans le workspace la variable but que j'utilise ici pour déterminer sur quel bouton je dois cliquer pour entrer les nouveaux points, et elle est à 2 alors que je la fixe initialement à 1 pour entrer les nouveaux points par clic gauche...Normal donc qu'il soit impossible de rentrer de nouveaux points, mais mystère car je fais bien clic gaucher pour renter de nouveaux points et pourtant but=2 dans le workspace...

    Merci de votre aide

  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 318
    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 318
    Points : 52 953
    Points
    52 953
    Par défaut
    Essaie avec une petite pause :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while but == 1
       [xi,yi,but] = ginput(1);
       if but==1
          plot(xi,yi,'.r')
          n = n+1;
          xyc(n,: ) = [xi yi];
       end
       pause(.05)
    end

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    Non rien à faire, cela fonctionne une fois sur la première image, ça bloque sur la deuxième après...donc stop. je recommence et là ca bug dès la première image et but reste bloqué à la valeur 2...je ne comprend pas alors que je lui donne but=1 pourtant et je clique avec le bouton gauche de la souris...

  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 318
    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 318
    Points : 52 953
    Points
    52 953
    Par défaut
    Et ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    p=plot(nan,nan,'.r');
    while but == 1
       [xi,yi,but] = ginput(1);
       if but==1
          n = n+1;
          xyc(n,: ) = [xi yi];
          set(p,'xdata',xyc(:,1),'ydata',xyc(:,2))
          drawnow
       end
       %pause(.05)
    end

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    Non, dès la première image impossible de rajouter des points et la variable but = 2 ...Je comprends vraiment pas...

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 953
    Points
    52 953
    Par défaut
    Quelle est ta version de Matlab ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    7.0.0.19920 (r14)

  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 318
    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 318
    Points : 52 953
    Points
    52 953
    Par défaut
    Je n'avais pas compris ta question... je croyais que l'erreur venait de la boucle WHILE-END...

    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <...>
     
    figure(1)
    clf
    imshow(Ima1,[],'notruesize');hold on;
     
    <...>

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    Impeccable !! Pour l'instant en tout cas cela marche. D'où venait le problème alors ? J'ai bien essayé de mettre close all à chaque fin d'itération mais cela ne fonctionnait pas contrairement à ton clf...

    Une autre petite question : dans ma boucle je fais appelle toujours aux même fonctions et donc les variables en entrée et sortie sont les mêmes (Cgc,xyc, name, cp ....). Est-ce que je dois faire un clear de toutes ces variables à chaque fin d'itération avant l'itération suivante afin que mes variables qui portent le même nom à la nouvelle itération soient vierges, et ne contiennent pas d'information de l'itération précédente ?

    Merci !

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 318
    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 318
    Points : 52 953
    Points
    52 953
    Par défaut
    Citation Envoyé par matt67
    D'où venait le problème alors ?
    Je sais pas... une intuition
    Citation Envoyé par matt67
    Est-ce que je dois faire un clear de toutes ces variables à chaque fin d'itération
    Sans dire que c'est nécessaire, c'est toujours plus propre.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    Ok, merci. L'intuition sert même dans des domaines où la logique devrait dominer : vive l'intuition et à bas les heures passées sur un micro-bug !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/07/2011, 20h42
  2. Problème algorithmique dans une fonction
    Par Nics33 dans le forum Général Java
    Réponses: 0
    Dernier message: 02/05/2011, 12h15
  3. Problème Requete dans une fonction ?
    Par Mr-Chikhi dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 13
    Dernier message: 29/04/2009, 17h48
  4. [Java] cast de classe Java dans une fonction Matlab
    Par steph_ch dans le forum MATLAB
    Réponses: 1
    Dernier message: 14/04/2008, 16h55
  5. Réponses: 9
    Dernier message: 13/05/2005, 04h13

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