Fonction Matlab

Résolu
ghadatou -  
 cameleonna -
Bonjour,
j'ai écris un programme sous matlab donc d'extension " .m " qui lit une image puis detecte ses contours par filtre sobel et maintenant je veux faire la segmentation par la méthode des snakes ou contours actifs pour cela j'ai ecris un deuxième programme d'extension .m pour la fonction snakes donc ce programme commence par:
function [x,y] = snakedeform(x,y,alpha,beta,gamma,kappa,fx,fy,ITER)
le problème c'est que dans mon premier programme je veux faire appel à la fonction du 2ieme prog. comment faire? j'ai essayée d'ecrire ca : [a,b] = snakedeform( une valeur pour chaque variable) mais jpense que c'est faux aider moi svp
merci d'avance
Configuration: Windows XP
Firefox 3.0.4

9 réponses

  1. Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 863
     
    T'as fait une erreur de frappe et ta fonction s'appelle pas exactement snakedeform, je vois que ça.
    Ou alors, pendant l'exécution du programme 1, tu changes de répertoire et Matlab arrive pas à trouver snakedeform dans le répertoire courant.
    1
    1. ghadatou
       
      salut,
      je viens de vérifier si vraiment j'ai commis une faute de frappe mais c'est pas le cas;
      pour cela laissez moi vous résumer la situation : j'ai deux programmes devant moi les deux de même extension .m lorsque je fais l'appel à la fonction function écrite dans le deuxième programme j'obtiens le message d'erreur indiqué ci- dessus et c'est ce qui me rend dingue! il me semble que tout est bien or j'ai toujours un pb
      0
  2. Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 863
     
    T'es dans le répertoire principal de Matlab ?
    Si c'est pas le cas ou même si c'est le cas finalement parce que je vois pas d'autre solution, ajoute la ligne addpath('chemin_vers_le_répertoire_de_snakedeform'); dans le fichier de ton programme principal.
    Ça marche ?
    1
    1. ghadatou
       
      dans ce cas j'obtiens :

      Warning: Name is nonexistent or not a directory: chemin_vers_le_répertoire_de_snakedeform.
      > In path at 110
      In addpath at 87
      In Untitled at 14

      je veux bien vous donner mon deuxième programme, juste pour avoir une idée :) et bien sure si vous voulez me le corriger si çà ne vous dérange pas monsieur :)
      alors ma fonction est:

      function [x,y] = snakedeform(x,y,alpha,beta,gamma,kappa,fx,fy,ITER)
      % SNAKEDEFORM Deform snake in the given external force field
      % [x,y] = snakedeform(x,y,alpha,beta,gamma,kappa,fx,fy,ITER)
      %
      % alpha: elasticity parameter
      % beta: rigidity parameter
      % gamma: viscosity parameter
      % kappa: external force weight
      % fx,fy: external force field

      % Chenyang Xu and Jerry L. Prince, 4/1/95, 6/17/97
      % Copyright (c) 1995-97 by Chenyang Xu and Jerry L. Prince
      % Image Analysis and Communications Lab, Johns Hopkins University

      % generates the parameters for snake

      N = length(x);

      alpha = alpha* ones(1,N);
      beta = beta*ones(1,N);

      % produce the five diagnal vectors
      alpham1 = [alpha(2:N) alpha(1)];
      alphap1 = [alpha(N) alpha(1:N-1)];
      betam1 = [beta(2:N) beta(1)];
      betap1 = [beta(N) beta(1:N-1)];

      a = betam1;
      b = -alpha - 2*beta - 2*betam1;
      c = alpha + alphap1 +betam1 + 4*beta + betap1;
      d = -alphap1 - 2*beta - 2*betap1;
      e = betap1;

      % generate the parameters matrix
      A = diag(a(1:N-2),-2) + diag(a(N-1:N),N-2);
      A = A + diag(b(1:N-1),-1) + diag(b(N), N-1);
      A = A + diag(c);
      A = A + diag(d(1:N-1),1) + diag(d(N),-(N-1));
      A = A + diag(e(1:N-2),2) + diag(e(N-1:N),-(N-2));

      invAI = inv(A + gamma * diag(ones(1,N)));

      for count = 1:ITER,
      vfx = interp4(fx,x,y);
      vfy = interp4(fy,x,y);

      % deform snake
      x = invAI * (gamma* x + kappa*vfx);
      y = invAI * (gamma* y + kappa*vfy);
      end



      en faisant la simulation je trouve que j'ai pas mal d'erreurs

      pourriez vous m'aidez svp
      0
  3. Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 863
     
    Désolé, je vais pas avoir le temps de regarder ton programme snakedeform ce soir.

    Sinon, quand je disais de taper addpath('chemin_vers_le_répertoire_de_snakedeform'); au début du fichier Untitled.m, il était bien sûr sous-entendu que tu devais remplacer chemin_vers_le_répertoire_de_snakedeform par le chemin complet vers le répertoire qui contient le fichier snakedeform.m.

    Bonne nuit, pour le programme, je jette un œil demain.

    Cela dit, en regardant en diagonal, je sais pas s'il est très judicieux de donner le même nom à une variable d'entrée et à une variable de sortie :
    function [x,y] = snakedeform(x,y,alpha,beta,gamma,kappa,fx,fy,ITER)
    Mais je pense pas que ce soit un drame.

    Et sinon, j'espère que les personnes s'opposent pas à ce que leur programme soit diffusé parce que je lis ça :
    % Copyright (c) 1995-97 by Chenyang Xu and Jerry L. Prince
    1
    1. ghadatou
       
      ben écoutez je vous remercie énormément , juste pour préciser: la fonction 'snakedeform' c'est mon encadreur qui me la donné tel qu'elle est c'est pas moi qui la écrite parce que je débute avec matlab donc je peux vous dire que je suis novice :) mais je ne vais pas lâcher l'affaire je dois comprendre ce programme jusqu'à arriver à le faire tourner.

      je respecte votre attention monsieur encore merci et bonne nuit
      0
      1. cameleonna > ghadatou
         
        Bonjour,

        je suis une nouvelle sur le site et je travail aussi sur la segmentation par contour actif et je viens de commencer.Dans mon programme y a aussi la fonction kappa et j arrive pas à comprendre le but de son utilisation dans la segmentation d'image.

        Merci.
        0
  4. Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 863
     
    Salut
    C'est pourtant bien comme ça.
    Tes deux programmes sont bien dans le même répertoire ?
    Bonne soirée
    0
    1. ghadatou
       
      salut,
      oui mes deux programmes sont dans le même répertoire sauf que je dois ,dans mon premier programme, faire appel à la fonction écrite dans le deuxième programme; comment faire l'appel d'une fonction?
      merci
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 863
     
    Salut
    Ça se fait exactement comme tu l'as fait, il y a aucune raison pour que ça marche pas.
    T'obtiens quoi comme message d'erreur ?
    Bonne soirée
    0
    1. ghadatou
       
      salut ,
      alors le message d'erreur est le suivant:
      ??? Undefined function or method 'snakedeform' for input arguments of type 'double'.

      Error in ==> Untitled at 15
      [a,b]=snakedeform(2,3,2,1,2,2,5,2,13);


      est ce que vous avez une idée sur ca?

      merci
      0
  7. Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 863
     
    Ça devrait marcher alors.
    Est-ce que le fichier de la fonction snakedeform se nomme snakedeform.m ?
    0
    1. ghadatou
       
      salut,
      bien évidement monsieur :)
      0
  8. Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 863
     
    Ça aurait pu se faire... :-D
    Pfff... je vois vraiment pas où peut être l'erreur, je suis à cours d'idée :-(
    Mais pour te convaincre que c'est bien comme ça qu'on appelle une fonction dans une autre, tu peux juste faire un tout petit truc, tu verras que ça marche.
    Par exemple, tu définis ça :
    function inutile = unuseful(n)
    inutile=1;
    disp('It works');
    Tu l'enregistres en unuseful.m et tu l'appelles dans ton programme principal avant snakedeform avec valeur = unuseful(10); par exemple. Normalement, ça devrait t'afficher It works.
    Si c'est pas le cas, il y a vraiment un souci :-(

    Ton programme principal s'appelle Untitled.m apparemment, il y a d'autres infos qui pourraient m'être utile pour comprendre d'où vient ton souci ?
    0
    1. ghadatou
       
      avec l'exemple tout va bien çà a marcher pas de problème !! sauf que j'ai écris dans la command window :

      >> help snakedeform j'ai eu se message d'erreur

      snakedeform not found.

      est-ce que vous pouvez m'expliquer qu'est ce que çà veut dire çà ? peut être çà pourra nous aider non?
      0
  9. Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 863
     
    Désolé mais là, à part le fait que t'es pas dans le bon répertoire ou le fait que ta fonction s'appelle pas comme ça, je pense qu'il y a pas d'autre choix.
    Change pas de répertoire et tape ls dans la fenêtre de commandes Matlab.
    Il y a snakedeform.m dans la liste ?
    0
    1. ghadatou
       
      oui elle est bien dans la liste :)
      0
  10. Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 863
     
    Salut ghadatou

    Tu peux tutoyer tout le monde ici, t'es pas en milieu universitaire ;-)
    Et même si c'était le cas, je demanderais pas de me vouvoyer.

    Pour ton programme, j'ai donc jeté un œil.
    * C'est pas très important mais alpham1 est pas utilisé dans le programme. Mais du coup c'est peut-être un petite erreur dans la suite du programme, il y a peut-être un endroit où une autre variable est utilisée à sa place. Ça empêchera pas le programme de tourner mais ça donnera des résultats faux si effectivement il y a une erreur.
    * La fonction interp4 existe pas donc si t'as pas écrite cette fonction quelque part, il s'agit d'une erreur.

    Bonne journée
    0