j'ai besoin de l' implémentation du calcul du squelette d'une image en c++
l'image pour moi c'est un tableaux de pixel de 2 dimenssion
quelqun peut m'aider mérci
j'ai besoin de l' implémentation du calcul du squelette d'une image en c++
l'image pour moi c'est un tableaux de pixel de 2 dimenssion
quelqun peut m'aider mérci
Tu es ici dans la section algorithmes, mais tu peux t'inspirer du code publié dans la rubrique "contribuez" :
http://www.developpez.net/forums/sho...d.php?t=344035
Salut j'avais ouvert une discussion il y a un moment il y a une source. Je ne sais pas si c'est cu C/c++ ou java.
C'est ici a la deuxieme page.
Bonjour,
le sujet a déjà été traité plusieurs fois et j'ai répondu. Fais une recherche.
Sinon une des façon les plus simple pour avoir un squelette c'est de faire un amincissement homotopique.
En gros tu déplaces un masque sur ton image et si le pixel testé répond au critères imposés par le masque il est supprimé.
C'est un squelette simple, qui donne des résultats correctes avec une grande sensibilité aux bruits.
Si tu veux un squelette plus complexe et stable, je te conseille très fortement de lire la thèse de Lohou (j'ai oublié le prénom, Cristophe me semble t-il).
En plus des approches topologiques, il y a aussi des approches morphologiques, qui sont plutôt plus stable (au sens où elles produisent moins de petites branches). En revanche, je crois me souvenir que la topologie ne peut être préservée par ces approches que sur une grille hexagonale.
On peut aussi citer les approches par carte de distance, bien détaillées dans la thèse de Olivier Cuisenaire.
Tout dépend ensuite de l'application souhaitée.
Merci a vous tous, j'ai testé les programmes du squelette déjà proposé dans le forum, et j'ai trouvé des bons résultats
J’ai appliqué ca sur les images caractères, maintenant je cherche à détecter les segments dans le caractère, premièrement en cherchant les points d'intérêts dans le squelette. Mais j'ai trouvé quelques difficultés de choisir le bon algorithme pour la détection des segments, prière de m'aider merci
il faut detecter les "croisements", les "inflexions" et les "extremité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 ma contrib)
- si le nombre de transitions est 1, alors on est a une extremité.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ------- |a|b|c| ------- |h|X|d| voisins de X (sens horaire): a,b,x,d,e,f,g,h ------- |g|f|e| -------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ------- |0|1|0| ------- |0|X|0| voisins (sens horaire): 0,1,0,0,0,0,0,0 ------- ^ |0|0|0| 1 transition -------
- si le nombre de transitions est >=3, alors on est a un croisement.
- si le nombre de transitions est 2, alors on est au milieu d'une continuité. il faut alors regarder la position des pixels de transition pour connaitre l'angle d'inflexion.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ------- |0|1|0| ------- |0|X|1| voisins (sens horaire): 0,1,0,1,0,0,1,0 ------- ^ ^ ^ |1|0|0| 3 transitions -------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ------- |1|0|0| ------- |0|X|0| voisins (sens horaire): 1,0,0,0,0,1,0,0 ------- ^ ^ |0|1|0| 2 transitions -------
Bonjour,
détection de segments => Transformée de HOUGH !!!!
Pas forcément : une image de caractère n'est pas constituée que de segments de droites. Il peut être plus simple de détecter les jonctions comme proposé ci-dessus (voir aussi l'article de Malandain et Ayache "Topological segmentation of surfaces"), puis d'étudier chaque segment, par exemple en le modelant par une spline.Envoyé par ToTo13
Partager