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

Images Discussion :

Besoin de vous pour comprendre un fragment de code


Sujet :

Images

  1. #1
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut Besoin de vous pour comprendre un fragment de code
    Bonjour tout le monde,
    J'ai devant moi le code d'une fonction matlab,sachant que je n'ai jamais utilisé ce soft j'aurai besoin que vous m'aidiez à comprendre le sens de quelques instructions dont la syntaxe m'est totalement inconnu...Si ça ne vous dérange pas bien sur

    Tout d'abord voici le prototype de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function [u,v] = GVF(f, mu, ITER)
    Pour ce qui est des paramètres de cette fonction:
    f : est une image (Edge Map d'une image pour etre plus precis)
    mu : est un réel.
    ITER : un entier ( nombre d'itérations de la boucle principale)

    voici le corp de cette fonction :
    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
     
    1:[m,n] = size(f);
    2:fmin  = min(f(:));
    3:fmax  = max(f(:));
    4:f = (f-fmin)/(fmax-fmin);  % Normalize f to the range [0,1]
     
    5:f = BoundMirrorExpand(f);  % Take care of boundary condition
    6:[fx,fy] = gradient(f);     % Calculate the gradient of the edge map
    7:u = fx; v = fy;            % Initialize GVF to the gradient
    8:SqrMagf = fx.*fx + fy.*fy; % Squared magnitude of the gradient field
     
    % Iteratively solve for the GVF u,v
    9:for i=1:ITER,
    10:  u = BoundMirrorEnsure(u);
    11: v = BoundMirrorEnsure(v);
    12:  u = u + mu*4*del2(u) - SqrMagf.*(u-fx);
    13:  v = v + mu*4*del2(v) - SqrMagf.*(v-fy);
    14:  fprintf(1, '%3d', i);
    15:  if (rem(i,20) == 0)
    16:     fprintf(1, '\n');
    17:  end
    18:end
    19:fprintf(1, '\n');
     
    20:u = BoundMirrorShrink(u);
    21:v = BoundMirrorShrink(v);
    Petite confirmation :
    Les instructions 2 et 3 : min(f( : )) et max(f( : )) renvoient respectivement la plus petite valeur et la plus grande valeur de la matrice f.Est ce bien cela?


    Aprés ces deux instructions je crois avoir compris la suite,jusqu'a arrivé aux instructions 12 et 13 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    12:  u = u + mu*4*del2(u) - SqrMagf.*(u-fx);
    13:  v = v + mu*4*del2(v) - SqrMagf.*(v-fy);
    Alors tout d'abord la fonction del2,Est ce une fonction prédéfini dans Matlab?Si oui,qu'est ce qu'elle calcul à partir de u?


    SqrMagf est l'amplitude du gradient de f,ce qui vient juste après dans les deux expressions,l'opération " .* "! ( SqrMagf.*(u-fx) )Quel est cette opération?
    Puisque SqrMagf et (u-fx) ont les mêmes dimensions (mXn),la multiplication ne peut être définie!mais peut etre que ce n'est pas une simple multiplication ?


    PS: Un petit commentaire sur les instructions 14,15,16 et 19 ne pourra que m' éclaircir davantage.


    Merci d'avance.

  2. #2
    Membre averti

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 352
    Points
    352
    Par défaut
    Citation Envoyé par b_reda31 Voir le message
    Bonjour tout le monde,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    1:[m,n] = size(f);
    2:fmin  = min(f(:));
    Petite confirmation :
    Les instructions 2 et 3 : min(f( : )) et max(f( : )) renvoient respectivement la plus petite valeur et la plus grande valeur de la matrice f.Est ce bien cela?
    oui

    Citation Envoyé par b_reda31 Voir le message
    Aprés ces deux instructions je crois avoir compris la suite,jusqu'a arrivé aux instructions 12 et 13 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    12:  u = u + mu*4*del2(u) - SqrMagf.*(u-fx);
    13:  v = v + mu*4*del2(v) - SqrMagf.*(v-fy);
    Alors tout d'abord la fonction del2,Est ce une fonction prédéfini dans Matlab?Si oui,qu'est ce qu'elle calcul à partir de u?
    del2, c'est bien une fonction de matlab: le lapacien discret. tape 'help del2', et tu auras le détail...
    SqrMagf est l'amplitude du gradient de f,ce qui vient juste après dans les deux expressions,l'opération " .* "! ( SqrMagf.*(u-fx) )Quel est cette opération?

    Puisque SqrMagf et (u-fx) ont les mêmes dimensions (mXn),la multiplication ne peut être définie!mais peut être que ce n'est pas une simple multiplication ?
    .* ce n'est pas le produit matricielle standard, mais c'est le produit d'Hadamard (élément par élément, cad C = A.*B <=> C(i,j) = A(i,j)*B(i,j) ) .

    PS: Un petit commentaire sur les instructions 14,15,16 et 19 ne pourra que m' éclaircir davantage.

    Merci d'avance.
    14: fprintf(1, '%3d', i);
    15: if (rem(i,20) == 0)
    16: fprintf(1, '\n');
    17: end

    14: affiche i, avec un format tel que le i prend 3 caractères (par exemple 1 s'affichera '<ESPACE><ESPACE>1'
    15,16,17: si i est divisible par 20, 'affiche' une fin de ligne

    Salutations,

    Greg

  3. #3
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Merci infiniment Paradize3.Maintenant c'est beaucoup plus clair.
    Je crois même que vous m'avez donné envi de me mettre sous Matlab,ça à l'air super pratique pour le traitement d'image...mais bon faudrait déja l'avoir.



  4. #4
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Je viens d'installer Matlab v 7,afin de pouvoir essayer la fonction Del2.
    En invite de commande voici ce que j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1:im=imread('test.bmp');
    2:imshow(im);//l'image s'afficher bien
    3:x=del2(im);


    En exécutant la troisième commande ( x=del2(im) ),j'obtient le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> rdivide
    Integers can only be combined with integers of the same class, or scalar doubles.
     
    Error in ==> del2 at 54
          g(2:n-1,: ) = ((f(3:n,: )  -f(2:n-1,: ) ) ./ h(2:n-1,ones(p,1)) - ...
    Aurais je oublié quelque chose?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    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 309
    Points : 52 896
    Points
    52 896
    Par défaut
    Essaye ceci :


  6. #6
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Merci à vous.
    ça marche très bien.

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

Discussions similaires

  1. Besoin d'aide pour comprendre ce bout de code
    Par sorry60 dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 21/03/2009, 16h44
  2. besoin d'aide pour comprendre un exo simple de java
    Par chadel dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2007, 23h27
  3. [MySQL] besoin d'aide pour comprendre les injections sql
    Par cassy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/01/2007, 14h21
  4. Re besoin de vous pour migration de mysql vers dsl server
    Par scaleo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/11/2006, 13h45
  5. Besoin d aide pour comprendre un code
    Par litlebasic dans le forum Delphi
    Réponses: 4
    Dernier message: 22/06/2006, 13h00

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