|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Voici une implémentation du calcul du squelette d'une image par la méthode décrite dans ce document pdf.
La méthode consiste a faire des erosions multiples jusqu'a atteindre le squelette. Ce squelette peut etre utilisé, par exemple, pour la reconnaissance de formes (OCR, ...) (EDIT: version améliorée au post #4) ![]() A gauche: l'image originale A droite: le squelette obtenu. Code java :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||
|
10
|
|
|
#2 |
|
Invité de passage
![]() Inscription : mai 2007 Messages : 28 ![]() |
Bonjour,
J’ai testé ce programme en c++ ca marche bien La question c'est comment éliminer les petits segments ajoutés dans les extrémités pour avoir des caractères comme elles sont Ensuite je vais détecter les segments à partir du squelette Par exemples pour la lettre A comment détecter les segments (/, _ et \) |
|
|
00
|
|
|
#3 | ||||||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Non, on ne peut pas retirer les fourches en Y. Elles font partie du squelette et permettent de détecter les extrémités des formes.
Comme je l'ai indiqué sur ton thread dans le forum de discussion (vive le multi-post), si tu veux détecter des points d'intérêts sur le squelette il faut détecter les "croisements", les "inflexions" et les "extrémités" des lignes du squelette. Pour cela, on peut analyser les 8 voisins de chaque pixel du squelette et compter le nombre de transitions 0->1 (voir la fonction transitions() dans le code ci-dessus) Code :
Code :
- si le nombre de transitions est >=3, alors on est a un croisement. Code :
Code :
NB: Si tu ne veux pas des fourches en Y, ne relie pas de segment aux "extrémités" ![]() Image haut: squelette Image milieu: squelette + points d'intérêts (blanc=extrémité, rouge=croisement, vert=inflexion) Image bas: segments reliant les points d'intérêts
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||||||||
|
10
|
|
|
#4 | ||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Voici une version légèrerment modifiée de l'algorithme:
- consommation mémoire réduite en modifiant directement le tableau passé en parametre (in-place) - approximation plus précise (conservation des orientations dans les structures en H ou en X) ![]() Code java :
NB: Cette implémentation n'est pas un filtre ImageJ. Exemple d'utilisation: Code java :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||||
|
10
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 7 ![]() |
Salut à tous!
je voudrais savoir est ce que je pourrais avoir le premier algorithme de pseudocode mais juste à l'aide le la bibliothèque OpenCV car la en imageJ je ne comprend rien !! |
|
|
00
|
|
|
#6 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Je te conseille de prendre le code du post #4 et de le traduire en C++/OpenCV. Ou de demander a quelqu'un de le traduire pour toi.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 2 ![]() |
comment executer ce code dans eclipse
|
|
|
00
|
|
|
#8 | |||||
|
Invité de passage
![]() Inscription : mars 2009 Messages : 2 ![]() |
Citation:
Connaissez-vous une méthode qui transforme une image binarisée en tableau de byte (format attendu par votre méthode)? Je n'ai pas trouvé ce type de fonctionnalité au sein de la bibliothèque imageJ. Merci de votre aide. |
|||||
|
|
00
|
|
|
#9 | |||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Citation:
Code java :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||
|
00
|
|
|
#10 | |||
|
Invité de passage
![]() Inscription : mars 2009 Messages : 2 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : mars 2009 Messages : 11 ![]() |
Vous n'avez pas un code matlab qui fait la même chose en 3D??
|
|
|
00
|
|
|
#12 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Non. Et je ne suis pas bien sur qu'on puisse facilement étendre cet algorithme a la 3D, spécialement le comptage du nombre de transitions.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#13 | |||
|
Futur Membre du Club
![]() Mickey St Inscription : décembre 2009 Messages : 44 ![]() |
Citation:
Alors j'ai essayé d'utiliser ce filtre sur imagej mais je n'obtiens pas du tout la même chose que toi. Pourtant, dans mon menu imagej, je suis allée à plugin puis new puis j'ai copié ton code que j'ai compilé sans aucune erreur. Ensuite, j'ai ouvert une image, j'ai sélectionné le texte d'intérêt, j'ai lancé le plugin et il me demande de rentrer des valeurs de black/white threshold. Tu mets quoi comme valeur? Aussi comment tu fais pour avoir après les points d'intérêts? Je travaille sur la reconnaissance de caractères sur un texte dans une image à l'aide de imagej et je pense que ce filtre pourra beaucoup m'aider. Merci. |
|||
|
|
00
|
|
|
#14 | ||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Citation:
cf. méthode ChannelValue() Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||
|
00
|
|
|
#15 |
|
Invité régulier
![]() Majed oualha Inscription : mars 2010 Messages : 14 ![]() |
j'ai téléchargé la librairie IJ et ca n'a pas marché avec moi ce programme
"Exception in thread "main" java.lang.IllegalArgumentException: Width (0) and height (0) must be > 0" il n'arrive pas à lire l'image |
|
|
00
|
|
|
#16 | ||
|
Invité de passage
![]() Manuel Vaury Inscription : mai 2010 Messages : 1 ![]() |
Bonjour,
J'ai utilisé cette bibliothèque pour mon usage personnel. J'ai modifié son utilisation pour qu'il fonctionne uniquement avec des WritableRaster. J'ai trouvé un petit bug. Par moment on va chercher à des coordonnées de -1. J'ai modifié ceci dans la fonction thinning : Code :
int previousNeighbourhood = neighbourhood(c,x,y); on ira chercher par moment un pixel avec un coordonnée de -1. C'est la même chose pour height et width. Cette modification ne fonctionne plus avec une image qui touche le bord. Pour que cela fonctionne quand même, j'ai agrandi mon image d'un pixel sur les quatres cotés. Je ne sais pas si cette erreur est due au fait d'utiliser un WritableRaster, je ne m'y connais pas assez pour le dire. |
||
|
|
00
|
|
|
#17 | |||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Citation:
Code :
Merci.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||
|
00
|
|
|
#18 | |
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 404 ![]() |
Salut,
après la squeletisation, y a t-il un algorithme d'ébarbulage relativement robuste à part faire le même processus avec le masque suivant (avec 8 rotations) ? Citation:
__________________
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 correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP 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.
|
|
|
|
00
|
|
|
#19 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 424 ![]() |
Citation:
J'avais fait des essais et je m'étais inspiré de la méthode "Skeleton Pruning by Contour Partitioning" sauf que pour simplifier le polygone j'utilisais Douglas-Peuker et pas la DCE. Le résultat était très bien mais ce n'etait pas performant. Cela dit, c'était juste pour tester et mon algo ne devait pas être très optimisé
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#20 |
![]() ![]() Guillaume Chercheur en informatique Inscription : janvier 2006 Messages : 4 404 ![]() |
Mon souci est que je dois l'appliquer sur un squelette en niveaux de gris :-(
Si c'était juste du binaire, cela n'aurait pas posé de problème.
__________________
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 correcteur orthographique pour FiReFox), mettre les ACCENTS et les BALISES => ECRIRE clairement et en Français tu DOIS. - Le coté obscur je sens dans le MP => Tous tes MP 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.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com