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

Traitement d'images Discussion :

faire apparaitre le contour d'une image par filtre SOBEL


Sujet :

Traitement d'images

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut faire apparaitre le contour d'une image par filtre SOBEL
    bonjour,
    je suis en train de faire un petit algorithme de détection de contour par filtre de SOBEL (basé sur l'algo de pseudocode ), mais j'ai pas trouvé de bon résultat.
    Mon problème est : comment choisir le seuil pour que je puisse rendre tous les pixels qui forment le contour en blanc, les autres en noir .

    Mon code est :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    BufferedImage im="L'image d'entrée"
    int [][]tab=new int [im.getHeight()][im.getWidth()];
     
    		for (int i=1;i<im.getHeight();i++)
    		      for (int j=1;j<im.getWidth();j++)
    		      {    	            
    		int v00=0, v01=0, v02=0, v10=0, v12=0, v20=0, v21=0, v22=0;
     
    		int x0 = j-1, x1 = j, x2 = j+1;
    		int y0 = i-1, y1 = i, y2 = i+1;
    		if (x0<0) x0=0;
    		if (y0<0) y0=0;
    		if (x2>=im.getWidth()) x2=im.getWidth()-1;
    		if (y2>=im.getHeight()) y2=im.getHeight()-1;
     
    		v00=tab[x0][y0]; v10=tab[x1][y0]; v20=tab[x2][y0];
    		v01=tab[x0][y1];                    v21=tab[x2][y1];
    		v02=tab[x0][y2]; v12=tab[x1][y2]; v22=tab[x2][y2];
     
    		double sx = ((v20+2*v21+v22)-(v00+2*v01+v02))/4;
    		double sy = ((v02+2*v12+v22)-(v00+2*v10+v20))/4;
     
    		   if (sx+sy<0) tab[j][i]=0;else if (sx+sy>255)tab[j][i]=255;

  2. #2
    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 : 961
    Points
    961
    Par défaut
    Bonsoir,
    La convolution de l'image avec un masque de Sobel ne donne pas une image binaire (noir et blanc)! ça serai plutot une approximation du gradient de l'image,vous aurez donc une forte intensité dans les contours et une faible intensité (sombre) dans les parties "homogénes" de l'image.
    Une fois le gradient calculé,vous pouvez calculer l'image binaire en le seuillant(le gradient).
    La valeur du seuil choisi est judicieuse;une faible valeur de seuil générera de "faux positifs" (certains points ne faisant pas partie des contours auront la valeur 255).Alors qu'une faible valeur de seuil peut provoquer de "faux négatif" (certaines partie des contours ne seront pas visibles,0)...la valeur du seuil dépendra du type d'image que vous traitez.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    dans ce cas là, comment utiliser le gradient pour detecter le contour d'une image.

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par bilzzbenzbilz Voir le message
    dans ce cas là, comment utiliser le gradient pour detecter le contour d'une image.
    Ca dépend de l'image. Il n'y a pas de solution universelle à ce problème.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    par exemple, l'image que vous avez utilisé dans votre documents : filtres usuels en traitement d'image ( la femme avec un chapeau ) image en niveau de gris .

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par bilzzbenzbilz Voir le message
    par exemple, l'image que vous avez utilisé dans votre documents : filtres usuels en traitement d'image ( la femme avec un chapeau ) image en niveau de gris .
    Même pour cette image il n'y a pas "une" solution universelle. Selon le filtre choisi et le niveau du seuil, on aura des contours différents.

    Utiliser seulement un seuil sur la norme du gradient ne donne presque jamais un "beau" contour. Il faut utiliser des techniques plus complexes.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    si vous pouvez siter une solution (simple) avec un seuil. Je veux juste connaître une technique de choix du seuil (même une technique simple), merci .

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par bilzzbenzbilz Voir le message
    si vous pouvez siter une solution (simple) avec un seuil. Je veux juste connaître une technique de choix du seuil (même une technique simple), merci .
    On peut toujours faire une étude statistique des valeurs du gradient pour choisir le seuil. Mais ce calcul implique de choisir un modèle et donc des paramètres. Bref on échange le choix du seuil contre le choix des paramètres. Donc ça ne fait pas avancer le problème.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    bonjour pseudocode.

    Dans ce cas là, comment vous avez transformé l'image (femme avec chapeau) du doc "filtre usuels" par filtre de SOBEL ou vous avez dit :
    noyau vertical (valeur absolue,échelle logarithmique).
    Ou bien c'était juste un exemple ?

  10. #10
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par bilzzbenzbilz Voir le message
    Dans ce cas là, comment vous avez transformé l'image (femme avec chapeau) du doc "filtre usuels" par filtre de SOBEL ou vous avez dit :
    noyau vertical (valeur absolue,échelle logarithmique).
    Ou bien c'était juste un exemple ?
    Oui, c'était juste un exemple d'affichage.

    La convolution par un noyau Sobel normalisé renvoie une valeur entre -255 et +255 pour chaque pixel. Pour présenter graphiquement le résultat (sous forme d'une image), il faut donc transformer ces valeurs dans la plage [0-255] afin d'avoir un niveau de gris correspondant.

    Dans l'article "filtres usuels", j'ai choisi cette formule:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    niveaudegris = = 255 * Math.log(1+Math.abs(sobel)) / Math.log(1+255);

    qui transforme la valeur "sobel" (-255...+255) en valeur "niveau de gris" (0...+255)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  11. #11
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    je veux vous présenter les deux images résultats de l'application de votre techniques , ou est ce que je peux les inserer, quand je clique sur (inserer une image), il me demande une url.

  12. #12
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par bilzzbenzbilz Voir le message
    je veux vous présenter les deux images résultats de l'application de votre techniques , ou est ce que je peux les inserer, quand je clique sur (inserer une image), il me demande une url.
    Clique sur l'icone "trombone" à la place de l'icone "lien".
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  13. #13
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut


    image originale




    sobel vertical




    sobel horizontal
    Images attachées Images attachées    

  14. #14
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    d'après vous, est ce que c'est un bon résultat? d'après moi (non) .

  15. #15
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par bilzzbenzbilz Voir le message
    d'après vous, est ce que c'est un bon résultat? d'après moi (non) .
    Effectivement, il y a un problème. Tes 2 images de Sobel devraient être noir partout sauf au niveau des bords.

    A titre d'exemple voila ce que j'obtient (avec un filtre MDIF 3x3 au lieu d'un Sobel 3x3, mais c'est à peu près le même résultat):


    A gauche le Log de la norme du gradient.
    A droite juste la norme du gradient.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  16. #16
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    aaa, est ce que vous pouvez me donner l'algo que vous avez appliqué .

  17. #17
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Et bien, celui qui est donné dans l'article sur les filtres !
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  18. #18
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    aaaaa, j'ai bien compris . Je vais éssayer de coder l'algo à ma propre façon, puis je vous envoie le résultat .

  19. #19
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par bilzzbenzbilz Voir le message
    aaaaa, j'ai bien compris . Je vais éssayer de coder l'algo à ma propre façon, puis je vous envoie le résultat .
    Heu... c'est juste une double boucle for(). Il n'y a rien d'exceptionnel.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int[][] sobel3x3(int[][] input, int W, int H) {
    	int[][] output = new int[W][H];
    	for (int y = 1; y < H - 1; y++) {
    		for (int x = 1; x < W - 1; x++) {
    			int gx = ((input[x+1][y-1]-input[x-1][y-1]) + 2 * (input[x+1][y]-input[x-1][y]) + (input[x+1][y+1]-input[x-1][y+1]))/4;
    			int gy = ((input[x-1][y+1]-input[x-1][y-1]) + 2 * (input[x][y+1]-input[x][y-1]) + (input[x+1][y+1]-input[x+1][y-1]))/4;
    			int gn = (int) Math.sqrt(gx*gx + gy*gy);
    			output[x][y] = gn;
    		}
    	}
    	return output;
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  20. #20
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 70
    Points
    70
    Par défaut
    voici le résultat de votre algo :



    ce n'est pas exactement le même résultat que votre image.
    Images attachées Images attachées  

Discussions similaires

  1. Faire apparaitre les éléments d'une ListBox un par un
    Par Rastapopoulos dans le forum Silverlight
    Réponses: 11
    Dernier message: 27/08/2010, 11h44
  2. [JAXB]Comment faire apparaitre dans le xsd une valeur par défaut pour un attribut
    Par Marcos Ickx dans le forum Persistance des données
    Réponses: 0
    Dernier message: 07/01/2010, 18h38
  3. Réponses: 19
    Dernier message: 09/07/2008, 18h42
  4. mettre une couleur au contour d'une image
    Par totoranky dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 07/12/2004, 14h37
  5. [FLASH MX] Envoyer une image par e-mail
    Par skyjoe dans le forum Flash
    Réponses: 2
    Dernier message: 22/10/2004, 18h11

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