Fonction Matlab

Résolu/Fermé
ghadatou - 23 nov. 2008 à 18:52
 cameleonna - 8 juin 2009 à 11:10
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

9 réponses

Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
24 nov. 2008 à 23:07
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
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
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
25 nov. 2008 à 00:03
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
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
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
25 nov. 2008 à 00:31
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
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
cameleonna > ghadatou
8 juin 2009 à 11:10
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
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
24 nov. 2008 à 18:24
Salut
C'est pourtant bien comme ça.
Tes deux programmes sont bien dans le même répertoire ?
Bonne soirée
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
24 nov. 2008 à 22:53
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
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
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
24 nov. 2008 à 23:23
Ça devrait marcher alors.
Est-ce que le fichier de la fonction snakedeform se nomme snakedeform.m ?
0
salut,
bien évidement monsieur :)
0
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
24 nov. 2008 à 23:34
Ç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
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
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
24 nov. 2008 à 23:51
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
oui elle est bien dans la liste :)
0
Sacabouffe Messages postés 9427 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 29 mai 2009 1 835
26 nov. 2008 à 10:47
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