Salut à tous,
Je suis à la recherche d’un algorithme de fermeture des contours si vous en connaissez un n’hésitez pas à me laisser un message![]()
Salut à tous,
Je suis à la recherche d’un algorithme de fermeture des contours si vous en connaissez un n’hésitez pas à me laisser un message![]()
salut,
fermeture des contours = ?
si tu cherche une lib de traitement d'image, il y a opencv (c, wrappé en python)
Débugger du code est deux fois plus dur que d'en écrire.
Donc, si vous écrivez votre code aussi intelligemment que vous le pouvez, vous n'etes, par définition, pas assez intelligent pour le débugger.
Bonjour,
si ton contour n'a pas de très gros "trous", il y a la morpho math qui fonctionne tres bien.
Si tu n'as que des morceaux de contours, tu peux essayer de faire passer une droite par plusieurs morceaux consécitifs de ton contours. Mais c'est pas gagné...
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
Salut,
la fermeture des contours utilise un gradient d'image (prewit, sobel, deriche, ...).
Tu sélectionnes les maximas locaux dans l'image de la norme du gradient via un seuil haut. Puis tu propages ces maximas vers d'autres points en utilisant la normale au gradient (qui nécessite l'image de directions du gradient). La propagation se fait le long de la normale au gradient pour chaque point.
On peut choisir d'arreter cette propagation lorsque la norme du dernier point est inférieure à un seuil bas (technique du seuillage par hysteresis).
En gros c'est ça.
Flo.
Salut,
Merci pour vos réponses, mais je n’arrive toujours pas à fermer mes gros trous![]()
Pouvez vous donner plus d’explications![]()
A+
faudrait qu'on en sache plus sur ton problème..
C'est une image ? des calculs ?
Comment ils sont à l"heure actuelle tes contours ?
un exemple ? un exemple de code ?
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Salut,
Je m’explique :
Je traite une image Bmp (en niveaux de gris), pour la détection des contours j’ai utilisé les opérateurs classiques (Robert, Prewitt, Sobel, Kirsh, Laplacien, Canny , par soustraction...)
Le problème est le suivant : lorsque je binarise mon image ( par un simple seuil) des contours ouverts apparaissent![]()
A+
Ben tu y est presque,
mais un seuillage simple ne suffit pas, tous les contours n'ayant pas la même intensité. Il faut utiliser au moins un seuillage par hysteresis.
Ce seuillage (renseigne-toi si tu ne le connais pas) te permet de définir des "seeds" (des germes) puis de les étendre aux pixels voisins jusqu'à atteinte d'une contrainte (pixel voisin trop sombre, par exemple, ou encore nombre de pixels agglomérés trop important, etc.).
Déjà avec un "banal" seuillage par hysteresis tu obtiendras mieux. Cependant, tu n'obtiendras pas l'unicité des contours. De même, ils ne seront pas encore complètement fermés.
La solution reste dans l'utilisation d'un seuillage par hysteresis mais adapté à la fermeture des contours. Cette solution nécessite, en plus de la norme du gradient, pour chaque pixel, la direction de ce même gradient. Donc tu recherches les "seeds" grâce au seuil haut dans l'image de la norme du gradient. Puis ensuite tu calcules, grâce à la direction de la normale au gradient en ce point, les 2 pixels par lesquels doit se propager le contour. Ne pas oublier que le gradient te donne, en chaque point de l'image, un vecteur dont la normale est tangente au contour. Donc le contour localement à un point "contour" peut être assimilé à la normale au gradient en ce point.
Donc tu te propages ainsi jusqu'à ce qu'un pixel à agglomérer présente un critère d'arrêt.
C'est pas plus compliqué.
Ensuite il ya des améliorations pour introduire la notions de maximas locaux (car les "seeds" tel que je te les ai présentées n'en sont pas forcément). De même la propagation de ces maximas locaux doit se faire en introduisant la notion d'unicité des contours (la solution décrite ferme les contours mais ils ne seront pas uniques (d'épaisseur 1 pixel)).
Flo.
moi les algos que j'ai utilisés étaient plutot pour des chiffres que des images, mais je ne vois pas en quoi ça ne marcherait pas, et c'est très rapide (le calcul du contour contient en tant que tel la fermeture).
Je m'explique :
une image, c'est une matrice, dont les valeurs vont de 0 à 255, et donc (même si entre 2 pixels la différence est brutale) représente une quantité continue...
Il y a un très joli algo. disponible (CONREC par Paul D. Bourke) qui explicites le calcul de contour dans un triangle. (voir Google)
Chaque cellule de la matrice peut être découpée en 2 ou 4 triangles (4 est le mieux pour la symétrie).
Et là chaque contour se compose, à la fin du passage à travers la matrice, d'une série de segments. Cependant, grâce à la manière de calculer, il est très facile de relier les segments entre eux (la plupart du temps la fin d'un segment est égale au début d'un autre).
L'avantage énorme est :
facilité de compréhension du calcul (maths de seconde)
on ne passe qu'une fois dans la matrice
facile de joindre les segments
Enfin c'est ce qu'en dit...![]()
C'est sans doute moins glorieux que de beaux algos de traitements d'image.. Mais c'est joli et simple...
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Bonsoir,
les gros trous sont un souci...
Est ce que tu as essayé l'enveloppe convexe ???
C'est droit, mais simple.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
Bonsoir,
Non, je ne l’ai pas utilisée. Peux tu m’expliquer le principe STP.
à bientôt;
Bonjour,
l'enveloppe convexe : c'est comme si tu entouré une corde autour de ta forme. Tu obtiens une enveloppe qui représente un ensemble convexe (pour tous couple de points A,B de l'ensemble, le segment [A,B] est totalement inclu dans la forme.
Regarde sur wikipédia, il y a une bonne page.
Si tu souhaites le programmer, je te conseille la marche de Graham (que tu trouves sur wikipédia). Tu tries les points O(n Log n) et ensuite l'algo est linéaire. C'est le meilleur pour la 2D.
Bonne continuation.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
Salut,
je pense que l'utilisation de l'enveloppe convexe ne m'aidera pas, car j'ai beaucoup de points inessentiels, j'aimerai bien vous montrer mon image mais je ne sais pas comment l'insérer dans le message, si vous avez une idée laissez moi un message
![]()
A+
Bonjour,
pour insérer une image ou un lien, tu as des boutons dans ta fenetre de rédaction de messages.
Ensuite, il est bien évident que tu n'utilise pas l'enveloppe convexe sur l'image entière.
=> Il te faut séparer les différentes formes à fermer, puis tu applique l'enveloppe convexe sur chacune d'elles.
Montre nous une image, ce sera simple. Si tu n'arrives pas à insérer l'image, donnes nous un lien où la trouver.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
Salut à tous,
Je travaille sur des images PGM (en niveau de gris), le but c'est définir toute une chaine de traitement :
1) éliminer les bruits de l'image s'ils existent bien sure ( image flou ou avec des grains), j'utilise le filtre de Shoc mais j'obtiens pas de résultat que je peux communiquer à l'étape suivante (detection)
2) Detection de contour, j'utilise le filtre de Sobel, qui est trés performant !
3) Seuillage, (simple puis double) sans problème !
4) Fermeture de contour ????? je trouve pas un seul algorithme, ou code C qui peut m'aidé !!
5)Etiquage ( j'ai pas encore touché )
SVP, si vous disposez d'un code C qui me permet de fermer mes contours après le seuillage, je vous serez très reconnaissant !!
Salut à tous,
je n'ai toujours pas résolu le problème![]()
![]()
,et il me reste peu de temps pour rendre mes résultats
![]()
![]()
![]()
![]()
Vous allez trouvez ci-joint l'image initiale(1) ainsi que l'image traitée(2) SVP si vous avez une idée sur la fermeture des trous laissez moi un message![]()
Bonjour,
je pense encore que la solution que je t'ai proposé fonctionne correctement.
- Tu segmentes tes objets et tu les isoles dans des images différentes.
- Tu calcules l'enveloppe convexe de chacun avec la marche de Graham (c'est le plus rapide en 2D aussi bien en temps d'implémentation qu'en complexité).
- Tu recomposes ton image.
Consignes aux jeunes padawans : une image vaut 1000 mots !
- Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
- Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
-ton poste tu dois marquer quand la bonne réponse tu as obtenu.
Salut,
voilà le résultat obtenu avec l'extraction des contours via un Deriche suivant l'algorithme que je t'avais détaillé ...
A noter que la profondeur des détails dépend du paramétrage et du pré-traitement effectué avant extraction des contours (un filtre médian et une égalisation d'histogramme dans mon cas). A mon avis, cette image aurait besoin d'un filtrage plus efficace.
A noter enfin qu'on parle d'algo de fermeture des contours et non pas de fermeture de trous (qui est un autre type d'algos).
Flo.
Deja c'est pas facile de seuiller ton image.
Ce que j'ai fait pour commencer j'ai soustrait 50 a tout les pixels (la valeur est a améliorer). Ainsi le seuillage est deja plus intuitifs. Voyais plutot la premiere image, et j'ai pas forcé, ni fait autre traitement que la soustraction et le seuillage a une valeur de 238 il me semble.
A partir de la il y a peut etre moyen d'arranger les choses. Un bon vieux traitement de morpho de base et c'est clean. Tu peux faire ta detection de contour.
j'ai fait un traitement vite fait, je sais pas terrible, mais apres quelque ouverture erosion ou dilatation, suisvi d'un find edge sous imageJ (j'utilise ce soft pour trouver des algos) voila ce que j'obtiens en image 2
Au lieu du findEdge fait un traitement de sobel tout bete.
Bon j'ai remarqué que c'étaient des images de coronarographie (d'ailleur j'ai l'impression qu'il a besoin d'un pontage ou d'un coup de fraise dans la tuyauterie) En général on obtiens ce genre d'image sous un canon a rayon X, et le cardiologue regarde ca en direct. Est ce que c'est des images fixes qu'il faut que tu traites? ou est ce que tu a toute une sequence?
J'imagine que tu veux extraire les Coronaires?
Cordialement.
[SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit
Mon premier Tutoriel
A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...
![]()
à parp1 ....
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager