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 :

problème avec ce code source..


Sujet :

Images

  1. #1
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut problème avec ce code source..
    Bsr à tous
    j'ai trouver un code source en matlab qui fait le filtre de deriche, le voici:
    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
     
    function result = deriche(img, alpha, method)
     
    if nargin < 2
       alpha = 1.0 
     end
     
     if nargin < 3
       method = 0
     end
     
        a   =  -(1-exp(-alpha))^2;
        b1 =  -2*exp(-alpha);
       b2 = exp(-2*alpha);
       a0 = -alpha / (1 - alpha * b1 - b2);
       a1 = a0 * (alpha-1)*exp(-alpha);
     a2 = a1 - a0 * b1;
        a3 = -a0 * b2;
     
      [m,n] = size(img);
     
       g_v1 = zeros(n,m);
       g_v2 = zeros(n,m);
       g_h1 = zeros(n,m);
       g_h2 = zeros(n,m);
      g_hv = zeros(n,m);
       result = zeros(n,m,2);
     
     for k=3:m
        g_v1(:,k) = img(:, k-1) - b1 * g_v1(:,k-1)- b2 * g_v1(:,k-2);
     end;
     
       for k=m-2:-1:1
         g_v2(:,k) = img(:, k+1) - b1 * g_v2(:,k+1)- b2 * g_v2(:,k+2);
       end;
     
      g_hv = a * (g_v1 - g_v2);
     
        for k=3:n
          g_h1(k,:) = a0 * g_hv(k,:) + a1 * g_hv(k-1,:) - b1 *  g_h1(k-1,:) - b2 * g_h1(k-2,:);
      end;
      for k=n-2:-1:1
          g_h1(k,:) = a2 * g_hv(k+1,:) + a3 * g_hv(k+2,:) - b1 *  g_h2(k+1,:) - b2 * g_h2(k+2,:);
       end;
     
     result(:,:,1) = g_h1 + g_h2;
     
      for k=3:n
        g_v1(k,:) = img(k-1,:) - b1 * g_v1(k-1,:)- b2 * g_v1(k-2,:);
       end;
     
       for k=n-2:-1:1
         g_v2(k,:) = img(k+1,:) - b1 * g_v2(k+1,:)- b2 * g_v2(k+2,:);
       end;
     
       g_hv = a * (g_v1 - g_v2);
     
        for k=3:m
         g_h1(:,k) = a0 * g_hv(:,k) + a1 * g_hv(:,k-1) - b1 *  g_h1(:,k-1) - b2 * g_h1(:,k-2);
       end;
      for k=m-2:-1:1
         g_h1(:,k) = a2 * g_hv(:,k+1) + a3 * g_hv(:,k+2) - b1 *  g_h2(:,k+1) - b2 * g_h2(:,k+2);
       end;
     
     result(:,:,2) = g_h1 + g_h2;
     
     if (method == 0)
      result = sqrt(result(:,:,1).*result(:,:,1)+result(:,:,2).*result(:,:,2));
     end
    mais j'arrive pas à l'executer.
    pouvez vous savoir d'ou proviens le problème ( c'est urgent);
    Merci

  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 828
    Points
    14 828
    Par défaut
    Citation Envoyé par Imène_23 Voir le message
    mais j'arrive pas à l'executer.
    C'est-à-dire ?
    Sans plus de précisions difficile de t'aider

  3. #3
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut réponce
    je sais pas si t'a essayer de l'executer mais quand je fait appel à la fonction et j'ai une erreur (instruction 19);
    [m,n] = size(img);
    et je suis une debutante en matlab et j'ignore comment resoudre ca;

  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 828
    Points
    14 828
    Par défaut
    Non je n'ai pas essayé puisque je ne sais pas ce qu'il faut mettre en paramètres d'entrée.
    Ce n'est pas le problème.
    Et ce n'est pas non plus le problème d'être débutant.
    Le problème c'est que je ne suis pas voyante

    Si tu veux des réponses rapides et précises il faut que toi tu donnes le maximum d'informations et là encore une fois tu est imprécise.
    OK il y a une erreur, bon, et pourquoi ne la montres-tu pas ?
    Cela vient peut-être de la variable img que tu as rentrée, non ?

    Donc si tu veux une aide il faut :
    - donner des informations sur les paramètres d'entrée que tu as choisis
    - donner le message d'erreur de MATLAB
    - toute autre information qui pourrait nous aider à t'aider

  5. #5
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut
    Ok
    Donc le filtre de deriche c'est un filtre qui donne les contours d'une image (c'est une amélioration de canny);
    voici la source du prgramme:
    http://octave-image.sourcearchive.co...8m-source.html
    les parametres:
    - img : c'est l'image;
    - alpha: c'est le parametre du filtre (1 par exemple);
    - method c'est la magnitude du gradient ( o ou 1);

    j'ait fait appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    img = double(imread('11.jpg')); deriche(img, 1, 0)
    et j'ai eu l'erreur :
    Error using ==> minus
    Matrix dimensions must agree.

    Error in ==> deriche at 29
    g_v1(:,k) = img(:, k-1) - b1 * g_v1(:,k-1)- b2 * g_v1(:,k-2);

  6. #6
    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 828
    Points
    14 828
    Par défaut
    Je suppose que ta variable img doit être 3-D (taille N*M*P) alors qu'il faudrait qu'elle soit 2-D (N*M).

    Comme souvent ce code ne peut fonctionner qu'avec des images 2-D.

  7. #7
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut
    sur la source du code on me dit que l'image doit etre une matrice de double;
    et j'ai changer l'image en 2-D:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = double(imread('1036.jpg')); img = rgb2gray(a); result = deriche(img, 1, 1);
    et ca donne toujours ca:
    Error using ==> minus
    Matrix dimensions must agree.

    Error in ==> deriche at 29
    g_v1(:,k) = img(:, k-1) - b1 * g_v1(:,k-1)- b2 * g_v1(:,k-2);

  8. #8
    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 828
    Points
    14 828
    Par défaut
    Ah oui le code semble faux...
    En fait ta matrice img a une taille de N*M et le code crée une matrice g_v1 de taille M*N

    Donc img(:,k-1) est de taille N*1 et g_v1 de taille m*1

    On en peut donc les soustraire.

    Il s'agit d'une erreur de recopie de ta part (car le code est juste dans le lien que tu as donné).
    Ligne 19 il faut intervertir le n et le m :

  9. #9
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut
    j'ai toujours le meme problème...

  10. #10
    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 828
    Points
    14 828
    Par défaut
    Ce code fonctionne chez moi avec la correction apportée en rentrant une matrice de taille N*M pour la variable img.
    Donc je ne peux toujours pas deviner ton souci.

    Peux-tu nous montrer ton code corrigé, et le message d'erreur que tu obtiens.

  11. #11
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut
    avant tout 1000 merci caro-line tu me sauve la vie en m'aidant.
    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
     
    function result = deriche(img, alpha, method)
     
    if nargin < 2
       alpha = 1.0 
     end
     
     if nargin < 3
       method = 0
     end
     
        a   =  -(1-exp(-alpha))^2;
        b1 =  -2*exp(-alpha);
       b2 = exp(-2*alpha);
       a0 = -alpha / (1 - alpha * b1 - b2);
       a1 = a0 * (alpha-1)*exp(-alpha);
     a2 = a1 - a0 * b1;
        a3 = -a0 * b2;
     
      [n,m] = size(img);
     
       g_v1 = zeros(n,m);
       g_v2 = zeros(n,m);
       g_h1 = zeros(n,m);
       g_h2 = zeros(n,m);
      g_hv = zeros(n,m);
       result = zeros(n,m,2);
     
     for k=3:m
        g_v1(:,k) = img(:, k-1) - b1 * g_v1(:,k-1)- b2 * g_v1(:,k-2);
     end;
     
       for k=m-2:-1:1
         g_v2(:,k) = img(:, k+1) - b1 * g_v2(:,k+1)- b2 * g_v2(:,k+2);
       end;
     
      g_hv = a * (g_v1 - g_v2);
     
        for k=3:n
          g_h1(k,:) = a0 * g_hv(k,:) + a1 * g_hv(k-1,:) - b1 *  g_h1(k-1,:) - b2 * g_h1(k-2,:);
      end;
      for k=n-2:-1:1
          g_h1(k,:) = a2 * g_hv(k+1,:) + a3 * g_hv(k+2,:) - b1 *  g_h2(k+1,:) - b2 * g_h2(k+2,:);
       end;
     
     result(:,:,1) = g_h1 + g_h2;
     
      for k=3:n
        g_v1(k,:) = img(k-1,:) - b1 * g_v1(k-1,:)- b2 * g_v1(k-2,:);
       end;
     
       for k=n-2:-1:1
         g_v2(k,:) = img(k+1,:) - b1 * g_v2(k+1,:)- b2 * g_v2(k+2,:);
       end;
     
       g_hv = a * (g_v1 - g_v2);
     
        for k=3:m
         g_h1(:,k) = a0 * g_hv(:,k) + a1 * g_hv(:,k-1) - b1 *  g_h1(:,k-1) - b2 * g_h1(:,k-2);
       end;
      for k=m-2:-1:1
         g_h1(:,k) = a2 * g_hv(:,k+1) + a3 * g_hv(:,k+2) - b1 *  g_h2(:,k+1) - b2 * g_h2(:,k+2);
       end;
     
     result(:,:,2) = g_h1 + g_h2;
     
     if (method == 0)
      result = sqrt(result(:,:,1).*result(:,:,1)+result(:,:,2).*result(:,:,2));
     end
    j'appel la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a= double(imread('1036.jpg')); img = rgb2gray(a); result = deriche(img, 1, 1);
    l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ??? Error using ==> minus
    Matrix dimensions must agree.
     
    Error in ==> deriche at 29
        g_v1(:,k) = img(:, k-1) - b1 * g_v1(:,k-1)- b2 * g_v1(:,k-2);
    l'image est jointe au message, je travail avec matlab R2007a sous vista
    Images attachées Images attachées  

  12. #12
    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 828
    Points
    14 828
    Par défaut
    N'ayant pas la Toolbox Image Processing, je n'ai pas la fonction RGB2GRAY mais es-tu sure qu'elle transforme l'image 3-D en image 2-D ?
    Normalement je dirais que oui.

    Il faudrait que tu regardes les tailles des différents éléments en jeu.
    Donc avant la ligne de code qui plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    size(img)
    size(g_v1)
    size(b1)
    size(b2)

  13. #13
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut
    voila:
    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
     
    m= size(img); m
     
    m =
     
        85   128     3
     
    >> r=size(g_v1); r
     
    r =
     
        85   384
     
    >> v= size(b1);v
     
    v =
     
         1     1
     
    >> f=size(b2);f
     
    f =
     
         1     1
    mais j'ai du enlevé le :rgb2gray car j'ai eu une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ??? Error using ==> rgb2gray>parse_inputs at 82
    MAP must be a m x 3 array.
     
    Error in ==> rgb2gray at 35
    X = parse_inputs(varargin{:});
    j'ai fait ca :
    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
     
    X = double(imread('1036.jpg')); alpha = 1;
     
    a   =  -(1-exp(-alpha))^2;
        b1 =  -2*exp(-alpha);
       b2 = exp(-2*alpha);
       a0 = -alpha / (1 - alpha * b1 - b2);
       a1 = a0 * (alpha-1)*exp(-alpha);
     a2 = a1 - a0 * b1;
        a3 = -a0 * b2; 
     
     
      [n,m] = size(img);
     
       g_v1 = zeros(n,m);
       g_v2 = zeros(n,m);
       g_h1 = zeros(n,m);
       g_h2 = zeros(n,m);
      g_hv = zeros(n,m);
       result = zeros(n,m,2);

  14. #14
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut
    mais je me demande comment ca marche chez toi, et sans rgb2gray..??!!
    tu fait comment alors?

  15. #15
    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 895
    Points
    52 895
    Par défaut
    Citation Envoyé par Caro-Line Voir le message
    N'ayant pas la Toolbox Image Processing, je n'ai pas la fonction RGB2GRAY mais es-tu sure qu'elle transforme l'image 3-D en image 2-D ?
    Et la alors ...
    => Comment convertir une image RGB en niveaux de gris ?

  16. #16
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut
    merci, Dut, mais moi j'ai la toolbox image processing ; mais chez elle le programme fonctionne parfaitement alors que pour moi non; et j'arrive pas à trouver la source du problème

  17. #17
    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 828
    Points
    14 828
    Par défaut
    Merci Dut, j'avais vu

    Donc chez moi, en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a= double(imread('1036.jpg'));
    img=0.2989 * a(:,:,1) + 0.5870 * a(:,:,2) + 0.1140 * a(:,:,3);%pareil que rgb2gray
    result = deriche(img)
    ne me retourne aucune erreur.

    Sinon pour faire le test au départ je prenais tout simplement une matrice quelconque de taille N*M pour img.

  18. #18
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut
    caro-line ca marche enfinnnn...!! merci
    mais dit moi c'est quoi toutes ces matrices de chiffres ?
    j'ai besoin d'une image en resultat avec les contours ?

  19. #19
    Membre régulier Avatar de Imène_23
    Femme Profil pro
    Inscrit en
    Avril 2009
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38

    Informations forums :
    Inscription : Avril 2009
    Messages : 275
    Points : 102
    Points
    102
    Par défaut
    caro ca marche plus; j'ai refait l'exection, et j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    alpha =
     
         1
     
     
    method =
     
         0
    qui defile (s'affiche plusieur fois) puis j'ai un message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
    to change the limit.  Be aware that exceeding your available stack space can
    crash MATLAB and/or your computer.
     
    Error in ==> imformats>find_in_registry at 114
            varargout{1} = find_in_registry(fmts, varargin{1});

  20. #20
    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 828
    Points
    14 828
    Par défaut
    Il te dit qu'il a atteint la limite de récursion c'est-à-dire qu'il a bouclé plus de 500 fois sans trouver ce qu'il cherchait.

    Cependant comme toujours ce message n'a rien à voir avec ton code

    A quel moment arrive-t-il ?
    Dans ton code il n'y a aucun appel à IMFORMATS...
    Donc soit le message d'erreur n'est pas complet, soit tu ne nous a pas donné le code qui va avec.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème avec mail (code source affiché au lieu du mail)
    Par Gunner4902 dans le forum Thunderbird
    Réponses: 0
    Dernier message: 03/04/2008, 14h06
  2. problème avec un code source JAVA
    Par magicbisous-nours dans le forum SQL
    Réponses: 7
    Dernier message: 10/12/2007, 17h09
  3. Petit problème avec un code : besoin de votre aide :)
    Par loicdu4000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/09/2006, 18h02
  4. [MySQL] OU est le probléme avec ce code ??
    Par adlich dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/04/2006, 17h47

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