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

Scilab Discussion :

Nombre d'argument incorrect en entrée de fonction


Sujet :

Scilab

  1. #1
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut Nombre d'argument incorrect en entrée de fonction
    bonjour
    je veux modifier le contraste d'une image
    j'ai ecrit ce 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
     
    function [y] = contraste (x);
    Tab=histe(x);// ? permet d’obtenir le tableau des fréquences des pixels
    T= find (Tab==0) ;//?cré le tableau contenant les pixels pour lesquels la fréquence=0
    for i = 1 : (length (T) -1)
    if T(i+1)-T(i) <>1 then  //? boucle qui permet de trouver le minimum
    Lmin = T(i);
    break;
    end;
    end;
    for j = length (T) : -1 : 2
    if T(j)– T(j-1) <>1 then //? boucle qui permet de trouver le maximum
    Lmax = T(j);
    break;
    end;
    end;
    y= min (max ( (256/ (Lmax – Lmin))* x – (256/ (Lmax– Lmin))*Lmin , 0) , 255);
    imshow (y) ; //?affiche l’image initiale mais avec un contraste amélioré
    endfunction;
    d'abord j'execute la fonction histe qui affiche l'histogramme.mais quand j'execute la fonction contraste il m'affiche des erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >L=contraste(x)
     !--error 39
    incorrect number of arguments
    at line      12 of function contraste called by :
    L=contraste(x)
    est ce quelqu'un peut m'aider??

  2. #2
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Réponse à prendre avec des pincettes vu que j'ai pas scilab sous la main pour tester et que j'en ai pas fait depuis un ptit moment

    Tu as écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    function [y] = contraste (x);
    ...
    T'es sur qu'il faut un point virgule ici ?
    Si c'est pas çà je suppose qu'avant d'appeler CONSTRASTE avec "x" tu as vérifié que la variable existait

    Sinon je ne vois pas :o

  3. #3
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut
    salut
    oui il existe un ;
    les autres fonctions marchent avec ; en plus x est bien sur définit:
    x=imread('image1.bmp')

  4. #4
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Citation Envoyé par meera Voir le message
    d'abord j'execute la fonction histe qui affiche l'histogramme.mais quand j'execute la fonction contraste il m'affiche des erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >L=contraste(x)
     !--error 39
    incorrect number of arguments
    at line      12 of function contraste called by :
    L=contraste(x)
    est ce quelqu'un peut m'aider??
    Heu en relisant ton message d'erreur, celà ne viendrait pas de x mais de la ligne 12 de la fonction contraste ??

    Ya quoi sur cette fameuse ligne 12 ? Tu peux faire une exécution pas à pas sous scilab ?

    PS : (en matlab "T(ind+1)-(Tind)" se code diff(T) donc en matlab tu peut simplifier ton code en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    IND = find(diff(T)~=1) ;
    Lmin = min(IND);
    Lmax = max(IND);
    Je te laisse traduire çà en scilab

  5. #5
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut
    moi je travaille sur scilab
    la ligne 12 porte :

    y= min (max ( (256/ (Lmax – Lmin))* x – (256/ (Lmax– Lmin))*Lmin , 0) , 255);

    je sais pas d'ou vient l'erreur??

  6. #6
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Oui j'ai bien compris que tu travaillais sous scilab

    Peux-tu faire tu pas à pas sous scilab ???

    Es-tu sur de la syntaxe des fonctions MIN/MAX ?

    Sur http://www.scilab.org/product/man/in...y&page=max.htm

    Il marque que MAX (et donc je suppose MIN) ne prends qu'un argument (un vecteur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    y= min ([max ([ (256/ (Lmax – Lmin))* x – (256/ (Lmax– Lmin))*Lmin , 0]) , 255])

  7. #7
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut
    pour la structure de max ou de min j'ai utilisé comme celle là:

    Y=max([a,b,c])

    j'ai fait l'execution pas à pas, je pense l'erreur vient de Lmax càd le boucle for qui définit Lmax:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    --> y= min ([max ([ (256/ (Lmax – Lmin))* x – (256/ (Lmax– Lmin))*Lmin , 0]) , 255]); imshow (y) ;
                              !--error 4
    undefined variable : Lmax

  8. #8
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Va jusqu'à cette instruction et évalue Lmax. Que vaut-il ?

    Petite remarque :
    1°) il se peut que Lmin et Lmax ne soit pas définie dans ton programme. Je m'explique si des T(ind)-T(ind) == 1 pour tout ind alors Lmin et Lmax ne seront jamais initialisé et donc jamais créer. Mais il y aurait un autre message d'erreur je pense
    2°) Si Lmin et Lmax sont définient, il se peut également que Lmin == Lmax et donc la différence fasse 0 et donc la division par 0 ... Mais encore une fois il y aurait un autre message d'erreur :o


    Teste une à une les sous instruction de la ligne fautive jusqu'à trouvé ce qui ne va pas (si l'évaluation de Lmax ne t'avance pas bien sur)

  9. #9
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut
    oui effectivement le problème aussi au Lmin
    comme test, j 'ai remplacé Lmin et Lmax par des valeurs et cette fois ci :
    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
     
    Lmin=50
     Lmin  =
     
        50.
     
    -->Lmax=240
     Lmax  =
     
        240.
     
    -->MM=contraste(x)
     !--error 39
    incorrect number of arguments
    at line      18 of function contraste called by :
    MM=contraste(x)
    càd la ligne de lafonction min max!!!

  10. #10
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Mais un breakpoint sur la ligne avec les min/max et ensuite tu testes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (256/ (Lmax – Lmin))* x – (256/ (Lmax– Lmin))*Lmin
    je ne pense pas qu'en ayant mis des valeur à Lmin et Lmax cette ligne plante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (max ( (256/ (Lmax – Lmin))* x – (256/ (Lmax– Lmin))*Lmin , 0)
    Cette ligne peut planter car l'aide dit
    m=max(A1,A2,...,An) , où tous les Aj sont des matrices de même taille
    or A2 = 0 est une matrice 1*1 contrairement à A1 qui de même taille que x (pas un scalaire en tout cas).

    Comme je te l'ai dit je n'ai pas scilab pour tester mais si malgré avoir imposer une valeur pour Lmin et Lmax l'instruction plante çà vient de ce que j'ai mis plus haut (à mon avis)

  11. #11
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut
    je sais où cet erreur
    parfois scilab m'affiche un erreur au niveau de devision:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    >Lmin=50
     Lmin  =
     
        50.
     
    -->Lmax=240
     Lmax  =
     
        240.
     
    -->256/ (Lmax – Lmin)
                   !--error 39
    incorrect number of arguments
    et lorsque je remplace lmin et Lmax par leur valeurs au scilab ca marche bien
    :


    -->256/(240-50)
    ans =

    1.3473684

  12. #12
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Citation Envoyé par meera Voir le message
    je sais où cet erreur
    parfois scilab m'affiche un erreur au niveau de devision:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >Lmin=50
     Lmin  =
    
        50.
    
    -->Lmax=240
     Lmax  =
    
        240.
    
    -->256/ (LmaxLmin)
                   !--error 39
    incorrect number of arguments
    et lorsque je remplace lmin et Lmax par leur valeurs au scilab ca marche bien
    :


    -->256/(240-50)
    ans =

    1.3473684

    Bon j'ai essayé sur scilab et c'est ton "-" qui pose problème : supprime le et remets en un

    Les deux moins de "(Lmax – Lmin)" (tu as du faire un copier coller et je pense que le le signe "–" est différent du signe "-" (si si je t'assure que c'est aussi ridicule que çà approches toi de l'écran et admire la différence de tailles des 2 moins que je viens de mettre)


    Pour t'en convaincre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    -->1-2
     ans  =
     
      - 1.
     
    -->12
        !--error 39
    incorrect number of arguments

  13. #13
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut
    aaaaaaaah le signe -
    donc je vais essaiyer de reécrire le programme et vior cette fois ci quel est l'erreur qui sera affiché
    merci

  14. #14
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut
    bon j'a i reécrit le code comme celle là:
    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
     
    function [y] = contraste (x);
    Tab=histe(x);// ? permet d’obtenir le tableau des fréquences des pixels
    T= find (Tab==0) ;//?cré le tableau contenant les pixels pour lesquels la fréquence=0
    for i = 1 : (length (T) -1)
    if T(i+1)-T(i) <>1 then  //? boucle qui permet de trouver le minimum
    Lmin = T(i);
    break;
    end;
    end;
    for j = length (T) : -1 : 2
    if T(j)- T(j-1) <>1 then //? boucle qui permet de trouver le maximum
    Lmax = T(j);
    break;
    end;
    end;
    y= min (max ( (256/ (Lmax - Lmin))* x - (256/ (Lmax - Lmin))*Lmin , 0) , 255);
    imshow (y) ; //?affiche l’image initiale mais avec un contraste amélioré
    endfunction;
    l'execution marche bien mais ce que j'ai obtenu un echelle c pas une image limineuse ...
    j'ai essaiyé de jouer avec les parenthèse à l'expression de y
    mais quend j mets [ au lieu de ( comme indiqué au help voilà ce qui est affiché:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    y=min([max ([(256/(Lmax- Lmin))* x – (256/(Lmax- Lmin))*Lmin] , 0 )],250)
                                                                        !--error 41
    incompatible LHS
    at line      21 of function contraste called by :
    endfunction;
    line    22 of exec file called by :
    exec('contraste.sce')

  15. #15
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Tu écris tes fonctions avec l'éditeur de scilab ? Non parce que sinon çà peut expliquer le pourquoi de la chose :o

  16. #16
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Citation Envoyé par meera Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    y=min([max ([(256/(Lmax- Lmin))* x – (256/(Lmax- Lmin))*Lmin] , 0 )],250)
                                                                        !--error 41
    incompatible LHS
    at line      21 of function contraste called by :
    endfunction;
    line    22 of exec file called by :
    exec('contraste.sce')


    Bon j'ai essayé çà marche sans les crochet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    y=min(max((256/(Lmax-Lmin))*x-(256/(Lmax-Lmin))*Lmin,0),250)

  17. #17
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut
    oui bien sur j'ecris le code dans l'editeur et je l'excute sou scilab par exec('nomfichier.exec')
    ce que j'ai pas compris l'echelle vide qui a affiché,au lieu d'une image.
    le ccode de la fomction histe que je l'eppelle au debut est juste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function [tab] = histe(x);
    nb = prod (size (x));
    data = matrix (x, 1, nb); //? transforme notre tableau pris en argument en matrice
    Tab = zeros (1, 256); //? cré un tableau de zéros à un ligne et 256 colonnes
    for i = 0:255
    tab(i+1) = length (find (data==i));
    end ; //avec les différentes fréquences de pixel
    histplot (256, sort (matrix (x, 1, nb))); //? construit l’histogramme des fréquences des pixels
    endfunction ;
    mais le dernier imshow (y)de la fonction contraste doit afficher une image!!!!!!!

  18. #18
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut
    désolée aussi j'a une question malgré qui est hors sujet
    je veux faire une rotation de l'image que j'ai, j'aai trouvé dans le help que la fonction mogrify permet de fare ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    x=imread(image1.bmp');
     im2=mogrify(x,['-rotate','20']);
     imshow(im2);
    mais l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     im2=mogrify(x,['-rotate','20']);
    Warning !!!
    Scilab has found a critical error (EXCEPTION_ACCESS_VIOLATION)
    with "libsip" function.
    Scilab may become unstable.
     
     warning: stack problem..., cleared
    j'ai changé les ( par ls crochets , mais rien ne marche l'erreur cete fois ci du à la imcompatibilité.

    de meme je veux convertir une image couleur à une image au niveau de gris
    donc j'utilise la fonction rgb2gray:

    >rgb2gray(x);
    !--error 4
    undefined variable : rgb2gray

    et la fonction im2gray marche mais pour les images qui sont au niveau de gris, une image couleur m'affiche cet erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    x=imread(image6.jpg');
    Size:   447 rows X 596 columns
    Truecolor Image 
    >im2gray(x);
     !--error 17
    : stack size exceeded (Use stacksize function to increase it)
    at line      23 of function hypermat called by :
    line    38 of function %hm_matrix called by :
    line    41 of function ntsc2rgb called by :
    line    36 of function im2gray called by :
    im2gray(x
    je sais koi faire est le pb du à moi ou à scilab????????

  19. #19
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut

    Heu je suis pas du tout expert scilab
    Je ne connais pas les fonctions, donc je vais sécher la dessus :o

  20. #20
    Membre éclairé Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Par défaut
    merci pour ton aide et desolée je sais que je te dérange par mes questions

Discussions similaires

  1. Appel construteur : nombre d'argument incorrect
    Par bakman dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 21/07/2010, 11h30
  2. Réponses: 3
    Dernier message: 24/12/2008, 12h57
  3. nombre d'argument non specifie dans une fonction
    Par elmcherqui dans le forum C++
    Réponses: 2
    Dernier message: 27/05/2008, 18h10
  4. Réponses: 1
    Dernier message: 10/05/2008, 23h36
  5. Réponses: 2
    Dernier message: 16/10/2007, 10h53

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