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 :

matrice cooccurence d'une image


Sujet :

Images

  1. #1
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut matrice cooccurence d'une image
    bonjour
    je veux calculer la matrice de co-occurence d'une image

    j'ai ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function M=getCoMatrix(M1,M2)
     
    M = zeros(2); % 2x2 result matrix for binary image.
      [r,c] = size(M1);
     
      for i=1:r
          for j=1:c
              v1 = M1(i,j)+1; % Add one to binary image values to get Matlab indices.
              v2 = M2(i,j)+1;
              M(v1,v2) = M(v1,v2)+1; % Increment co-occurrence value.
          end
      end

    est ce que je dois mettre deux image après la première ligne c'est a dire


    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
    function M=getCoMatrix(M1,M2)
     
    M1=imread('D:\bagd','jpg');
    M2=imread('D:\baj','jpg');  
     
    M = zeros(2); % 2x2 result matrix for binary image.
      [r,c] = size(M1);
     
      for i=1:r
          for j=1:c
              v1 = M1(i,j)+1; % Add one to binary image values to get Matlab indices.
              v2 = M2(i,j)+1;
              M(v1,v2) = M(v1,v2)+1; % Increment co-occurrence value.
          end
      end

    et il m'indique erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Attempted to access M(143,1); index out of bounds because size(M)=[2,2].
     
    Error in ==> Untitlede at 13
              M(v1,v2) = M(v1,v2)+1; % Increment co-occurrence value.
    Je pense que c'est un problème de taille ?
    pourriez vous m'expliquer d'où cette erreur
    amicalement

  2. #2
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Pour obtenir une matrice de coocurence pour une image en niveaux de gris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    im = imread('rice.png'); 
     
    matco = zeros(256) ;
    for i=1:size(im,1)
      for j=1:size(im,2)-1
         matco(im(i, j),im(i, j)+1) = matco(im(i, j),im(i, j)+1)+1 ;
      end
    end
    si tu as Image proceesin toolbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    > doc graycomatrix
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 62
    Points : 41
    Points
    41
    Par défaut
    j'ai deja fais le programme de la matrice de cooccurrence ya quelques temps pour une image BRODATZ:
    voila peut être que mon programme t'aideras un peu :


    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
    A=imread('bro.bmp');
    [m n]=size(A/256);
    ma=max(max(A));
    t=[1,0];
    for i=1:ma
        for j=1:ma
            s=0;
            for u=1:m
                for v=1:n  
                    if (u+t(1)<m)&&(v+t(2)<=n)
                        if (A(u,v)==i)&&(A(u+t(1),v+t(2))==j)
                            s=s+1;
                        end
                    end 
                end 
            end 
            C(i+1,j+1)=s;
        end 
     
    end

    Bon courage

  4. #4
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Citation Envoyé par telecom85 Voir le message
    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
    A=imread('bro.bmp');
    [m n]=size(A/256);
    ma=max(max(A));
    t=[1,0];
    for i=1:ma
        for j=1:ma
            s=0;
            for u=1:m
                for v=1:n  
                    if (u+t(1)<m)&&(v+t(2)<=n)
                        if (A(u,v)==i)&&(A(u+t(1),v+t(2))==j)
                            s=s+1;
                        end
                    end 
                end 
            end 
            C(i+1,j+1)=s;
        end 
     
    end
    Je comprends pas vraiment ton code, tu as choisi une méthode trop compliquée

    Regarde ceci >>

    sinon, ceci >>
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  5. #5
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    merci pour vous réponses
    le code est de
    http://en.wikipedia.org/wiki/Co-occurrence_matrix

    pour votre code telecom85 j'ai mais mon image mais le calcule ne se termin pas c'est une boucle infinie


    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
    im1=imread('D:\bagd.jpg');
    A=im1(:,:,1);
    %A=imread('bro.bmp');
    [m n]=size(A/256);
    ma=max(max(A));
    t=[1,0];
    for i=1:ma
        for j=1:ma
            s=0;
            for u=1:m
                for v=1:n  
                    if (u+t(1)<m)&&(v+t(2)<=n)
                        if (A(u,v)==i)&&(A(u+t(1),v+t(2))==j)
                            s=s+1;
                        end
                    end 
                end 
            end 
            C(i+1,j+1)=s;
        end 
     
    end
    de plus votre A=imread('bro.bmp'); ne marche pas ou bien il y a erreur???
    explique moi svp
    et merci a tous

  6. #6
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    de plus votre A=imread('bro.bmp'); ne marche pas ou bien il y a erreur???

    telecom85 a utilisé une image 'bro.bmp' pour l'exemple, tu n'as qu'a changer par la tienne.

    Et pour le calcul de la matrice de cooccurence, à mon avis le programme que je t'ai donné n'est pas si compliqué, tu as comparé avec celui de WIKI ?
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  7. #7
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    bonjour
    je vais réessayer les calcules et comparer
    merci

  8. #8
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    bonjour
    pour ton code kmaniche j'arrive pas a comprendre le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    matco = zeros(256) ;
    for i=1:size(im,1)
      for j=1:size(im,2)-1
         matco(im(i, j),im(i, j)+1) = matco(im(i, j),im(i, j)+1)+1 ;
      end
    end
    les 2,3,4 lignes , pour la 4 c'est un compteur ?
    pour quoi la 2 ligne
    par contre j'ai fait ce code pour avoir une matrice de coocurrence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    I=imread('imagesource');
    I1=I(:,:,1);
    GLCM = graycomatrix(I1,'Offset',[0 1]);%creation du matrice cooccurrence 
    statsp = graycoprops(GLCM);%extraction des caractéristique de la matrice cooccurence
    que pensez vous
    merci

  9. #9
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    bonjour
    de plus vtore cod kmanich me donne matrice coocurence 256*256 or le mien GLCM c'est 8*8
    avez vous une idée?
    bonne continuation

  10. #10
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    bonjour
    pour la matrice cooccurrence est il preferable utiliser "rgb2gray" au lieu de faire chaque plan seul ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    I=imread('imagesource');
    I1=rgb2gray(I);
    GLCM = graycomatrix(I1,'Offset',[0 1]);%creation du matrice cooccurrence 
    statsp = graycoprops(GLCM);%extraction des caractéristique de la matrice cooccurence
    salutation

  11. #11
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par telecom85 Voir le message
    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
    A=imread('bro.bmp');
    [m n]=size(A/256);
    ma=max(max(A));
    t=[1,0];
    for i=1:ma
        for j=1:ma
            s=0;
            for u=1:m
                for v=1:n  
                    if (u+t(1)<m)&&(v+t(2)<=n)
                        if (A(u,v)==i)&&(A(u+t(1),v+t(2))==j)
                            s=s+1;
                        end
                    end 
                end 
            end 
            C(i+1,j+1)=s;
        end 
     
    end
    Code très étonnant est très lourd.
    Un seul parcours de l'image suffit, il faut juste utiliser un déplacement donné.
    Voilà un code java TRES simple qui fait le calcul pour un déplacement (dx,dy) :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    for(int y0=0;y0<height;y0++) {
    			for(int x0=0;x0<width;x0++) {
    				// pour chaque pixel
    				int v0 = image.getValue(x0,y0);
     
    				// on cherche le voisin
    				int x1 = x0 + dx;
    				int y1 = y0 + dy;
    				int v1 = image.getValue(x1,y1);
     
    				// on incremente la matrice
    				matrix[v0][v1]++;
    				matrix[v1][v0]++;
    			}
    Comme c'est écrit ici, il ne faut pas oublier que la matrice est symétrique, donc on incrémente les deux cases correspondantes (deux dernières lignes).

    Dernière précision... il faut préalablement réduire le nombre de niveaux de gris de l'image. On ne travaille pas sur l'image d'origine.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  12. #12
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    bonjour

    merci pour votre reponse
    primo je utilise matlab , en plus pouriez vous me voir ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    clc,clear all
    a=127*ones(20,20);
    GLCM=graycomatrix(a,'offset',[0 1]); 
    sata=graycoprops(a);
    si je change la taille et je garde 127 ( a titre d'exemple c'est ma texture) les valeur change de

    mean(GLCM) ainsi l'entropie de GLCM
    et si je change la texture et je garde la taille fixe la texture ne change pas
    existe t il des explication
    salutation
    '

  13. #13
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Citation Envoyé par automa Voir le message
    si je change la taille et je garde 127 ( a titre d'exemple c'est ma texture) les valeur change de mean(GLCM) ainsi l'entropie de GLCM
    et si je change la texture et je garde la taille fixe la texture ne change pas
    existe t il des explications
    '
    ???
    Il faut préalablement réduire le nombre de niveaux de gris de la texture pour être d'avantage robuste au bruit. Cela te permet aussi de réduire la taille de ta matrice en conséquence et donc d'avoir des matrices plus petites à manipuler.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  14. #14
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    bonjour
    merci de me répondre
    oui , c'est ça et de plus utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GLCM = graycomatrix(I,'NumLevels',9,'GrayLimits',[0 8]);
    comme dans le help de matlab , telqe je varie " 9 " et comme ça je visualise le résultat
    salutation

  15. #15
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    bonjour
    je mélage entre plusieurs chose , pour cette matrice coocurence , quand je la calcule , pour différentes direction , l'entropie et écart type et moyenne , est ce que cette moyenne est la moyenne de matrice coocurence ou je dois calculer la moyenne de l'entropie ( 4 direction) ainsi pour l'ecart type.
    quelle est cette moyenne utiliser pour caracteriser la texture , et j'ai utiliser des texture de brodtz pour que je puisse comprendre
    merci
    salutation

  16. #16
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    - la matrice de cooccurrences est une matrice à part entière, qu'il te faut calculer en premier. Tu peux le faire dans plusieurs directions, mais alors tu auras plusieurs matrices.
    - ensuite, sur cette/ces matrices tu calcules les caractéristiques Haralick (moyenne, entropie, variance, etc.).
    - si tu as plusieurs matrices, alors tu fais la moyenne.

    Regardes les trois exemples dans le rubrique Contribuez du forum Algo, tu verras ce que l'on fait et tu pourras recopier.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  17. #17
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    bonsoir
    merci de votre réponse
    je vais le consulter
    salutation

  18. #18
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    bonsoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ensuite, sur cette/ces matrices tu calcules les caractéristiques Haralick (moyenne, entropie, variance, etc.).
    - si tu as plusieurs matrices, alors tu fais la moyenne.
    que veut dire ceci ?

    est ce que si ces paramètre ne suffit pas pour définir la texture en passe a la moyenne , mais d'après mais essaies la moyenne de harlick me donne rien mais je n'est pas calculer la moyenne de l'entropie ou la variance car pour chaque image j'ai une seule valeur je n'est pas utiliser entropiefilt ?
    que pensez vous ?
    merci et bonne continuation

  19. #19
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    cela veut dire que si tu considère plusieurs déplacements, tu calcules donc plusieurs matrices pour une même image.
    Sur chacune de ces matrices tu calcules les caractéristiques Haralick, puis tu fait la moyenne caractéristiques par caractéristiques.

    L'entropie n'est qu'une des caractéristiques, il y en a une quinzaine.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  20. #20
    Inactif  
    Inscrit en
    Janvier 2008
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 254
    Points : 59
    Points
    59
    Par défaut
    bonjour
    merci de m'avoir répondre

    d'abord j'ai calculer GLCM ensuite j'ai calculer la moyenne et l'entropie et l'ecart type de cette GLCM plus les quartes données par " graycomatrix " et cette entropie et ecartype et moyenne c'est de toute la matrice GLCM et non pas de chaque element de GLCM , donc mon vecteur discripteur est composé par ces element , est ce ma procedeur et juste ,

    puis tu fait la moyenne caractéristiques par caractéristiques.
    ceci veut dire que j'ai une matrice d'entropie et matrice moyenne ... ensuite je calcule leur moyenne qui sera une seule valeur , car ma procedeur j'ai peut arriver un résultat pas mal
    salutation

Discussions similaires

  1. Matrice 3x3 dans une image
    Par hanane78 dans le forum Images
    Réponses: 2
    Dernier message: 19/02/2014, 19h00
  2. Réponses: 11
    Dernier message: 20/07/2009, 11h22
  3. matrice jacobienne pour une image
    Par hanane78 dans le forum Traitement d'images
    Réponses: 7
    Dernier message: 23/11/2007, 14h53
  4. Transformer une matrice à une image
    Par stiko83 dans le forum C++
    Réponses: 24
    Dernier message: 01/08/2006, 23h11
  5. Réponses: 1
    Dernier message: 19/01/2006, 19h36

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