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 :

Message d'erreur incompris


Sujet :

Images

  1. #1
    Membre habitué Avatar de Lost in
    Inscrit en
    Janvier 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 268
    Points : 126
    Points
    126
    Par défaut Message d'erreur incompris
    Salut,

    J'ai besoin de votre aide


    Voila, j'ai un message d'erreur que je ne comprend pas qui est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ??? Error using ==> mrdivide
    Matrix dimensions must agree.
     
    Error in ==> anisodiffmoi at 49
                cN = (kappa*exp(-nablaN/M))/(max(exp(nablaN1),1+nablaN));
    La fonction utilisée est une fonction de diffusion anisotrope :

    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
     
    function diff_im = anisodiffmoi(im, num_iter, delta_t, kappa)
     
    % Convert input image to double.
    im = double(im);
     
    % PDE (partial differential equation) initial condition.
    diff_im = im;
     
    % Center pixel distances.
    dx = 1;
    dy = 1;
    dd = sqrt(2);
     
    % 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'); 
     
            A=[nablaN nablaS nablaW nablaE nablaNE nablaSE nablaSW nablaNW];
            M= max(A);
     
            nablaN1 = imfilter(nablaN,hN,'conv');
            nablaS1 = imfilter(nablaS,hS,'conv');   
            nablaW1 = imfilter(nablaW,hW,'conv');
            nablaE1 = imfilter(nablaE,hE,'conv');   
            nablaNE1 = imfilter(nablaNE,hNE,'conv');
            nablaSE1 = imfilter(nablaSE,hSE,'conv');   
            nablaSW1 = imfilter(nablaSW,hSW,'conv');
            nablaNW1 = imfilter(nablaNW,hNW,'conv');
     
     
                cN = (kappa*exp(-nablaN/M))/(max(exp(nablaN1),1+nablaN));
                cS = kappa*exp(-nablaS/M)/max(exp(nablaS1),1+nablaS);
                cW = kappa*exp(-nablaW/M)/max(exp(nablaW1),1+nablaW);
                cE = kappa*exp(-nablaE/M)/max(exp(nablaE1),1+nablaE);
                cNE = kappa*exp(-nablaNE/M)/max(exp(nablaNE1),1+nablaNE);
                cSE = kappa*exp(-nablaSE/M)/max(exp(nablaSE1),1+nablaSE);
                cSW = kappa*exp(-nablaSW/M)/max(exp(nablaSW1),1+nablaSW);
                cNW = kappa*exp(-nablaNW/M)/max(exp(nablaNW1),1+nablaNW);
     
     
     
            % 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
    Dans l'attente de vous lire, je vous dis à bientôt
    Si vous acceptez vos possibilités présentes, vous progresserez certainement à l'avenir. en revanche si vous niez vos limites, vous ne vous en libérerez jamais.

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Le message signifie que l'une de tes divisions est fausse car tu dois diviser des éléments qui ont des dimensions qui ne correspondent pas.
    Essaye donc de vérifier toutes tes dimensions avant l'opération et aussi de la séparer en plusieurs petites opérations pour voir où cela coince.

    Je dirais (avec l'habitude mais je peux me tromper) que tu as dû mettre un / là où il faudrait un ./ (division élément par élément)
    Règles du Forum

    Adepte de la maïeutique

  3. #3
    Membre habitué Avatar de Lost in
    Inscrit en
    Janvier 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 268
    Points : 126
    Points
    126
    Par défaut
    Salut,
    Citation Envoyé par caro95470 Voir le message
    Je dirais (avec l'habitude mais je peux me tromper) que tu as dû mettre un / là où il faudrait un ./ (division élément par élément)
    Je l'ai essayé mais ça n'a rien donné

    Je vais vous donner plus d'explication peut être ça vous permettra de
    mieux voir:
    Code calcul du gradient : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    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');


    Code calcul du laplacien : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    nablaN1 = imfilter(nablaN,hN,'conv');
            nablaS1 = imfilter(nablaS,hS,'conv');   
            nablaW1 = imfilter(nablaW,hW,'conv');
            nablaE1 = imfilter(nablaE,hE,'conv');   
            nablaNE1 = imfilter(nablaNE,hNE,'conv');
            nablaSE1 = imfilter(nablaSE,hSE,'conv');   
            nablaSW1 = imfilter(nablaSW,hSW,'conv');
            nablaNW1 = imfilter(nablaNW,hNW,'conv');

    Code équation de diffusion : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    cN = kappa*exp(-nablaN/M)/max(exp(nablaN1),1+nablaN);
                cS = kappa*exp(-nablaS/M)/max(exp(nablaS1),1+nablaS);
                cW = kappa*exp(-nablaW/M)/max(exp(nablaW1),1+nablaW);
                cE = kappa*exp(-nablaE/M)/max(exp(nablaE1),1+nablaE);
                cNE = kappa*exp(-nablaNE/M)/max(exp(nablaNE1),1+nablaNE);
                cSE = kappa*exp(-nablaSE/M)/max(exp(nablaSE1),1+nablaSE);
                cSW = kappa*exp(-nablaSW/M)/max(exp(nablaSW1),1+nablaSW);
                cNW = kappa*exp(-nablaNW/M)/max(exp(nablaNW1),1+nablaNW);

    Merci.
    Si vous acceptez vos possibilités présentes, vous progresserez certainement à l'avenir. en revanche si vous niez vos limites, vous ne vous en libérerez jamais.

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Je t'avoue que je n'ai absolument pas le courage de regarder ça dans le détail
    As-tu essayé de travailler sur la ligne de code qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cN = (kappa*exp(-nablaN/M))/(max(exp(nablaN1),1+nablaN));
    En la séparant pour voir à quel endroit cela buggue exactement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    exp1=-nablaN/M
    exp2=exp(exp1);
    denominateur=kappa*exp2;
    %etc
    Cela permettra déjà de mieux cerner où se trouve l'erreur.
    Ensuite il faut récupérer les dimensions des différents éléments.
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Salut.
    num_iter, delta_t, kappa
    Quels sont tes paramètres d'entrée ?

  6. #6
    Membre habitué Avatar de Lost in
    Inscrit en
    Janvier 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 268
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par phryte Voir le message

    Quels sont tes paramètres d'entrée ?
    num_iter = 5 (au choix)

    delta_t = 1/7 (constante)


    kappa = 2 (au choix)

    A+
    Si vous acceptez vos possibilités présentes, vous progresserez certainement à l'avenir. en revanche si vous niez vos limites, vous ne vous en libérerez jamais.

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Salut.
    cN = (kappa*exp(-nablaN/M))/(max(exp(nablaN1),1+nablaN));
    Que vaut M ?

  8. #8
    Membre habitué Avatar de Lost in
    Inscrit en
    Janvier 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 268
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par phryte Voir le message
    Salut.

    Que vaut M ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    A=[nablaN nablaS nablaW nablaE nablaNE nablaSE nablaSW nablaNW];
            M= max(A);
    Si vous acceptez vos possibilités présentes, vous progresserez certainement à l'avenir. en revanche si vous niez vos limites, vous ne vous en libérerez jamais.

  9. #9
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Tu ne veux toujours pas nous donner les dimensions des différents éléments de ta formule ?
    Tu dois comprendre que même si tu donnes le code en entier, on n'a pas forcément envie (ou la possibilité, perso je n'ai pas la toolbox image) de chercher à savoir quels paramètres mettre en entrée.

    Je pense (et le message le dit) qu'il y a un problème de dimension, donc pour le résoudre il faut vérifier les dimensions de chaque élément de l'expression de calcul.
    Règles du Forum

    Adepte de la maïeutique

  10. #10
    Membre habitué Avatar de Lost in
    Inscrit en
    Janvier 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 268
    Points : 126
    Points
    126
    Par défaut
    Voici les dimensions:

    im(472x476)

    diff_im(472x476)

    nablaS, nablaW, nablaN, nablaE, nablaNE, nablaNE, nablaSE, nablaSW, nablaNW (472x476)

    nablaS1, nablaW1, nablaN1, nablaE1, nablaNE1, nablaNE1, nablaSE1, nablaSW1, nablaNW1 (472x476)

    Merci.
    Si vous acceptez vos possibilités présentes, vous progresserez certainement à l'avenir. en revanche si vous niez vos limites, vous ne vous en libérerez jamais.

  11. #11
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Donc pour obtenir ton message d'erreur je fais tout simplement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A=rand(472,8*476);
    M=max(A);
    nablaN=rand(472,476);
    nablaN/M
    Pourquoi ?
    Car :
    nablaN est de dimension 472*476
    M est de dimension 1*(8*476)
    ça ne peut visiblement pas se diviser...

    Quand tu fais max(A) tu comptes obtenir quoi ?
    Si tu veux le max unique (ie sur toutes les dimensions) il faut faire :
    Règles du Forum

    Adepte de la maïeutique

  12. #12
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Salut.
    En mettant le calcul de M là, je n'est pas d'erreur :
    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
    % 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'); 
     
            A=[nablaN nablaS nablaW nablaE nablaNE nablaSE nablaSW nablaNW];
            M= max(A);

  13. #13
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Points : 2 841
    Points
    2 841
    Par défaut
    Citation Envoyé par phryte Voir le message
    Salut.
    En mettant le calcul de M là, je n'ai pas d'erreur :
    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
    % 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'); 
     
            A=[nablaN nablaS nablaW nablaE nablaNE nablaSE nablaSW nablaNW];
            M= max(A);

  14. #14
    Membre habitué Avatar de Lost in
    Inscrit en
    Janvier 2008
    Messages
    268
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 268
    Points : 126
    Points
    126
    Par défaut
    Salut !!

    Citation Envoyé par caro95470 Voir le message
    nablaN est de dimension 472*476
    M est de dimension 1*(8*476)
    ça ne peut visiblement pas se diviser...
    Tu as entièrement raison merci pour l'explication
    Si vous acceptez vos possibilités présentes, vous progresserez certainement à l'avenir. en revanche si vous niez vos limites, vous ne vous en libérerez jamais.

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

Discussions similaires

  1. message d'erreur incompris
    Par Erlen dans le forum Débuter
    Réponses: 6
    Dernier message: 27/11/2018, 22h43
  2. Message d'erreur incompris
    Par PadawanInPerl dans le forum Langage
    Réponses: 4
    Dernier message: 19/07/2009, 00h05
  3. message d'erreur incompris
    Par BYALI dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/07/2009, 13h44
  4. Message d'erreur incompris
    Par LeNeutrino dans le forum Windows Forms
    Réponses: 12
    Dernier message: 19/09/2008, 16h12
  5. Message d'erreur incompris
    Par kibcha dans le forum C
    Réponses: 11
    Dernier message: 18/07/2007, 16h30

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