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 :

determiner l'enveloppe (non convexe)


Sujet :

Traitement d'images

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut determiner l'enveloppe (non convexe)
    Bonjour tous,

    j'ai une image (notée n°1 en PJ) qui a une forme un peu special qui est composé d'un rectangle et d'une sorte de scie courbée.

    Ce que je souhaite:
    1) c'est déterminer les pic et les creux de mes dents (en rouge et en bleu sur l'image N°2)
    2) j'aimerai aussi déterminer la fonction qui représente la courbe extérieure (en vert entre les étoiles)

    Premiere solution :
    1) déterminer une matrice rempli de 0 et 1 (1 si noir 0 sinon)
    2) ranger les abscisses et ordonnées des pixels noir dans des vecteur X et Y
    3) ensuite faire passer un polynome de type moindre carré d'ordre 3 ou 4 par tous les pixels par groupe de 30pixels
    4) ensuite, je connaitrait donc la fonction contour de mon image (par morceaux)
    5) une fois que je connais ces fonctions je peux regarder par exemple le signe de la dérivée seconde et en déduire la courbure et savoir si je suis sur un pic de dent ou un creux.
    6) ensuite pour approcher la courbure extérieur par une fonction je ne sais pas trop quoi faire...

    Deuxieme solution :
    1) j'aimerai déterminer l'enveloppe de cette géométrie mais par contre je ne sais pas comment faire pour ceci...
    2) je sais que la fonction "convhull" pour faire ce genre de chose mais c'est une fonction convexe or moi j'ai besoin d'une fonction non convexe
    -> il y a t il quelque chose sous matlab pour faire ceci facilement?
    3) une fois que j'ai cette enveloppe avez vous une idée de comment déterminer les dents ?

    Je vous remercie pour l'aide et les conseils que vous pourrez me donner

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par membreComplexe12 Voir le message
    1) j'aimerai déterminer l'enveloppe de cette géométrie mais par contre je ne sais pas comment faire pour ceci...
    Deux pistes :
    • contour Snake
    • Alpha Shapes
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci d'DUT d'avoir pris le temps de répondre!

    pourrais tu m'en dire un peu plus s'il te plait sur ces deux algo ?

    Snake:
    d'après ce que j'ai compris on part d'un coutour que l'on va faire intéragir avec notre forme afin que ça vienne l'épouser.

    Le soucis de cet algo d'après ce que j'en ai vu c'est qu'il peut ne pas bien épouser les formes lorsqu'elles sont beaucoup accidentés ?

    du coup pour repérer les "dents" qui se trouve sur mon schéma ça risque d'être compliqué ?

    Alpha:

    je n'ai pas compris vraiment cet algo... il détecte lui même les bord d'un contour et il construit un maillage à l'intérieur ?

    une fois le maillage obtenu il en déduit les coordonnées du contour ?

    si c'est bien ceci ça me parait super.

    Plus robuste?

    Dans les deux algo que tu m'as proposé pourrais tu me donner des informations sur la robustesse ?

    en fait ce traitement d'image devra être totalement automatisé donc j'ai besoin d'un algo qui puisse me détecter tous les contours même si la forme a un peu changée et le but c'est que je n'ai pas a vérifier se traitement.

    bref, il me faut quelque chose de très robuste.
    De ceux que tu as cité lequel te semble le mieux ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    La robustesse dépend de la variabilité des cas que tu étudieras.
    Difficile de te répondre précisément.

    L'Alpha Shape consiste grossièrement à faire "rouler" un cercle sur ton nuage de point et à connecter 2 à 2 les points interdisant le cercle de pénétrer dans le nuage. Tout repose donc sur le choix du diamètre du cercle.

    Sinon il y a aussi l'algorithme de Moore

    Et sous MATLAB, tu as la fonction contour qui fonctionne grosso modo comme les Marching Squares

    Pour la détection des différentes zones, tu peux tracer la variation angulaire entre chaque segment du contour le long de ce contour.

    Mais je ne suis pas non plus un spécialiste de ce genre d'algorithme, d'autres auront donc sans doute de meilleures solutions à te proposer.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci beaucoup DUT, ça m'aide déjà beaucoup

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    on m'a proposé une approche que je trouve intéressante et j'aimerai avoir ton avis s'il te plait. Surout comment réalisé les points 6° et 7° avec matlab

    1°) on prends l'image et on l'a convertie en matrice que je noterai A (1 si pixel noir 0 si pixel blanc)

    2°) on parcours la matrice A sur la première ligne et :

    - si on détecte un pixel "i" blanc" et le pixel "i+1" noir alors on stock dans une matrice B la valeur "+1".

    - si on détecte un pixel "i" noir" et le pixel "i+1" blanc alors on stock dans une matrice B la valeur "-1".

    - si on est pas dans un de ces cas alors on met 0.

    3°) à la fin de ceci on fait la même chose dans le sens vertical (en ne remettant pas à 0 un indice qui aurait déjà eu la valeur

    "+1" ou "-1" lors du parcours horizontal).

    4°) une fois ceci effectué on aura donc une matrice qui représentera tous les contours de l'image. Afin d'avoir une ligne moyenne on peut

    parcourir tout les pixel qui ont un signe "+1" et on regarde le point "-1" le plus proche et on efface les deux points du départ et on ne conserve que le pixel

    qui se trouver entre ces deux derniers et on sauvegarde dans une matrice C.

    5°) une fois que l'on a fait ceci on a les pixels qui sont déterminé à partir de la ligne moyenne du contour et stocké dans la matrice C.

    6°) ensuite le but serait de chercher à faire passer une fonction par tout ces points (par exemple avec des splines ou des polynomes de type moindre carré)

    7°) et enfin on peut déterminer la courbure en étudiant la variation de la fonction localement.


    Qu'en penses tu ? aurais tu une idée pour les points 6° et 7° car je ne vois pas trop comment faire de manière pratique avec matlab ...
    en fait mon problème c'est que si je veux faire passer une spline il faut que met points soient bien ordonnées dans le bon ordre... sinon ma spline va faire n'importe quoi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enveloppe nuage de points non convexe
    Par hilibili dans le forum Mathématiques
    Réponses: 7
    Dernier message: 16/01/2013, 11h59
  2. Calcul d'une enveloppe non convexe d'un nuage de points
    Par kamelcompte dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 11/02/2009, 12h46
  3. Polygone non convexe
    Par XemHA dans le forum OpenGL
    Réponses: 5
    Dernier message: 17/03/2008, 10h37
  4. Polygone non convexe (le retour) : réduire le nombre de sommets
    Par Graffito dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 28/01/2008, 09h26
  5. Dessiner un polygone non convexe
    Par BruceBoc dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 24/10/2007, 08h11

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