Précédent   Forum du club des développeurs et IT Pro > Autres langages > Algorithmes > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/04/2010, 11h58   #101
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 819
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 819
Points : 16 471
Points : 16 471
Citation:
Envoyé par co2gaz Voir le message
Bonjour pseudocode,
J'ai une petite question concernant cette fonction:

f_uniformity(Point prev, Point next, Point p)

il n'y a que deux points qui sont utilisés. Est ce qu'on peut utiliser les 3 points pour avoir plus de robustesse.
Merci
Bien sur. On peut utiliser toutes les énergies que l'on souhaite. C'est tout l'avantage du Snake.

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.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2010, 18h35   #102
galadorn
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 51
Points : 17
Points : 17
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 !
galadorn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2010, 19h34   #103
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 819
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 819
Points : 16 471
Points : 16 471
Citation:
Envoyé par galadorn Voir le message
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 !
Oui, j'avoue que c'est assez étrange comme formule. Je ne me souviens plus trop comment j'en suis arrivé là, mais ca ne doit pas être très orthodoxe.

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.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2010, 19h43   #104
galadorn
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 51
Points : 17
Points : 17
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.
galadorn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2010, 19h57   #105
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 819
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 819
Points : 16 471
Points : 16 471
Citation:
Envoyé par galadorn Voir le message
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.
Oui, c'est vrai. Cette énergie n'est pas vraiment de la pure "courbure".

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.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2010, 20h38   #106
galadorn
Futur Membre du Club
 
Inscription : octobre 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 51
Points : 17
Points : 17
oki thanks !
je penserai a dresser une statue a ton effigie, ton code m'a beaucoup aidé ^^
galadorn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2010, 20h58   #107
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 819
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 819
Points : 16 471
Points : 16 471
Citation:
Envoyé par galadorn Voir le message
oki thanks !
je penserai a dresser une statue a ton effigie, ton code m'a beaucoup aidé ^^
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2010, 15h19   #108
polasky
Invité de passage
 
Inscription : avril 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 2
Points : 2
Points : 2
Par défaut Petite question

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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
double emin = Double.MAX_VALUE, e=0;
		int x=0,y=0;
		for(int dy=-1;dy<=1;dy++) {
			for(int dx=-1;dx<=1;dx++) {
				e = 0;
				e+= alpha * e_uniformity[1+dx][1+dy]; // internal energy
				e+= beta  * e_curvature[1+dx][1+dy];  // internal energy
				e+= gamma * e_flow[1+dx][1+dy];       // external energy
				e+= delta * e_inertia[1+dx][1+dy];    // external energy
 
				if (e<emin) { emin=e; x=cur.x+dx; y=cur.y+dy; }
			}
		}
J'ai lu toutes la discussion et j'ai pas trouvé, ou c'est que j'ai des problèmes en java .
Merci d'avance pseudocode .
PS: Merci pour ta contribution m'a permis de mieux comprendre le fonctionnement des snakes et leurs implémentations.
polasky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2010, 15h41   #109
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 819
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 819
Points : 16 471
Points : 16 471
Citation:
Envoyé par polasky Voir le message
Désolé, j'ai mal formulé ma question. Je voulais parler dans le code, à quoi correspond Double.MAX_VALUE?? Sinon tout est clair, j'ai compris les principes en majeure partie grâce à cette discussion.

PS: Après cela je vais effacer mes posts pour ne pas polluer la discussion.
Ah. C'est juste une astuce a deux balles pour initialiser la valeur de "emin" au premier passage dans la boucle.

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.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2010, 15h41   #110
polasky
Invité de passage
 
Inscription : avril 2010
Messages : 2
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 2
Points : 2
Points : 2
Ok, je vois.
Encore merci, pour la spontanéité de tes réponses et pour toutes les explications précedentes.
polasky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2010, 11h45   #111
co2gaz
Membre à l'essai
 
Inscription : mai 2008
Messages : 43
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2008
Messages : 43
Points : 23
Points : 23
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
co2gaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2010, 17h26   #112
co2gaz
Membre à l'essai
 
Inscription : mai 2008
Messages : 43
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2008
Messages : 43
Points : 23
Points : 23
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
co2gaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2010, 18h39   #113
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 819
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 819
Points : 16 471
Points : 16 471
Citation:
Envoyé par co2gaz Voir le message
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
Comme indiqué, ce sont les coefficients d'une B-splines cubique uniforme pour t=0.5



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.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2010, 10h15   #114
co2gaz
Membre à l'essai
 
Inscription : mai 2008
Messages : 43
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2008
Messages : 43
Points : 23
Points : 23
Merci,
co2gaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2010, 22h36   #115
buzzkaido
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 820
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 820
Points : 687
Points : 687
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 !
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2010, 22h53   #116
pseudocode
Rédacteur/Modérateur
 
Avatar de pseudocode
 
Homme Xavier Philippeau
Architecte système
Inscription : décembre 2006
Messages : 9 819
Détails du profil
Informations personnelles :
Nom : Homme Xavier Philippeau
Âge : 40
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Architecte système
Secteur : Industrie

Informations forums :
Inscription : décembre 2006
Messages : 9 819
Points : 16 471
Points : 16 471
Citation:
Envoyé par buzzkaido Voir le message
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 ?
A priori oui. Quoique des methodes comme les Level-Set seraient peut-être mieux adaptées, en particulier s'il y a plusieurs objets dans la zone, ou s'ils comportent des trous.

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.
pseudocode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2010, 02h00   #117
b_reda31
Membre expérimenté
 
Avatar de b_reda31
 
Homme Réda Bentata
Étudiant
Inscription : avril 2007
Messages : 543
Détails du profil
Informations personnelles :
Nom : Homme Réda Bentata
Âge : 29
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 543
Points : 577
Points : 577
Envoyer un message via MSN à b_reda31
Par défaut application de l'algorithme dans un volume

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!!»
b_reda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2010, 08h53   #118
buzzkaido
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 820
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 820
Points : 687
Points : 687
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)
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2010, 02h20   #119
b_reda31
Membre expérimenté
 
Avatar de b_reda31
 
Homme Réda Bentata
Étudiant
Inscription : avril 2007
Messages : 543
Détails du profil
Informations personnelles :
Nom : Homme Réda Bentata
Âge : 29
Localisation : Algérie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 543
Points : 577
Points : 577
Envoyer un message via MSN à b_reda31
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!!»
b_reda31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2010, 08h50   #120
buzzkaido
Membre chevronné
 
Avatar de buzzkaido
 
Homme
Ingénieur développement logiciels
Inscription : juillet 2004
Messages : 820
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2004
Messages : 820
Points : 687
Points : 687
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
buzzkaido est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h08.


 
 
 
 
Partenaires

Hébergement Web