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 :

Classifier l'ensemble des pixels d'une image


Sujet :

Images

  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Par défaut Classifier l'ensemble des pixels d'une image
    Bonjour,

    Je cherche à classifier en deux classes l'ensemble des pixels d'une image avec une classe couleur de la peau et une classe non-couleur de la peau. Pour ce faire j'utilise une règle de classification qui est basée sur la distance
    Mahalanobis. Juste avant j'utilise une segmentation . Est-ce que quelqu'un pourrais m'aidez svp, voici mon 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
     
    clear all
    close all
     
     
    img_RGB = imread('groupe.bmp');
    img_YCBCR = rgb2ycbcr(img_RGB);
    img_grey = rgb2gray(img_YCBCR);
     
    subplot(2,2,1)
    imshow(img_YCBCR)
    title('couleur')
     
     
    subplot(2,2,2)
    imshow(img_grey)
    title('niveaux de gris')
     
    [nl nc]=size(img_grey);
    seuillage=zeros(nl,nc);
     
        for i=1:nl
            for j=1:nc
     
                if(img_grey(i,j)<50)
                    seuillage(i,j)=25;
                end
     
                if(img_grey(i,j)>49)&(img_grey(i,j)<100)
                    seuillage(i,j)=75;
                end
     
                if(img_grey(i,j)>99)&(img_grey(i,j)<150)
                    seuillage(i,j)=125;
                end
     
                if(img_grey(i,j)>149)&(img_grey(i,j)<200)
                    seuillage(i,j)=175;
                end
     
                if(img_grey(i,j)>199)
                    seuillage(i,j)=225;
                end
            end
        end
     
    seuillage=uint8(seuillage); %Converti l’image en 8 bits
    subplot(2,2,3)
    imshow(seuillage)
    title('Image segmentée')
     
    % SE=[0 1 0;1 1 1;0 1 0];
    BW = edge(seuillage,'canny');
    subplot(2,2,4)
    imshow(BW)
    title('Image filtrer par canny')
    BW2 = imfill(BW,'holes');
    figure, imshow(BW2)
    P=PDIST(BW2,'mahalanobis');
    Merci d'avance .

  2. #2
    Membre confirmé Avatar de airballman
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 256
    Par défaut
    C'est quoi exactement ton pb?
    Ca ne renvoie pas ce que tu veux? Le code renvoie une erreur???

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Par défaut Classifier l ensemble des pixels d une image
    Non le code ne renvoie pas d erreure , mon probleme c est que j' arrive pas a classifié l ensemble des pixels de l'image en 2 classes pour pouvoir avoir une image avec la peau des personnes en blanc et le reste en noir . Merci

  4. #4
    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 : 46
    Localisation : Etats-Unis

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

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

    juste pour la petite précision, c'est plutôt une classification, sinon "classifier" c'est pour les services secret

    Pourquoi ne tentes tu pas une petite segmentation par K-means?

    Mais dans tous les cas, tu vas être confronté au fait que la partie de ton image contenant de la peau est souvent minoritaire (en terme de taille).

    Est ce que tu as fait un petit état de l'art sur le domaine?
    Le sujet a déjà été traité plusieurs fois.
    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.

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Par défaut Classifier l ensemble des pixels d une image
    Bonjour,

    Oui j'ai fait un petit état de l'art sur le domaine mais j ai pas trouver de reponse a mon probleme . Une règle de classification est basée sur la distance
    Mahalanobis est je souhaiterais l utiliser mais elle fonctionne pas avec mon code . Je sait pas si je doit utiliser la distribution Gaussienne pour modelés les couleurs de la peau de plusieurs personnes des ethnies différentes et apres les traiter pour les filtrés par des filtres passe bas pour réduire l’effet du bruit.

    Merci pour vos reponses .

  6. #6
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Par défaut classification
    re bonjour ,
    dsl j arrive pas a utiliser la fonction mahalanobis c'est pour cela que j utilise une autre methode et j' y arrive presque, mais j' arrive pas a concentrer tout le blanc sur la couleur de peau. Tout d’abord j'utilise une transformation
    d’espace de couleur du RGB vers le HSV ensuite je fait une égalisation d’histogramme de saturation pour une élimination des ombres et j utilise une loi exponentielle pour une fusion numerique de teinte et de luminance grace a la these de T.garon . Je voudrais svp qu'on m'oriente pour remplir les trous des visages dans mon image . J' ai essaye d utiliser la methode de clustering mais j y arrive pas meme en m'aidant de help sur matlab je bloque . merci encore .

    voici mon 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
     
    clear all
    close all
    clc
     
     
    img_RGB = imread('groupe.bmp');
    img_R = img_RGB(:,:,1);         
    img_G = img_RGB(:,:,2);
    img_B = img_RGB(:,:,3);
     
    subplot(2,4,1)
    imshow(img_RGB)
    title('couleur')
     
    subplot(2,4,2)
    imshow(img_R)
    title('bande R')
     
    subplot(2,4,3)
    imshow(img_G)
    title('bande G')
     
    subplot(2,4,4)
    imshow(img_B)
    title('bande B')
     
    img_HSV = rgb2hsv(img_RGB);
    img_H = img_HSV(:,:,1);
    img_S = img_HSV(:,:,2);
    img_V = img_HSV(:,:,3);
     
     
     
     
    img_seuil=zeros(size(img_RGB));
    seuil=0.3;
    img_seuil=(img_S<seuil)*255;
     
     
     
    f=img_S;
    SEqualHisto=histeq(f,256);
     
     
    %%calcul du gradient de couleur
    ImNTSC = rgb2ntsc(img_RGB);
    figure, imshow(ImNTSC);
    luminance=ImNTSC(:,:,1);
    teinte=img_H;
    Gt = gradient(teinte);
    Gl=	gradient(luminance);
     
    beta =1-exp(10*img_S);
    Gcouleur=(beta.*Gt)+(1-beta).*Gl;
     
     
     
    img_gray=rgb2gray(img_RGB);
    level=graythresh(img_gray);
    bw = im2bw(img_gray,level);
     
    k=img_S.*Gcouleur;
    imshow(k)
    kr=double(img_R).*Gcouleur;
    kg=double(img_G).*Gcouleur;
    kb=double(img_B).*Gcouleur;
    kgray=double(img_gray).*Gcouleur;
     
     
    kbw=bw.*Gcouleur;
    figure,imshow(kbw)
    datacursormode on

  7. #7
    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 : 46
    Localisation : Etats-Unis

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

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

    pour le remplissage des trous, il faut utiliser les composantes connexes.
    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.

  8. #8
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    >> doc imfill
     
    >> doc imclose

  9. #9
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Par défaut classification
    Bonjour,

    Merci pour les reponses, j'ai utiliser imclose mais sa me referme meme les yeux et l image est un peu flou. Vous seriez pas comment je pourrais utiliser les composant connexes svp ?

    Merci encore.

  10. #10
    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 : 46
    Localisation : Etats-Unis

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

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

    je ne connais pas ces deux fonctions MatLab, mais je pense qu'elles utilisent justement les composantes connexes. Qui de toute façon fermeront également les yeux.
    Cela te permettra néanmoins d'avoir un masque complet de la peau. Libre à toi ensuite de le trouer pour éliminer les parties indésirables.
    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.

  11. #11
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 17
    Par défaut classification
    re bonjour,

    ok merci, je savais pas que ces fonctions utilisait des composantes connexes.

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/03/2007, 16h39
  2. [FLASH 8] BitmapData -> changer des pixels d'une image en alpha
    Par Lorenzo77 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 15/12/2006, 18h13
  3. [c++.Net] Parcours des pixels d'une image
    Par CaptainChoc dans le forum Framework .NET
    Réponses: 4
    Dernier message: 27/11/2006, 17h05
  4. diffusion des pixels d'une image
    Par hagui dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 11/05/2006, 19h31
  5. [MFC]déplacement des pixels d'une image
    Par hagui dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2006, 17h51

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