|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Voici une implémentation Java de l'algorithme "Snake" (contour actif).
L'algorithme Snake permet de tracer le contour d'une zone irrégulière en déformant progressivement une courbe de départ. Pour plus d'informations, je vous conseille l'article de khayyam90. ![]() La classe Snake (attributs+constructeur) Code java :
Les méthodes de l'algorithme "snake" Code java :
Les méthodes des fonctions d'energie: Code java :
Les méthodes du mécanisme d'auto-adaptation: Code java :
Utilisation: Le constructeur de la classe Snake a besoin des paramètres suivants:
La méthode publique "loop()" fait évoluer le snake jusqu'a convergence et retourne la liste des points du snake final.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||||||||
|
20
|
|
|
#2 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
10
|
|
|
#3 | |
|
Membre expérimenté
![]() |
Bonjour,
Tout d'abord merci PseudoCode pour cette contribution,c'est exactement ce que je cherchais... J'essais d'implémenter cette algorithme en utilisant C++ Builder. Mais je ne suis pas arrivé à comprendre la procédure f_gflow Citation:
![]() -Concernant la fonction gradient(i,j),je l'ai implémenter de cette façon : gradient(i,j)=sqrt(gradientX(i,j)²+gradientY(i,j)²) Tq: gradientX(i,j)=ABS(valeur_pixel(i+1,j)-valeur_pixel(i-1,j)) & gradientY(i,j)=ABS(valeur_pixel(i,j+1)-valeur_pixel(i,j-1)) Est ce la bonne méthode de calcul du gradient?!
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
|
|
|
10
|
|
|
#4 | |||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Citation:
Citation:
Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||
|
10
|
|
|
#5 | |
|
Membre expérimenté
![]() |
Citation:
à quel moment et comment ajoute t on un point? PS:Je ne sais pas si je suis au bon endroit pour poser cette question,si ce n'est pas le cas je m'en excuse...
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
|
|
|
10
|
|
|
#6 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Citation:
L'auto-adaptation est composée de 2 phases: - Si 2 points sont trop près: suppression de l'un des 2 ( méthode removeOverlappingPoints() ) - Si 2 points sont trop éloignés: ajouts de points entre les 2 ( méthode addMissingPoints() )
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#7 | ||
|
Membre expérimenté
![]() |
Je m'y connais pas dutout en langage Java donc merci pour ces explications .
Citation:
Dans le cas contraire (AUTOADAPT=True),à chaque N itérations de l'algorithme je dois calculer pour chaque point du snake,la distance entre ce dernier et ses voisins (Successeur et prédécesseur),cette distance etant inférieure ou supérieure à un certain seuil (distance minimale,distance maximale respectivement),Je dois ajouter ou supprimer un point... Est ce bien ça la façon de procéder?! Citation:
Concernant les valeurs de N(AUTODAPAT_LOOP),Distance minimale et maximale entre deux points. Comment choisir ces valeur? Merci encore. Cordialement.
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
||
|
|
00
|
|
|
#8 | |||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Citation:
Citation:
Citation:
C'est totalement empirique mais ca me convient.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||
|
00
|
|
|
#9 |
|
Membre expérimenté
![]() |
Merci PseudoCode
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
|
|
00
|
|
|
#10 |
|
Membre expérimenté
![]() |
Décidement dés qu'un problème est résolu survient un autre!
L'image Gradient+Flow que je réalise est differente de celle de l'application! Voici comment je la calcule: -Je calcule le gradient de l'image originale ("gradient.bmp"). -Ensuite je binarise "gradient.bmp" en utilisant un seuil=100,j'obtient "gradientbinnaire.bmp". -A partir de "gradientbinnaire.bmp" je calcule la carte des distances et j'obtient "gradientflow.bmp". Et voici comment je calcule la carte des distances(a partir de "gradientbinnaire.bmp"): -Je mets les coordonnées de tous les points ayant 255 comme valeur dans un vecteur de point Contour[i].x,Contour[i].y. càd (Contour[i].x,Contour[i].y) sont les coordonnées du iéme point ayant la valeur 255 dans "gradientbinnaire.bmp"(Est ce clair?!) -Pour chaque point de l'image calculer la distance entre ce point et TOUS les point du vecteur Contour -La nouvelle valeur du point dans l'image sera la distance minimale,si cette valeur est supérieure à 255 elle prend 255. Est ce bien la méthode de calcul de la carte des distances? Rq: -Le traitement est relativement long!! -La distance entre deux point je la calcule de cette maniere : dist(A,B)=SQRT((Ax-Bx)²+(Ay-By)²) Voici les images que j'obtient,comme je l'ai déja dis elle sont differentes de celles de la contribution,Auriez vous une explication?
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
|
|
00
|
|
|
#11 | |||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Citation:
Citation:
Citation:
Code :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|||||
|
00
|
|
|
#12 | |
|
Membre expérimenté
![]() |
Citation:
Mais dans GradientFlow à afficher: Si la distance est supérieure à 255,la valeur du pixel depassera l'intervalle de couleur?! ça provoque des résultat pas trés jolis jolis chez moi!
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
|
|
|
00
|
|
|
#13 | ||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Citation:
Citation:
flow = 0 --> r = Math.max(0,255-0) = 255 flow = +oo --> r = Math.max(0,255-infinity) = Math.max(0, -infinity) = 0
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||
|
00
|
|
|
#14 |
|
Membre expérimenté
![]() |
Merci pour la rapidité de tes réponses .
Je vais essayer de relire le code ligne par ligne.
__________________
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!» |
|
|
00
|
|
|
#15 |
|
Invité régulier
![]() Inscription : avril 2008 Messages : 6 ![]() |
Bonjour tout le monde!
Dans le but d'améliorer mon snake, je voudrais utilisais le Gradient Vector Flow. Cependant, je ne trouve pas la méthode pour calculer ce flow. Quelqu'un pourrait-il m'orienter vers une méthode ? Aparement c'est obligatoirement une méthode itérative qui doit minimiser une équation mais je ne comprend pas très bien. Merci d'avance !!! PS: J'essaye d'utiliser un maximun OpenCV |
|
|
00
|
|
|
#16 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Citation:
La méthode itérative vient de cette notion de diffusion. Personnellement, je préfère approximer cette cette carte d'élévation en utilisant une variante de l'algo de la carte des distances (un peu comme c'est fait dans ma contribution, mais en utilisant un gradient non "binaire"):
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#17 |
|
Invité régulier
![]() Inscription : avril 2008 Messages : 6 ![]() |
Bonjour tout le monde,
Tout d'abord, merci pour ta réponse Pseudocode Je me répond a moi-même au cas ou des autres personnes serait intérréssé. L'algo a été implanté en matlab et en C ici : http://iacl.ece.jhu.edu/projects/gvf/ J'ai utilisé leur source pour coder mon propre GVF, ca fonctionne super bien. (reste a bien comprendre cette résolution qd meme Bonne journée a vous tous !! EDIT : Je viens de regarder ta contribution sur la carte des distance Pseudocode, ca a l'air super intérréssant ! Je vais essayer d'implanter ca et tester cette méthode par rapport à celle avec les GVF. Si tu veux en savoir plus sur mon projet, en fait j'utilise la méthode CHEVP pour détecter la route, je la modélise avec une B-spline (la ligne médiane) et après je cherche a faire du suivit de ligne avec un snake + GVF (ou peut étre carte des distance Pourrais-tu m'en dire un peu plus sur l'algorithme de Chamfer ? Merci ! |
|
|
00
|
|
|
#18 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
J'ai ajouté quelques explications sur la contribution de la Carte des Distances
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#19 |
![]() ![]() Inscription : juin 2006 Messages : 6 935 ![]() |
Si le fond était blanc au lieu de noir, ça marcherait plus trop ? (j'ai pas tout suivi)
__________________
Je ne répondrai à aucune question technique en privé |
|
|
00
|
|
|
#20 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 815 ![]() |
Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com