gradient d'image (Prewitt et Sobel)
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

gradient d'image (Prewitt et Sobel)



  1. #1
    etibat

    gradient d'image (Prewitt et Sobel)


    ------

    Bonsoir, suite à un exo en informatique, je devais codé les gradient de sobel et de prewitt mais je n'obtiens pas un bon résultat.

    voila mes lignes de codes qui doivent poser problème

    for (int a=1; a<hauteurImagePgm-1;++a)
    for(int b=1;b<largeurImagePgm;++b)
    {
    tmp[a][b]=(-PixelsPgm[a-1][b-1]-k*PixelsPgm[a][b-1]-PixelsPgm[a+1][b-1]+PixelsPgm[a-1][b+1]+k*PixelsPgm[a][b+1]+PixelsPgm[a+1][b+1]);
    tmp1[a][b]=(PixelsPgm[a-1][b-1]+k*PixelsPgm[a-1][b]+PixelsPgm[a-1][b+1]-PixelsPgm[a+1][b-1]-k*PixelsPgm[a+1][b]-PixelsPgm[a+1][b+1]);
    tmp[a][b]=sqrt(tmp[a][b]*tmp[a][b]+tmp1[a][b]*tmp1[a][b]);
    /*if (tmp[a][b]<0)
    tmp[a][b]=-tmp[a][b];
    if(tmp[a][b]>255)
    tmp[a][b]=255;*/
    }

    tmp et tmp1 sont des tableaux temporaires, k peut prendre la valeur de 1 ou de 2 selon si c'est prewitt et sobel.
    PixelsPgm sont des unsigned char tout comme les tmp

    je ne sais vraiment pas pourquoi cela ne marche pas

    merci de votre aide

    -----

  2. #2
    invite4492c379

    Re : gradient d'image (Prewitt et Sobel)

    Hello,

    Nom : code.png
Affichages : 83
Taille : 1,3 Ko
    Code:
    for (int a=1; a<hauteurImagePgm-1;++a)
      for(int b=1;b<largeurImagePgm;++b)
      {
        tmp[a][b]=(-PixelsPgm[a-1][b-1]-k*PixelsPgm[a][b-1]-PixelsPgm[a+1][b-1]+PixelsPgm[a-1][b+1]+k*PixelsPgm[a][b+1]+PixelsPgm[a+1][b+1]);
        tmp1[a][b]=(PixelsPgm[a-1][b-1]+k*PixelsPgm[a-1][b]+PixelsPgm[a-1][b+1]-PixelsPgm[a+1][b-1]-k*PixelsPgm[a+1][b]-PixelsPgm[a+1][b+1]);
        tmp[a][b]=sqrt(tmp[a][b]*tmp[a][b]+tmp1[a][b]*tmp1[a][b]);
        /*if (tmp[a][b]<0)
          tmp[a][b]=-tmp[a][b];
          if(tmp[a][b]>255)
          tmp[a][b]=255;*/
      }
    Ça ne marche pas signifie-t-il :

    * ça compile pas
    * ça compile mais l'exécution est en erreur
    * ça s'exécute mais le résultat est faux


    Remarque sans savoir exactement ce qui se passe dans le morceau de code je me demande pourquoi on a b<largeurImagePgm et pas b<largeurImagePgm-1 ? (simple remarque visuelle).

  3. #3
    etibat

    Re : gradient d'image (Prewitt et Sobel)

    le résultat obtenu n'est pas le bon, au lieu d'avoir une image plutôt noire avec les contours blanc, j'ai une image "poivre et sel"
    en effet il y a une erreur sur j'ai bien oublié le -1 j'ai corrigé mais ça ne change rien.

    Merci

  4. #4
    invite4492c379

    Re : gradient d'image (Prewitt et Sobel)

    Pour autant que je puisse en juger le morceau de code à l'air correct, tu utilises bien les deux matrices


    Pourquoi penses-tu que le problème vient de ce morceau de code ? As-tu essayé en mode debug pour voir les valeurs intermédiares ? As-tu généré les contours de ton image originelle avec un autre soft pour être certain du résultat ?

  5. A voir en vidéo sur Futura
  6. #5
    etibat

    Re : gradient d'image (Prewitt et Sobel)

    je ne sais pas trop utilisé le mode débug...

  7. #6
    invite4492c379

    Re : gradient d'image (Prewitt et Sobel)

    Citation Envoyé par photon57 Voir le message

    Pourquoi penses-tu que le problème vient de ce morceau de code ?
    (...)
    As-tu généré les contours de ton image originelle avec un autre soft pour être certain du résultat ?
    Et les autres questions ?

  8. #7
    etibat

    Re : gradient d'image (Prewitt et Sobel)

    voila j'ai modifié une ligne pour :
    tmp[a][b]=((tmp[a][b]^2)+(tmp1[a][b]^2))^(1/2);

    et ceci a nettement améliorer mon image de sorti,
    par contre je ne comprend pas la différence entre les deux. Si quelqu'un peut expliquer

  9. #8
    invite4492c379

    Re : gradient d'image (Prewitt et Sobel)

    Tu programmes en quel langage ? (ce qui aurait dû être ma première question en fait ...)

  10. #9
    invite4492c379

    Re : gradient d'image (Prewitt et Sobel)

    Pour info en C, il y a une fonction puissance qui est pow, ^ est un XOR bit à bit ...

  11. #10
    lou_ibmix_xi

    Re : gradient d'image (Prewitt et Sobel)

    Fait attention au format des pixels, si ils sont encodés en "char" (de -128 à +127) ou "unsigned char" (de 0 à 255), tes calculs (même intermédiaire) dessus risque de dépasser la dynamique et donc de produire des resultats faux. Un moyen simple de palier à ce problème et de passer en "float" juste le temps des calculs, puis revenir au format originel avec éventuellement une normalisation pour recadrer la dynamique de sortie.

Discussions similaires

  1. traitement d'image: detection de contours avec Sobel
    Par inviteb8477130 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 13/11/2010, 10h23
  2. [MATLAB] Segmentation d'image + edition d'une matrice d'image
    Par invitef5d502cc dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 04/11/2009, 12h24
  3. Gradient
    Par invite08a45f6c dans le forum Mathématiques du supérieur
    Réponses: 14
    Dernier message: 24/01/2008, 16h40
  4. Filtre de Sobel en VHDL...
    Par Crepuscule2 dans le forum Électronique
    Réponses: 0
    Dernier message: 11/05/2007, 17h52
  5. gradient
    Par inviteeb0ecdb0 dans le forum Physique
    Réponses: 2
    Dernier message: 17/04/2004, 19h29