filtre de sobel : détection de contours (algo)
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

filtre de sobel : détection de contours (algo)



  1. #1
    cosmoff

    filtre de sobel : détection de contours (algo)


    ------

    Bonjour,

    je suis en train de comprendre le fonctionnement de la détection de contours dans la vision par ordinateur. Je suis donc tombé sur le filtre de Sobel qui permet de détecter les contours, mais je rencontre quelques problemes de compréhension.

    voila si je cherche à récupérer les points des contours de l'image ci-joint. je vais utiliser les matrices Gx et Gy de l'algo de Sobel :
    et

    Je prend le cas ou je cherche à calculer le gradient du point(3, 2). J'obtient Gx = -255 et Gy = -255. Je fais le module et obtient 360 ce qui est supérieur à la valeur maximal d'un octet. Donc je rapporte la valeur à 255 ou ca n'a pas d'importance ? Ensuite je fais atan(Gy/Gx) et obtient 45°, et cette valeur me pose probleme, car il y a variation d'intensité lumineuse à -45° or le calcul me donne 45° ce qui est problématique, ou est mon erreur ?

    Une fois que j'ai calculé correctement tous les gradients de chaque pixel de l'image (à part la bordure de l'image), j'ai donc un vecteur dans chaque case de l'image, et la pointe des fleches ainsi que leurs longueurs m'indiquent les variations d'intensités de l'image et donc les contours. Mais je n'ai pas d'explication sur la suite de la procédure. Comment je fais dans mon algo pour repérer chaque objet. En faite j'aimerais placer dans un std::vector<std::vector<Point> >objet, les points (coordonées) de chaque objet.

    Si on prend mon image, comment je peux faire pour placer le contours de mon objet dans un tableau? est ce que l'algo de Sobel fait ca ?


    J'avoue que mon explication est un peu lourde mais je sais pas trop comment amener ca...

    En tout cas merci d'avance pour votre aide.

    -----
    Images attachées Images attachées  

  2. #2
    minushabens

    Re : filtre de sobel : détection de contours (algo)

    Si tu as une matrice qui contient des nombres compris entre 0 et 255 les différences seront comprises entre -255 et 255. Autrement dit si tu utilises un tableau d'octets pour ton image il te faudra un tableau d'entiers sur 16 bits pour stocker le gradient.

  3. #3
    cosmoff

    Re : filtre de sobel : détection de contours (algo)

    Pourtant j'obtiens bien des résultats > 255 et mon calcul ne me parait pas incorrect. De plus je ne comprends pas ce que les gradients signifient quand les valeurs sont > 255, car un gradient est une variation d'intensité lumineuse entre deux pixels, or dans mes calculs j'ai des variations lumineuses égales à 360 ce qui n'a pas tellement de sens

  4. #4
    minushabens

    Re : filtre de sobel : détection de contours (algo)

    ok, tu fais un calcul qui est plus compliqué qu'une simple différence entre valeurs de pixels adjacents. Mais quoi qu'il en soit, un gradient n'a pas de raison d'être contenu dans les bornes de la fonction (c'est pas les mêmes unités), et donc à mon humble avis il te faut choisir un type de données qui permette de le stocker sans perte, a priori d'après ce que tu dis un entier*2 devrait suffire.

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

    Re : filtre de sobel : détection de contours (algo)

    Ok pour cet élément de réponse. Mais je reste bloqué dans le calcul de l'angle de mon gradient qui m'indique le sens de variation de l'intensité lumineuse, or le résultat de mes calculs est différent de ce que j'ai dans mon image, as tu une explication car mon calcul semble bon

  7. #6
    minushabens

    Re : filtre de sobel : détection de contours (algo)

    Pour avoir l'angle il faut calculer un arc tangente. Fais attention au sens de numérotation des lignes et des colonnes : en général du haut vers le bas de l'image et de gauche à droite, ce qui fait que le repère a une orientation opposée à l'orientation standard.

  8. #7
    cosmoff

    Re : filtre de sobel : détection de contours (algo)

    ah oui bien joué j'avais pas fait attention à ce détail. Mes angles sont donc cohérents !

    Ensuite une fois que j'ai mon image composé de vecteurs (angle et norme), comment je peux faire (algorithmiquement) pour récupérer les différents objets de mon image. Je veux dire que j'arrive avec les vecteurs a voir les objets (les contours), mais comment faire pour mettre tous les points de l'objet 1 dans un tableau, puis tous les points de l'objet 2 dans un autre tableau... Le filtre de Sobel n'explique pas la démarche

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. Problème du plus court chemin ( Algo de dijkstra, algo A*)
    Par invite5a18c7d1 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 12/06/2010, 10h25
  3. détection et extraction de contours
    Par invite4d56a294 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 06/05/2010, 16h39
  4. Capteur de pression (détection d'un filtre bouché)
    Par invite744ac8f4 dans le forum Technologies
    Réponses: 3
    Dernier message: 10/12/2009, 05h56
  5. Filtre de Sobel en VHDL...
    Par Crepuscule2 dans le forum Électronique
    Réponses: 0
    Dernier message: 11/05/2007, 17h52