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 :

Affiner une courbe dans une image


Sujet :

Traitement d'images

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 29
    Points
    29
    Par défaut Affiner une courbe dans une image
    Bonjour,

    Je trace une ligne sur un papier puis je photographie le papier. Je dispose donc de la photographie d'une ligne. Sur cette photographie, la ligne est épaisse de plusieurs pixels.
    Mon problème est le suivant : comment affiner la ligne pour que celle-ci soit épaisse d'un seul pixel ?

    Pour ce faire, j'avais pensé à une sorte d'algorithme d'érosion :
    1/ classer les pixels en deux classes : les pixels qui appartiennent à la ligne et les pixels qui n'appartiennent pas à la ligne.
    2/ supprimer les bords de la ligne jusqu'à ce que celle-ci soit épaisse d'un seul pixel.
    Cependant j'hésite quant aux règles d'effacement des pixels ( quels pixels supprimer ? ) .

    Une autre méthode qui m'est venue à l'esprit : s'inspirer de l'étape " suppression des non-maxima " du filtre de Canny.

    Qu'en pensez-vous ? Quelqu'un a-t-il déjà été confronté à ce problème ?

  2. #2
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Salut à toi! ^^
    Alors en fait tout dépend ce que tu veux faire de ton programme ^^.

    Concernant l'érosion je pense que tu risques d'avoir des soucis vu que la ligne n'a pas toujours la même largeur ^^.
    Donc à un moment donné elle sera discontinue.

    Sinon tu peux avoir une autre solution qui consiste à seuiller ton image.
    Donc tu auras ta courbe qui sera blanche, et le reste sera noir. Ensuite avec une méthode d’approximation tu peux tracer la courbe moyenne des points blancs. Pour ça tu peux utiliser les courbes de bézier par exemple, ou bien approximer avec le filtre de kalman.^^
    Globalement l’idée est que ton image est une matrice de points (donc de pixels), et une courbe va passer dans ce nuage de points ^^.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 096
    Points : 9 480
    Points
    9 480
    Par défaut
    J'avais fait un truc comme ça il y a très longtemps.
    En gros, voici la démarche que j'utilisais :
    - A l'époque, je traitais uniquement des fichiers BMP, chaque pixel était donc soit noir, soit blanc... l'étape n°1 serait donc de remplacer les gris-foncé par du noir, et les gris clair par du blanc.
    En mettant le seuil assez bas pour ne pas perdre des segments entiers de courbes.
    - Ensuite, j'avais préparé toutes les combinaisons de carré 3x3, avec un pixel noir au milieu (donc 256 carrés possibles), et pour chaque carré 3x3, je déterminais si le pixel noir du milieu devait rester noir, ou pouvait être remplacé par un pixel blanc sans perte du trait.

    Par exemple, dans ces 3 configurations, le pixel du milieu peut être remplacé par un pixel blanc :

    010 000 010
    110 111 110
    100 010 000

    Par contre dans les suivantes, le pixel du milieu ne peut pas être remplacé par un pixel blanc :

    010 000 010
    010 011 010
    010 100 101


    Ensuite, balayage de toute la grille pour traiter tous les carrés 3x3. Suivant qu'on balaye de gauche à droite, ou de droite à gauche, le résultat obtenu peut être légèrement différent.
    Et on boucle éventuellement plusieurs fois, tant que le traitement a changé au moins un pixel.

    C'est artisanal, mais ça marchait très bien.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 29
    Points
    29
    Par défaut
    Merci de votre aide, je vais essayer ça.

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

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,
    ton érosion s'appelle en fait un "squelette". Regarde dans le forum "traitement d'images", ça a souvent été traité.
    Une fois ton squelette calculé, tu auras une sorte de ligne avec plein de petite "barbules", des sortes de lignes un peu courtes qui dépassent de ta ligne principale, mais ce n'est pas important.
    Tu as ensuite deux possibilités :
    - un ébarbulage (voir forum traitement d'image)
    - une transformée de Hough.
    - une petite méthode hybride proche de Hough.

    La transformée de Hough te donnera la ligne la plus probable et c'est exactement ce que tu souhaites.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 10
    Points : 29
    Points
    29
    Par défaut
    J'ai finalement implémenté l'algorithme de squelettisation de Zhang Suen, après avoir trouvé ce document http://www.iasj.net/iasj?func=fulltext&aId=34184 sur internet.

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

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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