Bonjour,
J'essaye de créer un algorithme de snake sous matlab, très simple dans un premier temps : je voudrais qu'il fonctionne sur une image binarisée avec seulement quelques pixels (blancs par ex) representant une quelconque forme.
J'utilise 3 énergies : celle de courbure, de continuité et du gradient.Le but est que je puisse bien comprendre le fonctionnement pour ensuite venir rajouter d'autre caractéristiques propres á mon probleme actuel.
Malgrès les différents sujets sur ce forum et mes recherches sur le net, il y a un point que je n'arrive pas á comprendre, il concerne le gradient. En effet, j'ai vu plusieurs démonstration sur le net ou le snake, initialisé autour de la forme (mais dans une zone ou les pixels ont tous meme valeurs, noirs ou blancs) se déplace naturellement vers la forme.
Or, si j'ai bien compris, l'énergie qui influe sur le déplacement du snake est celle du gradient (dans mon cas simplifié) : et lorsque les points sont dans des pixels ou il n'y a pas de variation (= partout dans l'image sauf aux bords de ma forme) le gradient est nul, quelque soit les points du voisinage du point testé traités....du coup il ne bouge quasiment pas.
Avec la fonction 'quiver' j'ai affiché les vecteurs gradients correspondants à mon image, et ils sont bien de module=0 partout ou il n'y a pas de variation.
Ma question est donc : est-ce que je peux, avec ce modele simplifié du snake, faire en sorte que ca marche? Ou est-ce qu'il faut que je rajoute au minimum cette énergie, liée à la carte des distances, dans mon modele?
J'ai déjà essayé de faire cette carte des distances, d'utiliser le 'Gradient Vector Flow' avec des fonctions trouvées sur le net, j'obtiens des résultats différents, mais la 'carte des vecteurs' montrent toujours des points (module=0) dans les endroits sans variation.
Voila, un peu d'aide serait la bienvenue !
Partager