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 :

Appel d'une fonction


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Points : 7
    Points
    7
    Par défaut Appel d'une fonction
    Bonjour,

    J'ai un petit problème mais qui m'embette beaucoup
    Dans mon code j'ai une fonction qui permet de calculer certains paramètres et je voudrais appeler ces paramètres dans une autre fonction mais je ne sais pas comment m'y prendre. Si quelqu'un pouvait m'aider ce serait gentil.

    Voici le 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    function diff_im = anisodiff2D(im, num_iter, delta_t, kappa, option)
     
    im  imread ('echo.bmp');
    im = double(im);
     
    % PDE (partial differential equation) initial condition.
    diff_im = im;
     
    dx = 1;
    dy = 1;
    dd = sqrt(2);
    s = phantom(512) + randn(512);
    num_iter = 15;
      delta_t = 1/7;
       kappa = 30;
       option = 2;
       tmp= 
       ad = anisodiff2D(s,num_iter,delta_t,kappa,option);
     
    % 2D convolution masks - finite differences.
    hN = [0 1 0; 0 -1 0; 0 0 0];
    hS = [0 0 0; 0 -1 0; 0 1 0];
    hE = [0 0 0; 0 -1 1; 0 0 0];
    hW = [0 0 0; 1 -1 0; 0 0 0];
    hNE = [0 0 1; 0 -1 0; 0 0 0];
    hSE = [0 0 0; 0 -1 0; 0 0 1];
    hSW = [0 0 0; 0 -1 0; 1 0 0];
    hNW = [1 0 0; 0 -1 0; 0 0 0];
     
    % Anisotropic diffusion.
    for t = 1:num_iter
     
     % Finite differences. [imfilter(.,.,'conv') can be replaced by conv2(.,.,'same')]
            nablaN = imfilter(diff_im,hN,'conv');
            nablaS = imfilter(diff_im,hS,'conv');   
            nablaW = imfilter(diff_im,hW,'conv');
            nablaE = imfilter(diff_im,hE,'conv');   
            nablaNE = imfilter(diff_im,hNE,'conv');
            nablaSE = imfilter(diff_im,hSE,'conv');   
            nablaSW = imfilter(diff_im,hSW,'conv');
            nablaNW = imfilter(diff_im,hNW,'conv'); 
     
            % Diffusion function.
            if option == 1
                cN = exp(-(nablaN/kappa).^2);
                cS = exp(-(nablaS/kappa).^2);
                cW = exp(-(nablaW/kappa).^2);
                cE = exp(-(nablaE/kappa).^2);
                cNE = exp(-(nablaNE/kappa).^2);
                cSE = exp(-(nablaSE/kappa).^2);
                cSW = exp(-(nablaSW/kappa).^2);
                cNW = exp(-(nablaNW/kappa).^2);
            elseif option == 2
                cN = 1./(1 + (nablaN/kappa).^2);
                cS = 1./(1 + (nablaS/kappa).^2);
                cW = 1./(1 + (nablaW/kappa).^2);
                cE = 1./(1 + (nablaE/kappa).^2);
                cNE = 1./(1 + (nablaNE/kappa).^2);
                cSE = 1./(1 + (nablaSE/kappa).^2);
                cSW = 1./(1 + (nablaSW/kappa).^2);
                cNW = 1./(1 + (nablaNW/kappa).^2);
            end
     
            % Discrete PDE solution.
            diff_im = diff_im + ...
                      delta_t*(...
                      (1/(dy^2))*cN.*nablaN + (1/(dy^2))*cS.*nablaS + ...
                      (1/(dx^2))*cW.*nablaW + (1/(dx^2))*cE.*nablaE + ...
                      (1/(dd^2))*cNE.*nablaNE + (1/(dd^2))*cSE.*nablaSE + ...
                      (1/(dd^2))*cSW.*nablaSW + (1/(dd^2))*cNW.*nablaNW );
     
            % Iteration warning.
    %         fprintf('\rIteration %d\n',t);
    end
    figure;
       subplot 121;
       imshow(s,[]);
       subplot 122; 
       imshow(ad,[]);
    et la fonction appelante :

    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
    39
    40
    41
    42
    43
    44
    45
    function diff = anisodiff(im, niter, kappa, lambda, option)
    if ndims(im)==3
      error('Anisodiff only operates on 2D grey-scale images');
    end
     
    im = double(im);
    [rows,cols] = size(im);
    diff = im;
     
    for i = 1:niter
    %  fprintf('\rIteration %d',i);
     
      % Construct diffl which is the same as diff but
      % has an extra padding of zeros around it.
      diffl = zeros(rows+2, cols+2);
      diffl(2:rows+1, 2:cols+1) = diff;
     
      % North, South, East and West differences
      deltaN = diffl(1:rows,2:cols+1)   - diff;
      deltaS = diffl(3:rows+2,2:cols+1) - diff;
      deltaE = diffl(2:rows+1,3:cols+2) - diff;
      deltaW = diffl(2:rows+1,1:cols)   - diff;
     
      % Conduction
     
      if option == 1
        cN = exp(-(deltaN/kappa).^2);
        cS = exp(-(deltaS/kappa).^2);
        cE = exp(-(deltaE/kappa).^2);
        cW = exp(-(deltaW/kappa).^2);
      elseif option == 2
        cN = 1./(1 + (deltaN/kappa).^2);
        cS = 1./(1 + (deltaS/kappa).^2);
        cE = 1./(1 + (deltaE/kappa).^2);
        cW = 1./(1 + (deltaW/kappa).^2);
      end
     
      diff = diff + lambda*(cN.*deltaN + cS.*deltaS + cE.*deltaE + cW.*deltaW);
     
    %  Uncomment the following to see a progression of images
    %  subplot(ceil(sqrt(niterations)),ceil(sqrt(niterations)), i)
    %  imagesc(diff), colormap(gray), axis image
     
    end
    %fprintf('\n');

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    tout d'abord, je doute que la fonction anisodiff2D fonctionne correctement : à la ligne 17, il manque une affection à tmp, et à la ligne 18 tu appelles la fonction anisodiff2D à l'intérieur d'elle-même : cela va provoquer une boucle infinie...

    Et en ce qui concerne ton problème, à l'intérieur de la fonction anisodiff, tu veux avoir accès à certains paramètres calculé dans la fonction anisodiff2D, c'est bien cela? Si oui, pourquoi ne pas les mettre directement dans anisodiff? Quels sont ces paramètres?

Discussions similaires

  1. appel d'une fonction à partir d'un popup
    Par villeneuvejsp dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/12/2004, 17h00
  2. Appel d'une fonction
    Par georgeabitbol dans le forum ASP
    Réponses: 4
    Dernier message: 08/07/2004, 14h29
  3. Réponses: 4
    Dernier message: 02/06/2004, 16h35
  4. Appel d'une fonction
    Par jfphan dans le forum ASP
    Réponses: 4
    Dernier message: 14/04/2004, 15h06
  5. A la recherche de l'appel d'une fonction...
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 24/09/2003, 12h34

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