IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[image] Snake (contour actif)


Sujet :

Contribuez

  1. #41
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par b_reda31 Voir le message
    La seconde dérivée a t elle un rapport avec la variation de la tangente ou quelque chose du genre?j'avoue avoir oublié quelques notions fondamentales en analyse.
    oui c'est ca.

    v'(s) représente la variation des points de la courbe (abcisse curviligne) => un vecteur tangeant au déplacement s.

    La courbure représente géometriquement la variation de ce vecteur tangeant v'(s) par rapport au déplacement s, donc c'est d(v'(s))/ds = v"(s)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  2. #42
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Citation Envoyé par pseudocode Voir le message

    v'(s) représente la variation des points de la courbe (abcisse curviligne) => un vecteur tangeant au déplacement s.

    La courbure représente géometriquement la variation de ce vecteur tangeant v'(s) par rapport au déplacement s, donc c'est d(v'(s))/ds = v"(s)
    Merci pour ces précisions!
    « 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!!»

  3. #43
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Bonjour,
    En essayant de faire un résumé de cette méthode (Snake), je suis tombé sur un gros problème concernant toujours l’énergie de courbure.

    Dans le schéma suivant j’illustre les déplacements possibles du point P4 de coordonnées (5,1), en considérant seulement l’énergie de Courbure. L’origine est en bas à gauche.







    En appliquant les différences finies pour la seconde dérivée ( au carré), l’énergie de courbure s’exprimera par :

    ( Xi-1 - 2*Xi + Xi+1 )² + ( Yi-1 - 2* Yi +Yi+1 | )²



    J’ai calculé ces énergies pour tous les voisins de P4 (Ce dernier y compris) avec une fenêtre 3X3, afin de déterminer quel serait le déplacement optimal qui minimiserait l’énergie. Les résultats des calculs sont dans la sous-matrice (Zoom sur P4)

    Hélas je ne comprends vraiment ces résultats :
    Pour les 3 voisins au-dessus de P4, ne devons nous pas obtenir la même valeur d’énergie ?!! car chacun des 3 voisin formera une ligne droite (180°) avec le successeur et prédécesseur (P3 et P5) .
    Par ailleurs je ne comprends pas aussi pourquoi la valeur d’énergie du voisin au-dessous de P4, cette valeur devrai être supérieure à l’énergie de P4 car l’angle va s’accentuer


    La formule de différence finie que j’ai cité est elle correcte ?En ajoutant des valeurs absolues aux différence des x et de cette manière
    (| Xi-1 - Xi | + |Xi+1 – Xi | )² + (| Yi-1 - Yi | + |Yi+1 – Yi | )²
    Cela permettrait de rendre les résultats plus cohérents, mais je ne peux citer cette formule dans mon résumé à moins qu’elle existe.
    « 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!!»

  4. #44
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par b_reda31 Voir le message
    Hélas je ne comprends vraiment ces résultats :
    Pour les 3 voisins au-dessus de P4, ne devons nous pas obtenir la même valeur d’énergie ?!! car chacun des 3 voisin formera une ligne droite (180°) avec le successeur et prédécesseur (P3 et P5) .
    Le calcul de la dérivée seconde prend en compte la variation en position (angle entre les vecteurs) mais aussi la variation en grandeur (norme des vecteurs). La norme de la dérivée seconde dépend donc de ces 2 facteurs.

    C'est donc normal que le point au dessus de P4 soit le meilleur car a la fois:
    - il diminue l'angle entre les vecteurs
    - il maintient le ratio (grandeur a gauche)/(grandeur a droite)

    Par ailleurs je ne comprends pas aussi pourquoi la valeur d’énergie du voisin au-dessous de P4, cette valeur devrai être supérieure à l’énergie de P4 car l’angle va s’accentuer
    Oui elle devrait.

    Ce point a pour energie 16 et pas 4:

    E.x = (0 - 2*5 + 10)² = 0
    E.y = (2 - 2*0 + 2)² = 16
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #45
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Le calcul de la dérivée seconde prend en compte la variation en position (angle entre les vecteurs) mais aussi la variation en grandeur (norme des vecteurs). La norme de la dérivée seconde dépend donc de ces 2 facteurs.

    C'est donc normal que le point au dessus de P4 soit le meilleur car a la fois:
    - il diminue l'angle entre les vecteurs
    - il maintient le ratio (grandeur a gauche)/(grandeur a droite)
    Encore merci à vous PseudoCode !

    Ce point a pour energie 16 et pas 4:

    E.x = (0 - 2*5 + 10)² = 0
    E.y = (2 - 2*0 + 2)² = 16
    Je me suis bien gourré en calculant les énergies de la dernière ligne,Maintenant les résultats concordent très bien avec les explications que vous m'avez donnée

    « 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!!»

  6. #46
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Bonjour,J'ai une petite question concernant la normalisation des énergies

    Citation Envoyé par pseudocode Voir le message
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // normalize energy matrix
    private void normalize(double[][] array3x3) {
        double sum=0;
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                sum+=Math.abs(array3x3[i][j]);
     
        if (sum==0) return;
     
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                array3x3[i][j]/=sum;
    }
    Cette normalisation sert à rendre toutes les valeur des trois énergies dans l'intervalle [ 0 , 1 ],et cela afin de ne pas favoriser une énergie par rapport à une autre.Est ce bien cela?
    Si oui,est ce que ça reviendrait au même de diviser chaque sous-matrice d'énergie par sa plus grande valeur? Bien entendu les valeur ne seront pas les mêmes mais les "proportions" entre énergies seront conservées.
    « 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!!»

  7. #47
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par b_reda31 Voir le message
    Cette normalisation sert à rendre toutes les valeur des trois énergies dans l'intervalle [ 0 , 1 ],et cela afin de ne pas favoriser une énergie par rapport à une autre.Est ce bien cela?
    oui, c'est cela.

    Si oui,est ce que ça reviendrait au même de diviser chaque sous-matrice d'énergie par sa plus grande valeur?
    Heu... en théorie oui, on peut utiliser n'importe quelle mesure.

    Dans ton cas, ca voudrait dire utiliser la distance Linfinie = max(abs(x)). Je n'ai jamais testé.

    Dans mon code j'utilise la distance L1 = sum(abs(x))
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #48
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Bonjour,j'ai encore une toute petite question
    Je suis conscient d'en avoir trop poser ,c'est juste que j'essaie de décortiquer cette algorithme et je ne veux pas que quelque chose m'echappe.C'est important pour moi.
    Ma question concerne le mécanisme d'auto-adaptation et plus précisément la suppressions des points lors d'un rapprochement entre deux point du snake.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    private void removeOverlappingPoints(int minlen) {
    	// for each point of the snake
    	for(int i=0;i<snake.size();i++) {
    		Point cur = snake.get(i);
     
    		// check the other points (right half)
    		for(int di=1+snake.size()/2;di>0;di--) {
    			Point end  = snake.get((i+di)%snake.size());
    			double dist = distance2D(cur,end);
     
    			// if the two points are to close...
    			if ( dist>minlen ) continue;
     
    			// ... cut the "loop" part og the snake
    			for(int k=0;k<di;k++) snake.remove( (i+1) %snake.size() );
    			break;
    		}
    	}
    }

    Cette procédure consiste à vérifier pour chaque point du Snake P la distance entre celui ci et l'ensemble des points qui le succèdent...
    Je ne comprends pas pourquoi ces distances ont été calculer seulement pour la moitié des successeurs ?
    Pourquoi ne pas calculer tous les successeur jusqu'a atteindre le premier noeud du Snake.càd pour un point Pj calculer la distance entre Pj et :
    Pj+1 , Pj+2,...,Pnbpoint,P1
    « 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!!»

  9. #49
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par b_reda31 Voir le message
    Cette procédure consiste à vérifier pour chaque point du Snake P la distance entre celui ci et l'ensemble des points qui le succèdent...
    Je ne comprends pas pourquoi ces distances ont été calculer seulement pour la moitié des successeurs ?
    Comme la mesure de distance est commutative, on aura L(Pi,Pj) = L(Pj,Pi), pout tout i,j. Donc inutile de mesurer 2 fois cette distance.

    Pour cela, il suffit d'imposer de mesurer seulement la distance (Pi,Pj) avec i < j (ou l'inverse) => en terme de code, il suffit de faire commencer la 2nde boucle APRÈS le point courant.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #50
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Pour cela, il suffit d'imposer de mesurer seulement la distance (Pi,Pj) avec i < j (ou l'inverse) => en terme de code, il suffit de faire commencer la 2nde boucle APRÈS le point courant.
    Mon problème se situait au niveau du nombre n'itérations de la seconde boucle.Elle est répétée NbPoint/2 fois tel que NbPoint représente le nombre de point du Snake.
    Je pensais que de cette manière quelques distances ne seront pas calculées,mais comme vous l'avez dit,la fonction de distance étant commutative,on peut etre sur qu'en se fixant qu'à la moitié des points successeurs toutes les distances possible seront calculées.
    Merci PseudoCode.

    Bonjour.
    Je pensais que l'énergie d'uniformité gérai la tension (l'élasticité) du contour afin de provoquer une rétraction,Or ce n'est pas le cas; cette énergie gère seulement l'équidistance entre les points du Snake.En quoi cela peut influer sur la forme du Snake? En d'autres terme je dirais que contrairement aux autres énergie (Curvature et Externe) je ne vois pas l'influence de l'énergie d'uniformité sur la déformation du Snake.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private double f_uniformity(Point prev, Point next, Point p) {
     
    	// length of previous segment
    	double un = distance2D(prev, p);
     
    	// mesure of uniformity
    	double avg = snakelength/snake.size();
    	double dun = Math.abs(un-avg);
     
    	// elasticity energy
    	return dun*dun;
    }
    « 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!!»

  11. #51
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par b_reda31 Voir le message
    En d'autres terme je dirais que contrairement aux autres énergie (Curvature et Externe) je ne vois pas l'influence de l'énergie d'uniformité sur la déformation du Snake.
    Cette energie empeche que les points du snake s'agglutinent autour d'un meme point de fort gradient, et assure ainsi que les points soient répartis sur tout le périmètre du snake.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #52
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Bonjour,
    Merci Merci et Merci PseudoCode Pour toute l'aide que vous m'avez apporté au sujet des contours actifs.
    Comme je voulais déjà dis,c'est (les contours actifs) mon thème de fin d'étude et sans votre aide,je ne sais pas si j'aurai pu autant avancer...ou plutôt je ne pense pas.

    En ce moment je suis entrain de me préparer pour ma soutenance,j'essaie d'imaginer toutes les questions que pourront me poser les membres du jury,et ça me fais stressé ,mais bon,grâce à vous je maitrise relativement bien ce que je vais exposer.

    Il y a une question qui est susceptible de m'être poser,cela concerne la forme du contour initial,pourquoi un cercle?
    La réponse qui me vient à la tête est la suivante:
    Puisque le processus de déformation consiste à minimiser l'énergie,la forme de cercle pour le contours initiale a été choisi car un cercle dispose d'une énergie interne minimale (pas de point anguleux) ce qui réduira le nombre d'itération lors du processus de déformation.
    J'ajouterai aussi qu'avec une autre forme (rectangle par ex) de contours initial le résultat peut être le même mais la convergence vers l'objet d'intérêt se fera avec un nombre plus élevé d'itération.


    Que pensez vous de cette réponse?
    « 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!!»

  13. #53
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par b_reda31 Voir le message
    Puisque le processus de déformation consiste à minimiser l'énergie,la forme de cercle pour le contours initiale a été choisi car un cercle dispose d'une énergie interne minimale (pas de point anguleux) ce qui réduira le nombre d'itération lors du processus de déformation.

    Que pensez vous de cette réponse?
    Hum... Je ne suis pas bien sûr que le "nombre d'itérations" soit une réponse valable.

    C'est plutôt que l'algo du snake résout l'équation énergétique itérativement avec un "schéma explicite" (google). Ce genre de résolution est très sensible aux brusques changements, ce qui implique:

    1. de prendre un "pas" de résolution très petit (= le pixel, voir moins)
    2. d'eviter les brusques changements de valeurs dans les énergies

    C'est le point n°2 qui fait préferer le cercle car, comme tu l'as dit, les delta des energies internes autour d'un voisinage sont faibles (le cercle etant une solution de l'equation sans contraintes externes).

    L'idéal etant aussi de limiter les changements de valeurs des energies externes, par exemple en prenant une forme de départ qui "ressemble" à la forme finale.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  14. #54
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Citation Envoyé par pseudocode Voir le message

    L'idéal etant aussi de limiter les changements de valeurs des energies externes, par exemple en prenant une forme de départ qui "ressemble" à la forme finale.
    J'avais penser à une solution de ce genre,où l'utilisateur peut initialiser (dessiner) un contour manuellement autour de l'objet,ça serait l'idéal comme vous dites.J'essaierai d'ajouter une option "Initialisation avancée" dans mon application .
    Merci encore
    « 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!!»

  15. #55
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Bonjour,
    Citation Envoyé par imlaoj Voir le message
    Les méthodes existantes sont normalement pour une image avec le fond uniforme.
    Non pas forcement,le fond peut contenir une texture,il suffit de bien ajuster la valeur du seuil pour obtenir de bons résultats.
    Voici un exemple de segmentation d'un triangle mis sur un fond avec une texture.
    L'image en entrée a été lissée avec le filtre Median.



    bien entendu si l'image contient plusieurs objets,le contour initial doit être le plus proche possible de l'objet à segmenter,afin de ne pas être attiré vers d'autres contours non significatifs,ce qui donne lieu à une mauvais déformation.
    Grâce à l’énergie externe qu’a proposé PseudoCode pour cette contribution,il devient aussi possible d'initialiser le contour à l'intérieur de l’objet, dans ce cas, au lieu de se rétracter,le contour se gonflera pour prendre la forme de l’objet.
    « 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!!»

  16. #56
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 3
    Points : 6
    Points
    6
    Par défaut Contour actif
    Bonjour,
    J'ai testé ce code de contour actif en java.Il ya des erreurs est ce que vous pouvez me donner les importations?

    Encore je trouve un problème d'appliquer ce code a mon image.
    ou je peux entrer mon image dans ce code.
    merci

  17. #57
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par mouhatouka Voir le message
    Bonjour,
    J'ai testé ce code de contour actif en java.Il ya des erreurs est ce que vous pouvez me donner les importations?
    Les import sont les paquets standard du JRE. Dans mon cas, ca fait:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import java.awt.Point;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;

    Encore je trouve un problème d'appliquer ce code a mon image.
    ou je peux entrer mon image dans ce code.
    merci
    Ce code ne contient que la partie qui concerne l'algorithme Snake. Tout ce qui concerne l'importation des images, le calcul du flux d'energie et l'interface graphique n'est pas fourni.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  18. #58
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut CENTRE DE CONTOUR ACTIF
    Bonjour,
    j'ai testé votre code il marche bien.Mais je veux detecter centre de gravité de ce contour(donc centre de l'image) comment j peux acceder au point ou comment fait la methode de calcul.
    merci d'avance

  19. #59
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Bonjour,
    Pour ma part j'ai calculé le centre de gravité de cette manière :

    Xg = 1/Nbpoints * Somme(Xi);
    Yg = 1/Nbpoint * Somme(Yi);

    ça revient donc à calculer la moyenne des X et la moyenne des Y.
    En java ça doit être quelque chose comme ça :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int Xg,Yg;
    Xg=0;Yg=0;
    for(int i=0;i<snake.size();i++) {
     
    Point cur   = snake.get(i);
    Xg=Xg+cur.x;
    Yg=Yg+cur.y;
     
    	}
    Xg=Xg/snake.size(); //Je crois qu'il faut faire une conversion en int ici.
    Yg=Yg/snake.size();
    « 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!!»

  20. #60
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Contour actif
    bonjour,
    merci pour votre repense pour centre de gravité il marche bien.
    j'ai un petit probleme concernant contour,si j'ai plus qu'un objet dans l'image le contour detecte tous les objets.
    comment je peux faire pour l'adapter a un seul objet de l'image.
    merci d'avance

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/09/2012, 08h07
  2. Réponses: 1
    Dernier message: 06/05/2011, 16h16
  3. Snake : contours actifs
    Par gilsub dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 24/04/2011, 13h15
  4. [Débutant] Snake (contour actif) pour les images
    Par ikrame dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/01/2011, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo