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

Développement 2D, 3D et Jeux Discussion :

Calcul volume : region growing ou méthode old school


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut Calcul volume : region growing ou méthode old school
    Bonjour,
    Je modélise une forme à partir d'image stéréoscopique et je voudrai calculer le volume du solide obtenu.
    La première méthode que j'ai utilisé était de parcourir mon tableau de point3D et de découper mon solide en millier de prisme pour ne calculer le volume.

    Le soucis avec cette méthode c'est que mes prisme ne sont pas droits, du coup je suis obligé de couper mon prisme en un prisme droit et un tétraèdre à base trapèze et de calculer le volume des deux.
    J'ai énormément de mal avec cette méthode car elle ne retourne pas de résultats cohérents (je teste d'abord avec des objet dont je connais précisément le volume).

    En continuant mes recherches, je suis tombé sur l'algorithme de l'accroissement de région et je me demandai si ça ne serait pas plus judicieux d'utiliser le region growing plutôt que mon calcul de bourrin (je parle en terme de temps de calcul).

    N'étant pas un expert ni en math ni en region growing, je voulais savori si des gens avaient un avis sur la question. Merci

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut
    Bon, je suppose que personne ici ne peut m'aider et je suppose que c'est parce que je me suis trompé de section.

    Quelqu'un saurait dans quelle section je dois replacer mon post?

    merci

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    Salut.

    Pourquoi utiliser des prismes ? Ça me parrait bine complexe. Pour ma part, je te suggère de choisir un point quelquonque, et de sommer les volumes de pyramides.

    Soit un triangle a, b, c. La référence o.

    Tu fais (ab^ac)*ao

    Tu somme pour chaque triangle et tu appliques un coeff pour avoir le truc dans une unité intelligible (si tu le souhaites, si c'est pour comparer les volumes, pas la peine).

    Si tes triangles sont bien orientés tu as des volumes positifs et négatifs, ce qui te permet d'obtenir le bon résultat, avec un o quelquonque (mais pas avec la même précision) et un forme quelquonque.

    EDIT: simplification.

    EDIT 2: Si tes formes ne sont pas dynamiques, le volume est calculé une bonne fois pour toutes. Donc le temps de calcul, on s'en tape.

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 79
    Points
    79
    Par défaut
    Merci pour ta réponse, mais je trouve ta réponse un peu bizar (peut être que je n'ai pas compris). Pour être sûr, je vais essayer d'expliquer un peu mieux mon problème :

    Je modélise des objets ouverts par rapport à un plan, du coup je cherche le volume compris entre ma surface et le plan.
    Mes formes ne sont absolument pas régulière (donc pas de calcul mathématiques simple) et changent régulièrement (donc gros code de bourrin à éviter de préférence).

    Pour moi, le volume total, c'est la somme des volumes contenus sous chaque triangle. Du coup, c'est le volume du prisme formé par le plan et le triangle, sauf qu'il n'y a pas de formule pour ce genre de prisme (à ma connaissance).

    je dois donc décomposer mes prisme en un prisme droit (on prend le sommet le plus bas et on crée un prisme à partir de sa hauteur et une pyramide à base "trapèze".

    je calcule les deux et j'obtiens mon bonheur.
    Cette technique marche relativement bien puisque j'obtiens des résultat précis, mais j'ai plusieurs milliers de faces (voire plusieurs dizaine de milliers de faces à traiter) et le nombre de calculs pour ma méthode est beaucoup trop élevé.

    Ta méthode si je comprend bien, consiste à créer un point au milieu de mon solide et de le relier à tous les points de ma surface et ensuite calculer les volumes de pyramide obtenue. A priori, ca a l'air plus simple avec une complexité moindre, je vais donc me pencher sur la question.

    j'avais pensé à la croissance de région qui m'aurait permis de garder la précision actuelle tout en diminuant le coup de calcul, mais le soucis c'est que je ne sais pas comment récupérer la couleur d'un pixel donné dans l'espace avec java3D.

    Mais merci pour ton aide.

  5. #5
    Membre confirmé

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Points : 527
    Points
    527
    Par défaut
    La formule de dedalnix fonctionne tout à fait pour un objet fermé et topologiquement correct, quel que soit l'origine choisie (prendre un point quelconque de l'objet aboutira à une précision correcte si l'étendue de l'objet n'est pas pathologique). En revanche elle ne s'applique pas aux surfaces ouvertes (cela n'aurait pas de sens: l'influence du choix de l'origine s'élimine pour un volume fermé, mais pas pour une surface ouverte).

    La proposition alternative de ryu20 n'est pas exacte quand la surface ouverte a des "plis". Par ailleurs, la décomposition entre prisme et tétraèdre n'est pas utile: le simple calcul de pyramide à base triangulaire est exact à un facteur 6 près.

    Un petit mélange des deux devrait donc résoudre le problème: somme sur les triangles des produits scalaires entre le vecteur (barycentre du triangle - barycentre projeté sur le plan) et le vecteur (produit vectoriel de deux arêtes du triangle considéré). Ne pas oublier de diviser par 6. Attention à l'orientation des triangles: garder la même convention dans toute la surface, car le signe du produit vectoriel des arêtes d'un triangle dépend de son orientation.

    Il y a des simplifications possibles si les triangles sont tous jointifs et respectent certaines propriétés topologiques (pas de jonction mi-arête) en faisant la distinction entre les arêtes de bord et les autres, mais je recommande plutôt la robustesse de ce calcul brut, pour s'éviter de faire un contrôle systématique qui serait à coup sûr plus couteux que ce qu'il pourrait économiser. Cependant, selon votre méthode de construction de la surface, vous avez peut-être des garanties topologiques fortes qui pourraient être mises à profit.
    "Maybe C++0x will inspire people to write tutorials emphasizing simple use, rather than just papers showing off cleverness." - Bjarne Stroustrup
    "Modern C++11 is not your daddy’s C++" - Herb Sutter

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Points : 2 548
    Points
    2 548
    Par défaut
    ac_wingless tu n'as pas besoin du barycentre, n'importe quel point du triangle (et même du plan) fait le même.

    PS: en y réfléchissant, ça doit marcher avec un plan, en choissant comme référence un point du plan et en « signant » les triangles.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. calcul d'une partie de volume reconstruit par une méthode de triangulation
    Par foufouta dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 06/05/2008, 21h55
  2. algo region growing 3d
    Par Battosaiii dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 10/07/2006, 18h23
  3. Conseils pour re-développer une application "old school"
    Par delphi5user dans le forum Delphi
    Réponses: 1
    Dernier message: 10/07/2006, 17h53
  4. [old-school] Les disquettes 5 pouces ¼...
    Par MasterOfChakhaL dans le forum Composants
    Réponses: 9
    Dernier message: 09/01/2006, 12h40
  5. Réponses: 4
    Dernier message: 28/09/2005, 09h19

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