|
Publicité ' | ||||||||||||||||||||||||
|
|
#101 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 819 ![]() |
Citation:
Pour ma part, j'ai pris des formules d'énergies assez simplistes dans mon exemple. Libre a chacun de les améliorer.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#102 |
|
Futur Membre du Club
![]() Inscription : octobre 2007 Messages : 51 ![]() |
encore une toute dernière questions sur ce code...
Sur quelle théorie s'appuie le calcule de la courbure ? je n'arrive pas bien à saisir le sens des calculs.. Merci ! |
|
|
00
|
|
|
#103 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 819 ![]() |
Citation:
![]() Ca ressemble à une dérivée seconde discrète, avec des points de sampling non uniforme. http://fr.wikipedia.org/wiki/Dérivée_seconde_discrète
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#104 |
|
Futur Membre du Club
![]() Inscription : octobre 2007 Messages : 51 ![]() |
hehe merci !
Sinon je me disait aussi que l'énergie de courbure pouvait être approchée par la distance que fait le point par rapport au barycentre des points de son voisinage (donc le milieu du segment Pprev et Pnext dans le cas de la 2D). Mais il reste quelque chose qui me chiffonne dans cette faàon d'exprimer l'énergie de courbure : si le point P est situé sur le segment, mais pas au milieu, l'énergie de courbure voudra le faire déplacer vers le milieu du segment, alors que sa courbure sera nulle. Donc si elle est calculée comme ça, son effet accentuera l'effet de l'énergie de continuité, ce que je ne veux pas vraiment. |
|
|
00
|
|
|
#105 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 819 ![]() |
Citation:
Au départ, si je me souviens bien, j'avais fait une énergie basée sur l'angle entre les 2 segments (enfin son cosinus, via le produit scalaire). Je ne sais pas trop pourquoi j'ai changé d'idée. Sinon, il reste le 'vrai' calcul de la courbure : http://en.wikipedia.org/wiki/Curvatu...al_expressions
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#106 |
|
Futur Membre du Club
![]() Inscription : octobre 2007 Messages : 51 ![]() |
oki thanks !
je penserai a dresser une statue a ton effigie, ton code m'a beaucoup aidé ^^ |
|
|
00
|
|
|
#107 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 819 ![]() |
Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#108 | ||
|
Invité de passage
![]() Inscription : avril 2010 Messages : 2 ![]() |
Bonjour Pseudocode, je n'ai pas compris l'expression suivante qui était située dans la step() de ta contribution. Pourrais tu brievement me l'expliquer?
Code :
Merci d'avance pseudocode PS: Merci pour ta contribution m'a permis de mieux comprendre le fonctionnement des snakes et leurs implémentations. |
||
|
|
00
|
|
|
#109 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 819 ![]() |
Citation:
Vu que "emin" est un type double, je n'ai pas de moyen de dire qu'il est "non initialisé" par défaut. En le forcant à une valeur "infinie", je suis sur que la première comparaison "if (e<emin)" sera vraie, et donc que emin sera initialisée avec la valeur de "e"
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#110 |
|
Invité de passage
![]() Inscription : avril 2010 Messages : 2 ![]() |
Ok, je vois.
Encore merci, pour la spontanéité de tes réponses et pour toutes les explications précedentes.
|
|
|
00
|
|
|
#111 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 43 ![]() |
Bonjour à tous,
J'ai essayé d'adapter cette source pour faire du tracking dans des videos mais je n'y arrive pas. Quelqu'un aurait il une idée? Merci |
|
|
00
|
|
|
#112 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 43 ![]() |
Bonjour Pseudocode,
Est ce que c'est possible de m'expliquer le choix de ces coefs (me donner un lien). // precomputed Uniform cubic B-spline for t=0.5 double c0=0.125/6.0, c1=2.875/6.0, c2=2.875/6.0, c3=0.125/6.0; j'ai vu partout sur le web, que pour une interpolation cubique, on utilise les points eux même pour déterminer ces 4 coefs d'un polynôme de degré 3. Merci |
|
|
00
|
|
|
#113 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 819 ![]() |
Citation:
![]() c0 = [0.5^3 0.5^2 0.5 1].1/6.[-1 3 -3 1] = (0.125*-1 + 0.25*3 + 0.5*-3 + 1)/6 = 0.125/6 c1 = [0.5^3 0.5^2 0.5 1].1/6.[3 -6 0 4] = (0.125*3 + 0.25*-6 + 0.5*0 + 4)/6 = 2.875/6 c2 = [0.5^3 0.5^2 0.5 1].1/6.[-3 3 3 1] = (0.125*-3 + 0.25*3 + 0.5*3 + 1)/6 = 2.875/6 c3 = [0.5^3 0.5^2 0.5 1].1/6.[1 0 0 0] = (0.125*1 + 0.25*0 + 0.5*0 + 0)/6 = 0.125/6
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#114 |
|
Membre à l'essai
![]() Inscription : mai 2008 Messages : 43 ![]() |
Merci,
|
|
|
00
|
|
|
#115 |
|
Membre chevronné
![]() ![]() Ingénieur développement logiciels Inscription : juillet 2004 Messages : 820 ![]() |
Désolé si je re-re-re-déterre cette discussion qui commence à dater un peu, mais il faut bien avouer que parmi l'ensemble de forums et d'articles que j'ai lu sur le sujet, c'est le seul qui m'a permis de comprendre vraiment ce que je fais...
Je cherche à faire de la détection d'objets de la façon suivante : - l'utilisateur dessine un cercle (ou un rectangle ou autre) autour de l'objet - un algorithme à base de contours actifs vient le "coller" à l'objet Mon problème est que les objets peuvent être - relativement "grands" : 200px par 200px environ - plutôt "petits" : 10 pixels par 10 pixels environ Un "grand" objet ne me pose à priori pas de soucis... par contre, pour obtenir un contour intéressant sur un petit objet, il faudrait que l'écart entre les points du snake soit de 1 pixel, voir moins pour que le snake puisse en suivre vraiment le contour. Est-ce que cette contrainte est compatible avec la méthode décrite dans cette discussion ? Comment choisir "intelligemment" le nombre de points initial du snake en fonction de la taille du contour initial entré par l'utilisateur ? Comment choisir "intelligemment" la distance entre ces points (distance à partir de laquelle on ajoute un point) ? Et question subsidiaire : (pour un grand objet) Est-ce qu'il est envisageable de commencer le snake avec des points "écartés" et de réduire cet écart (pour ajouter plus de points) au fur et à mesure des itérations (et donc que l'on se rapproche de l'objet) afin d'avoir un contour "plus fin" ? Merci ! |
|
|
00
|
|
|
#116 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 819 ![]() |
Citation:
Sinon il est tout a fait possible de faire un snake initial avec des points tous les 1 pixels et de les "fusionner" (ou au contraire d'en ajouter) suivant les contractions (dilatations) du snake. C'est d'ailleurs ce que j'ai fait dans mon code.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#117 |
|
Membre expérimenté
![]() |
Bonjour,
Dans le cadre de mes étude, je travaille actuellement sur des volumes cérébraux. Dans certain cas je voudrai isoler une pathologie (tumeur ou kyste) présente dans le volume, je me suis donc tout de suite retourné vers l'algorithme du Snake. J'ai fais quelques recherches sur son application en 3D (Volume), j'ai constaté que dans ce cas le snake est généralement représenté par un maillage... J'avais cependant penser à une autre approche , bien qu'elle soit certainement plus couteuse, elle me serait plus facile à implémenter (malheureusement,je suis un peu limité en temps) : - L'utilisateur se positionne d'abord approximativement sur la coupe où la pathologie est "discernable". - Il initialise le contour (2d) puis lance le processus. - Le contour final (après convergence) serai alors le contour initiale des coupes (suivante et précédente) -je suppose ici que le contour ne doit pas changer brusquement d'une coupe à sa voisine- - arrêter le processus (passage d'une coupe à une autre) à la coupe dont la surface (en pixel) est inférieure à un certain seuil ou après un certain nombre max d'itérations. Avant de me lancer vers cette implémentation, j'aurai aimer avoir vos suggestions. Merci d'avance.
__________________
« 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
|
|
|
#118 |
|
Membre chevronné
![]() ![]() Ingénieur développement logiciels Inscription : juillet 2004 Messages : 820 ![]() |
Je te conseille la bibliotheque "ITK" : fonctionne tres bien, simple à prendre en main si on prend le temps de suivre 2-3 exemples, et il y a les alos dejà tout fait pour extraire un volume 3D a partir de plans de coupe.
http://www.itk.org/ (en plus, c'est LGPL) |
|
|
00
|
|
|
#119 |
|
Membre expérimenté
![]() |
Merci pour cette suggestion et désolé du retard!
Cette biblio a l'air super, cependant je ne suis pas parvenu à l'integrer à C++ Builder, je pense d'ailleurs que cela n'est pas possible. Je vais tenter d'implémenter l'approche que j'avais décrit en vous tenant au courant des résultats...
__________________
« 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
|
|
|
#120 |
|
Membre chevronné
![]() ![]() Ingénieur développement logiciels Inscription : juillet 2004 Messages : 820 ![]() |
Si C++ Builder sait compiler du C++, ce dont je ne doute pas, c'est possible. Suffit de recompiler.
Pour plus d'infos, inscrit-toi à leur mailing-list et poses-y tes questions, y'a des gens très compétents et sympas qui la fréquente. Vu le boulot de déjà fait dans ITK, ce serait dommage de ne pas en profiter |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com