|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 816 ![]() |
Voici une implémentation Java d'un algorithme personnel de segmentation "watershed" (ligne de partage des eaux) pour les images en niveaux de gris.
![]() Cet algorithme reprend le principe du watershed binaire : l'utilisation d'une liste de pixels à explorer. Dans le cas des images en niveaux de gris, j'ai utilisé une liste par niveau, soit 256 listes en tout : tableau "explorelist[256]". L'algorithme incrémente progressivement le niveau de l'eau (variable "level" 0->255), et pour chaque niveau explore les pixels stockés dans les listes explorelist[level] à explorelist[level+step]. La variable "step" permet donc d'explorer également les pixels des niveaux voisins, rendant ainsi l'algorithme plus résistant au bruit. Code java :
L'appel de cette classe se fait de la manière suivante Code java :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||||
|
00
|
|
|
#2 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 816 ![]() |
Il est possible d'utiliser cet algorithme sur une image couleur en créant une image en niveaux de gris représentant la norme du gradient (ou la variance). Il suffit ensuite d'appliquer l'algorithme sur cette image en niveaux de gris:
![]() a gauche : l'image originale au milieu : la norme du gradient à droite : les lignes de partage des eaux surimposées sur l'image originale Un plugin est disponible dans l'application de Millie.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Inscription : mars 2008 Messages : 59 ![]() |
je suis interessé par la methode et je voulais savoir comment utiliser la classe WatershedGrayLevel, si vous pouvez me donner un exemple ou quelque chose qui me facilite l'utilisation de cette classe.
merci d'avance ![]()
|
|
|
00
|
|
|
#4 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 816 ![]() |
Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#5 |
|
Futur Membre du Club
![]() Inscription : mars 2008 Messages : 59 ![]() |
slt merci pour ta réponse ce que je voulais savoir c ou est ce que je peux récupérer l'image segmentée? et c quoi l'utilité du tableau des boolean shed[][]?
aussi la valeur que doit prendre step pour mieux gérer le bruit? Si vous pouvez m'expliquer un peu plus. dsl pour le dérangement |
|
|
00
|
|
|
#6 | |||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 816 ![]() |
Citation:
Tu peux aussi récupérer la carte des régions (le tableau rmap[][]). Pour cela il faut supprimer la ligne "this.rmap = null;" dans la méthode clear() afin de conserver les valeurs une fois le calcul effectué. Citation:
Le tableau rmap[][] représente la carte des régions. La valeur de rmap[x][y] indique le numero de région auquel appartient le pixel (x,y). Si cette valeur vaut WATERSHED (-1) alors le pixel est sur la ligne de partage (et donc n'appartient a aucune région). Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Inscription : mars 2008 Messages : 59 ![]() |
Merci bcp
je vais essayer |
|
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : mars 2008 Messages : 59 ![]() |
si tu me permet de vous déranger un peu plus.
j'ai utilisé le code que tu as posté et ça marche a merveille Je voulais savoir le principe de la méthode, comment elle marche et que fait la fonction process, findseed et nextPixel. merci d'avance. |
|
|
00
|
|
|
#9 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 816 ![]() |
Citation:
La méthode "process" est une boucle qui fait monter le niveau de l'eau. A chaque tour de boucle, cette méthode fait successivement 2 tâches : - étendre les bassins existant (méthodes nextPixel + extend) - créer des nouveaux bassins (méthodes findSeed) A la sortie de la boucle, on construit le tableau contenant les lignes de séparation des eaux.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#10 | ||
|
Invité de passage
![]() Inscription : janvier 2011 Messages : 1 ![]() |
Bonjour,
J'étudie actuellement les algorithmes de segmentation d'image. Je te remercie car ton code m'a permis de comprendre la notion d'extension de bassin mais cependant je n'ai pas bien compris la partie où tu recherches de nouveaux bassins : Code :
2) Celui-ci ne sera jamais étendu car il appartient à la liste level alors qu'au prochain tour de boucle tu sera sur la liste level + 1 ? Edit: En fait je n'ai rien dit, j'avais vu une boucle for au lieu d'une boucle while. Bon travail et merci beaucoup. |
||
|
|
00
|
|
|
#11 | |
|
Invité régulier
![]() ucf ucf Inscription : décembre 2009 Messages : 6 ![]() |
Bonjour,
J'aimerai savoir le principe de la méthode de la ligne de partage des eaux que vous avez implementé( l'algorithme, la documentation, l'auteur de la méthode etc.) Merci d'avance. Citation:
|
|
|
|
00
|
|
|
#12 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 816 ![]() |
Citation:
"The Watershed Transform: Definitions, Algorithms and Parallelization Strategies" , Roerdink and Meijster, 2001
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
10
|
|
|
#13 | |||
|
Invité régulier
![]() ucf ucf Inscription : décembre 2009 Messages : 6 ![]() |
Bonjour,
Merci pour votre réponse c'est très gentil de votre part. Juste une qustion bête, sur la doc il ya pas mal d'algorithme de la LPE, lequel vous avez implementé? Merci Citation:
|
|||
|
|
00
|
|
|
#14 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 816 ![]() |
Je me suis très largement inspiré de l'algorithme de Vincent-Soille. J'y ai apporté les modifications listées dans le premier post (une liste par niveau + exploration sur plusieurs niveaux).
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#15 |
|
Invité régulier
![]() ucf ucf Inscription : décembre 2009 Messages : 6 ![]() |
Merci et Merci beaucoup pour votre réponse. C'est très gentil.
Bien Cordialement à vous. |
|
|
00
|
|
|
#16 |
|
Invité régulier
![]() ucf ucf Inscription : décembre 2009 Messages : 6 ![]() |
Bonjour,
En fait, j'ai bien utilisé votre algorithme pour faire la segmentation, et ça donne des résultats nikel. Je vais faire un rapport dessus. j'aimerais savoir quelle est la référence que je dois mettre pour cette méthode? est ce que celle de Vincent et Soille ? sinon je sais pas si vous avez un algorithme un peut détaillé sur votre méthod? Cordialement. |
|
|
00
|
|
|
#17 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 816 ![]() |
Citation:
Les modifications que j'ai apporté sont mineures. Le but était de réduire la sur-segmentation directement dans l'algorithme d'immersion, au lieu d'utiliser des pré/post traitement comme c'est habituellement le cas.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#18 | |
|
Invité régulier
![]() ucf ucf Inscription : décembre 2009 Messages : 6 ![]() |
Merci pour votre réponse
Au fait l'algorithme de Vincent et Soille prend deux images en entré, une image de gradient et une image de germe sur lesquels la LPE va croitre, mais le votre ne prend que l'image de gradient en entré. De ce fait, est il toujours possible de mettre comme référence celui de Vincent et Soille? Merci Citation:
|
|
|
|
00
|
|
|
#19 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 816 ![]() |
Citation:
Tu peux toujours mettre Luc Vincent et Pierre Soille en référence, puisque la méthode de remplissage est la même.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#20 | |
|
Invité régulier
![]() ucf ucf Inscription : décembre 2009 Messages : 6 ![]() |
Merci pour vos réponses.
Cordialement. Citation:
|
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com