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 :

[java] Carte des distances (Chamfer)


Sujet :

Contribuez

  1. #41
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    par symétrie verticale + horizontale + diagonale, on obtient la totalité du masque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     1| 1| 1
    --+--+--
     1|  | 1 
    --+--+--
     1| 1| 1
    [/QUOTE]

    Mais il n'y a aucune méthode dans le code qui montre qu'on fait par symétrie, vu que vous définissez une partie du masque et après vous utilisez toutes les valeurs

  2. #42
    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 hbloom Voir le message
    Merci pour votre réponse !

    J'ai d'autres questions s'il vous plait, quand par exemple on parcoure l'image et on tombe sur output[5][6] = 0 ( donc sur un point de l'objet ) on a donc output [5+4][6+3]= 0+4 ? pour le masque chamfer 3
    Non. On aura
    output[5-1][6-1] = 0+4  // Nord-Ouest
    output[5  ][6-1] = 0+3  // Nord
    output[5+1][6-1] = 0+4  // Nord-Est
    output[5+1][6  ] = 0+3  // Est
    output[5+1][6+1] = 0+4  // Sud-Est
    output[5  ][6+1] = 0+3  // Sud
    output[5-1][6+1] = 0+4  // Sud-Ouest
         03 04 05 06 07
        +--------------+
     01 |  |  |  |  |  |
        |--------------|
     05 |  | 4| 3| 4|  |
        |--------------|
     06 |  | 3| 0| 3|  |
        |--------------|
     07 |  | 4| 3| 4|  |
        |--------------|
     08 |  |  |  |  |  |
        +--------------+

    et pk les conditions (dy!=0 et dx!=dy) ?
    (...)
    Mais il n'y a aucune méthode dans le code qui montre qu'on fait par symétrie, vu que vous définissez une partie du masque et après vous utilisez toutes les valeurs
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    testAndSet(output, x+dx, y+dy, v+dt);				// P1 (donné dans le masque) -> zone 0-45°
    if (dy!=0) testAndSet(output, x-dx, y+dy, v+dt);		// P2, symétrique vertical de P1 -> zone 135-180°
    if (dx!=dy) {
    	testAndSet(output, x+dy, y+dx, v+dt);			// P3, symétrique diagonal de P1 -> zone 45-90°
    	if (dy!=0) testAndSet(output, x-dy, y+dx, v+dt);	// P4, symétrique vertical de P3 -> zone 90-135°
    }

    Les conditions sont la pour écarter les points qui sont exactement sur l'axe de symétrie (et donc qui ne bougent pas lors de la symétrie).

    Idem pour la boucle "backward", qui positionne les points dans les zones 180-360°.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #43
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Juin 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2013
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci bcp !!

  4. #44
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    c'est le tableau utilisé pour "marquer" les pixels de référence.

    Si tu veux que le pixel (a,b) de ton image soit un pixel de référence distance=0), alors tu mets à 'true" la valeur du tableau: input[a][b]=true;
    Svp j'ai besoin de savoir comment remplir la matrice boolean que je dois passé en paramètre mais je ne sais po c quoi exactement un pixel de référence distance=0 merci de me répondre.

  5. #45
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Les pixels à true sont les pixels de référence, donc les pixels à partir desquels ont calcule la carte de distance. Les pixels à true ont donc une distance de 0.
    Donc tout les pixels à false auront une valeur positive et représentent les parties dont tu souhaites connaitre la distance par rapport aux pixels de référence.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #46
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    ToTo13 : 1er des choses merci de me repondre c'est gentille de votre par

    est ce que les pixels à true se sont ceux qui entoure l'objet de l'image autre dire les points d'initial de snake et pour les autre pixels false on leur donnent quoi comme valeur positive .

  7. #47
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    - Dans cet exemple, TOUT les points de la forme sont à True et ont donc une distance nulle.

    - Ce n'est pas un snake, mais une carte de distance

    - Les pixels à false auront pour valeur positive leur distance par rapport au pixel de référence le plus proche.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  8. #48
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Bonjour Pseudocode,

    Je viens déterrer un vieux sujet mais comme je coince depuis pas mal de temps je me permets de te poser une question concernant le point sur lequel je butte.

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(int k=0;k<chamfer.length;k++) {
    					int dx = chamfer[k][0];
    					int dy = chamfer[k][1];
    					int dt = chamfer[k][2];
     
    					testAndSet(output, x+dx, y+dy, v+dt);

    J'essaie de retranscrire ton code en Delphi ou Realbasic et si je traduis comme je lis ton code dx et dy prennent la valeur 3 ou 4 pour un chamfer3 par exemple.
    dx et dy ne doivent valoir que +1 ou -1 il me semble sinon on sortirait des limites de l'image mais comment traduire cela alors?

    Merci.

    BB

  9. #49
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Bonjour,

    je ne suis pas pseudocode mais je me permets de répondre

    Les valeurs de dx et dy correspondent aux décalages par rapport au pixel central. Avec l'implémentation donnée plus haut, on n'a pas besoin d'utiliser des valeurs négatives (on test x+dx ainsi que x-dx, pareil pour y et dy).

    Pour éviter de considérer les pixels en dehors de l'image, il suffit de tester que les nouvelles coordonnées (x+dx, y+dy) sont bien dans les bornes de l'image (cf le code de la fonction testAndSet aux lignes 59 et 60, dans lesquelles x et y correspondent au pixel après décalage).

    Les décalages en x et y peuvent avoir des valeurs plus grandes que 1 ! C'est d'ailleurs le cas pour les masques chamfer5, chamfer7 ou chamfer13.

    En espérant que cela clarifie ?

    A+

  10. #50
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Bonjour et merci Kangourou,

    En effet je me sens un peu ridicule d'avoir posé cette question car en fait je sortais des limites du tableau.
    En transposant ce code dans un autre langage j'avais négligé l'échange des bornes entre les fonctions.


    Ceci dit n'ayant pas de fichier de résultats pour comparaison je ne sais pas si le résultat que j'obtiens est correct ou pas.
    J'espérais obtenir un beau squelette bien distinct.
    Ce que j'obtiens me semble bien fade comme contraste.

    Donc je n'ai pas insisté et me suis fait ma propre "gomme" qui squelettise toute épaisseur sans barbules.
    M'enfin je reste sur ma faim, j'aur

  11. #51
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 246
    Points : 67
    Points
    67
    Par défaut
    Oups erreur de manip sûrement.

    Donc je disais j'aurais aimé savoir si mon code était correct en comparant mon image à celle issue de Java ici.

    M'enfin merci je te remercie infiniment pour avoir daigné répondre à ma question.

    Cordialement.

    BB

  12. #52
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Bonjour,

    hmm, le code donné en exemple sert à calculer une carte des distances. Pour calculer des squelettes, il faut rajouter quelques opérations, et le résultat est beaucoup plus dépendant de l'ordre dans lequel on applique les opérations. Je te conseille d'ouvrir un nouveau topic si tu as des questions plus particulières à ce sujet.

  13. #53
    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 BBouille Voir le message
    Oups erreur de manip sûrement.

    Donc je disais j'aurais aimé savoir si mon code était correct en comparant mon image à celle issue de Java ici.

    BB
    Bonsoir,
    un petit moyen de vérifier votre résultat :
    mettez en entrée une image d'un point blanc au coin supérieur droit (par exemple) de l'image
    En résultat vous devriez avoir, un sorte de dégradé circulaire de niveau sombre vers des niveau clair en allant vers le coins inférieur gauche.

    Pensez aussi à normaliser les valeurs de l'image de sortie dans un intervalle de niveau de gris acceptable (par ex de 0 à 255) ; Selon la taille de l'image en entrée, les distances peuvent avoir des valeurs très importantes. Vous pouvez ainsi de mauvaises surprises lors de l'affichage.
    « 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!!»

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/07/2017, 10h47
  2. [Java] Fourni des parametres par defaut a la JVM?
    Par Hikage dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2006, 20h42
  3. [SOAP] [java] Manipuler des réponses
    Par eXiaNazaire dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 06/12/2005, 14h24
  4. JAVA - Passer des Objects à des méthodes
    Par canou94 dans le forum CORBA
    Réponses: 2
    Dernier message: 15/11/2005, 22h39
  5. [Java] Générer des rapports à la crystal reports
    Par Vessaz dans le forum Autres outils décisionnels
    Réponses: 4
    Dernier message: 11/10/2004, 19h07

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