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

Algorithmes et structures de données Discussion :

Simulation radiographique


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut Simulation radiographique
    Bonjour,

    J'ai implémenté des algorithmes de simulation radiographique à partir d'images scanner que j'ai segmenté: voici un exemple de hanche segmentée:



    Enuite je fais une simulation radio: je prends ma boîte englobante du modèle segmenté que je plonge dans un milieu 3D (entre une source sensée représenter la source des rayons X et un écran de prjection):



    On obtient ce genre d'images:



    Comme on peut le voir il y a des artefacts de calculs (lignes horizontales) qui apparaissent. J'utilise la technique du lancer de rayons avec une interpolation trilinéaire ou tricubique. le problème arrive pour les 2 types d'interpolation.

    Où est mon problème ?? Une idée ?

    Note : j'ai bien pensé à adpater le pas d'échantilonnage en fonction de l'angle que le rayon fait avec l'horizontale.

  2. #2
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    Ne serait-ce pas un probleme d'aliasing dut au lancer de rayon, si je me souviens bien, tu peux le resoudre par un surechantillonnage de ton ecran (nombre de rayon par rapport à la resolution souhaitée) et faire un echantillonnage aleatoire (ou stochastique) pour obtenir la resolution souhaitée (c'est une methode classique de rendu vu dans un livre http://llaic3.u-clermont1.fr/~mr/liv...IV.html#partIV)


    ps: tu fais ou ton stage dans un centre de recherche ou dans une entreprise?

  3. #3
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Salut ronan,

    Merci pour ta réponse !
    Pour répondre à ta question je bosse dans un labo en imagerie médicale.

    En ce qui concerne l'aliasing, ça expliquerait effectivement la tête de mon image...
    Mais je comprends pas pourquoi il y a sous-échantillonnage...
    Tu pourrais être plus précis sur la méthode que tu donnes ? Quel type d'achantillonnage aléatoire ? Loi uniforme ? Gaussienne ? Autre ?

    PS : le livre est en vente quelque part ? En accès libre ? Tu bosses au LLaic ?

  4. #4
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    Le livre tu devrais le trouver à peu pres partout, balade toi un peu sur le lien que je t'ai donné, tu trouveras les references (je n'ai pas envie de faire de la pub ).


    ps: non mais j'ai fait mon stage dans une entreprise qui bossait sur ce genre de sujet rendu de volume 3D, spin

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    J'avais entendu parler d'une autre solution à la fac, un peu vicieuse, qui consiste à lancer les rayons "à l'envers" en ne suivant que leur trajet principal (celle conservant le maximum d'énergie), puis une fois arrivé à la "source", il faut relancer le rayon à l'envers en le calculant réellement cette fois-ci (et il peut donc se scinder en plusieurs rayons suivant ce qu'il rencontre).

    C'est une variante d'une technique utilisée pour les réductions/agrandissements généraux d'images (pour chaque point "destination", on cherche le point "source" et non pas le contraire). Il y avait une légère surconsommation de temps CPU, bien sûr : deux fois plus de rayons à lancer, mais le 1er lancer est très simplifié par rapport aux autres. Si ma mémoire est bonne, le surcoût était d'environ +30% de temps de calcul.
    Mais la qualité du résultat est en général excellente : à toi de voir ce qui est le plus important pour toi, vitesse ou rendu.

    L'avantage, c'est que ça consomme souvent beaucoup moins de temps CPU qu'un suréchantillonnage : avec des pixels de 0.7 par exemple, il y a 2 fois plus de rayons, soit +100% de temps CPU en plus.
    Cependant, un suréchantillonnage produit toujours un résultat de meilleure qualité à partir du moment où le nombre de pixels est au moins multiplié par deux (taille des pixels <=0.7).
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Mars 2004
    Messages : 150
    Par défaut
    Comment scannes-tu ?

    Est-ce que tu scannes l'objet et pour chaque point de l'objet tu calcules la position correspondante de l'image, ou est-ce que tu scannes l'image en calculant la trajectoire sur ton objet pour chaque pixel de l'image ?

  7. #7
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Je rejoinds Mac LAK !
    Il faut effectivement lancer les rayons dans les deux sens si tu veux être certain du résultat (et éviter ton truc ).

  8. #8
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Bonjour,

    Est-ce que tu scannes l'objet et pour chaque point de l'objet tu calcules la position correspondante de l'image, ou est-ce que tu scannes l'image en calculant la trajectoire sur ton objet pour chaque pixel de l'image ?
    C'est bien la seconde méthode que j'utilise: la première peut être d'après ce que j'ai vu plus rapide mais j'ai besoin d'un max de précision.

    Cependant, un suréchantillonnage produit toujours un résultat de meilleure qualité à partir du moment où le nombre de pixels est au moins multiplié par deux (taille des pixels <=0.7).
    Bah dans mon cas non ! J'ai essayé le suréchantilonnage mais sans succès ! ça doit donc être autre chose !

    Je sais que c'est pas trop l'endroit, mais je vais donner mon code de simulation (C++): ceci est la méthode qui calcule l'atténuation d'un
    rayon commençant à traverser le volume en Orig, finissant de le traverser en Fin (j'ai calculé l'intersection avec la boîte englobante précédemment); détail important le volume de données est anisotrope (plus petit en z qu'en x et en y : la taille d'un voxel est mm_x*mm_y*mm_z):

    Code : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    double ScannerObject::Witdh_TriLinearInterpolation(FLPT3D Orig, FLPT3D Fin)
    {
     
      double dist_max = sqrt( (Fin[0] - Orig[0])*(Fin[0] - Orig[0]) +
                              (Fin[1] - Orig[1])*(Fin[1] - Orig[1]) +
                              (Fin[2] - Orig[2])*(Fin[2] - Orig[2])   );
     
      Fin [0] /= mm_x;
      Fin [1] /= mm_y;
      Fin [2] /= mm_z;
     
      Orig [0] /= mm_x;
      Orig [1] /= mm_y;
      Orig [2] /= mm_z;
     
     
      FLPT3D V = Fin - Orig;
      V = V.normalize();
     
      // Calcul du pas qui doit s'adapter à l'angle de la droite dirigée selon V
      // On compare par rapport à la droite la plus courte : perpendiculaire à l'image 2D, passant par le milieu de l'image 2D (SOi)
      //                            ->  ---->   ->  ---->
      // Le pas doit être pas = T / V . V_ref/||V . V_ref||
      Vector V_bis(V[0],V[1],V[2]);
      float mags = (float)(V_bis.squared_magnitude() * vect_ref.squared_magnitude());
      float dot =  (float)(dot_product(V_bis, vect_ref));
      float cos_angle = dot/sqrt(mags);
      float pas;
     
      // T = pas d'achantillonnage de la droite de pente nulle et dont le point de projection est le milieu de l'image 2D
      if(cos_angle != 0)
      pas = T/ABS(cos_angle);
      else
      return 0;
     
      float x, y, z;
     
      double current_dist = 0;
      double accu = 0;
     
      while(current_dist < dist_max)
      {
     
       x = (float) (Orig[0] + current_dist*V[0]);
       y = (float) (Orig[1] + current_dist*V[1]);
       z = (float) (Orig[2] + current_dist*V[2]);
     
       accu += ImageTrilinearInterpolation(Data, x, y, z, wx_data, wy_data, wz_data)*pas;
     
       current_dist += pas;
      }
     
     return accu;
    }
    Bordel ça m'énerve je sais pas d'où vient mon problème, et manifestement ça n'est pas qu'un sous-échantillonnage...
    ça viendrait pas de l'anisotropie ???
    Mais là je suis perdu,

    Ah oui l'interpolation trilinéaire normalement fonctionne bien car je l'utilise dans d'autres méthodes qui fonctionnent

  9. #9
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Bah en fait je crois que vous aviez raison !
    J'ai trouvé cet article qui expose le même problème que moi ! Et apparemment il utilise aussi un sur-échantillonnage et tout le bazar...

    Au fait Mak Lak, tu pourrais être plus précis sur ta méthode ? Je comprends pas comment le rayon peut se scinder après ??? Et quand je pars de l'image pour aller à la source je fais quoi exactement ?

  10. #10
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Bon bah voilà c'est résolu !!

    En fait je me suis basé sur l'article dont j'ai donné le lien au dessus pour faire mon anti-aliasing: plutôt que de suréchantillonner (très gourmand en calculs!), j'ai déplacé chaqye échantillon de ma droite d'un vecteur aléatoire suivant une gaussienne 3x1, dont la variance fait la taille du voxel, et de moyenne nulle...

    Et ça marche !!!

    Merci à tous, car je me perdais dans les interprétations du problème, l'aliasing m'a mis sur la voie...

  11. #11
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par mathieu_t
    Bah en fait je crois que vous aviez raison !
    J'ai trouvé cet article qui expose le même problème que moi ! Et apparemment il utilise aussi un sur-échantillonnage et tout le bazar...
    Dommage, le lien est mort... Tu peux reposter une URL correcte, stp ?

    Pour le suréchantillonnage, il faut mesurer la taille de l'artefact de tracé pour trouver la "bonne" valeur : s'il fait 2 pixels de large, par exemple, il faut que la taille de pixel corresponde à une valeur négligeable, comme par exemple 25% au maximum du pixel final... Donc, 8x8 pixels suréchantillonés pour obtenir 1x1 pixel "final", ta taille de pixel est donc de 0.125 au maximum... 64 fois plus de calculs, ça fait mal, je le reconnais.

    Citation Envoyé par mathieu_t
    Au fait Mak Lak, tu pourrais être plus précis sur ta méthode ? Je comprends pas comment le rayon peut se scinder après ??? Et quand je pars de l'image pour aller à la source je fais quoi exactement ?
    En fait, le problème que tu rencontres est lié à la nature discrète du raytracing (c'est pas un soleil ! ;-)).
    Lorsque tu lances un rayon, il peut être "scindé" en fonction de la qualité désirée : le coup le plus classique, c'est le rayon qui traverse de l'eau. Une partie est réfractée (composante principale), mais une partie est réfléchie (composante secondaire). Une autre est également absorbée, mais on va oublier ce point pour l'instant.

    Suivant le niveau de qualité désiré, un rayon se scinde ou pas en deux (ou plus) rayons secondaires : c'était par exemple le niveau de différence principal entre le mode "preview" et le mode "high quality" de raytracers comme POV. En tout cas, quel que soit le cas, il y a un des rayons réfléchis qui contient plus d'énergie que les autres (=plus de couleur, si tu préfères) : c'est lui qu'il faut suivre.

    En gros, ça se résume à faire un mode "preview" en prenant la caméra comme une source lumineuse cohérente (=laser, tous les rayons sont parallèles), et en cherchant à atteindre la/les sources lumineuses de la scène qui deviennent des "caméras".
    Le but est de mémoriser le trajet du rayon principal (=énergie maximale, donc), et de trouver quel est la source lumineuse qui va fournir le plus d'énergie à ce rayon, justement. Ce rayon devra donc être calculé avec le plus grand soin, car la couleur finale du pixel dépendra majoritairement de lui !! Si cette source lumineuse fournit 90% de l'information de couleur, il est logique de "chiader" un peu son calcul...
    Pour les autres sources de lumière, tu peux soit les éliminer du calcul si l'énergie fournie est négligeable, soit les calculer avec plus ou moins de précision en fonction de leur potentiel.

    Dans tous les cas, tu possèdes une information cruciale lors du lancé de rayons en question : tu as déjà tracé le chemin principal lors de la preview, tu vas donc simplement "suivre" ce rayon dans le bon sens ce coup-ci, et uniquement pour calculer l'information de couleur !! ;-)
    L'avantage, c'est que tes calculs tombent forcément "juste", tu n'as plus d'artefacts de tracés comme celui que tu as eu, et tu n'as plus qu'à tenir compte d'éventuels rayons secondaires pour "améliorer" l'image si nécessaire... Sur cette phase d'amélioration, tu peux obtenir de nouveau des artefacts de calcul, mais ils seront nettement atténués, voire invisibles.

    Est-ce que j'ai été suffisamment clair ? Sinon, malgré la résolution de ton problème, n'hésites pas à redemander, OK ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  12. #12
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Pour ce qui est du lien effectivement il n'est plus à jour... Comme il n'y a pas d'autre lien que j'ai trouvé je pourrais le mettre en ligne mais je sais pas si c'est légal tout ça....

    Bon Mak Lak, déjà merci beaucoup de t'intéresser à la question;
    Effectivement j'ai partiellement résolu mon problème mais je suis pas contre d'autres idées car la qualité que j'obtiens pourrait être améliorée.

    Alors j'ai bien compris cette histoire de scinder les rayons...
    Mais la preview je pige le principe général mais pas le mode opératoire :
    ce que je faisais pour l'instant, c'est que je prenais chaque pixel de mon image radio, et je calculais le long du rayon liant le pixel à la sourcez l'atténuation.
    Avec le mode preview, je pars du pixel, et je localise la meilleure source (source secondaire ?) ? Si oui alors comment ? Si non alors comment ?

    En tout cas merci beaucoup de m'aider c'est très sympa !

  13. #13
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    A propos, ça s'écrit "Mac LAK", avec un "c" sur le "Mac"... ;-)

    Citation Envoyé par mathieu_t
    Pour ce qui est du lien effectivement il n'est plus à jour... Comme il n'y a pas d'autre lien que j'ai trouvé je pourrais le mettre en ligne mais je sais pas si c'est légal tout ça....
    Là, j'en sais fichtrement rien... Faut voir s'il y a une mention légale dans le PDF...

    Citation Envoyé par mathieu_t
    Alors j'ai bien compris cette histoire de scinder les rayons...
    Bon, c'est déjà un bon point : c'est crucial pour percuter sur le reste ! ;-)

    Citation Envoyé par mathieu_t
    ce que je faisais pour l'instant, c'est que je prenais chaque pixel de mon image radio, et je calculais le long du rayon liant le pixel à la sourcez l'atténuation.
    C'est parceque tu simules une source diffuse (émetteur de rayons X) avec une projection sur une surface plane (la plaque photosensible). En gros, tu ne fait que "mesurer" l'épaisseur (peut-être la nature aussi ?) des tissus traversés, pour obtenir une information couleur (=énergie conservée), on est bien d'accord ?

    Dans la réalité, les rayons X sont émis en faisceau relativement serré, mais non cohérent (les rayons ne sont pas parallèles entre eux, mais se diffusent à la sortie de l'émetteur). Comme la plaque est "analogique", ça ne pose pas trop de problèmes.

    Le principe, c'est de "transformer" ta caméra en faisceau de lumière cohérente : OK sur ce principe ?

    Comme, dans ton cas particulier, tu n'as à calculer de réfraction/réflexion (les rayons X sont censés ne pas pouvoir être déviés, mais simplement perdre de l'énergie), tu devrais pouvoir améliorer la vitesse de rendu en utilisant directement une source cohérente : l'équivalent d'un laser, mais parallèle à ta caméra et dont tous les rayons sont orthogonaux à la source et à la caméra.

    Citation Envoyé par mathieu_t
    Avec le mode preview, je pars du pixel, et je localise la meilleure source (source secondaire ?) ? Si oui alors comment ? Si non alors comment ?
    Non, c'est la source primaire que tu vas chercher. Attention, le rayon doit partir orthogonalement de la caméra !! Le but est de réduire les calculs, pas de les complexifier ! ;-)

    Citation Envoyé par mathieu_t
    En tout cas merci beaucoup de m'aider c'est très sympa !
    De rien. C'est par contre un peu difficile à expliquer sans tableau et dessins, alors n'hésites pas à demander autant d'explications que nécessaire, OK ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  14. #14
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Recoucou MaC Lak

    C'est parceque tu simules une source diffuse (émetteur de rayons X) avec une projection sur une surface plane (la plaque photosensible). En gros, tu ne fait que "mesurer" l'épaisseur (peut-être la nature aussi ?) des tissus traversés, pour obtenir une information couleur (=énergie conservée), on est bien d'accord ?
    On est d'accord.
    Le principe, c'est de "transformer" ta caméra en faisceau de lumière cohérente : OK sur ce principe ?
    Ok pour le fait que ça soit pas cohérent du fait que la source ne soit pas un point.
    Mais qu'appelles-tu caméra ? Celle qui est censée y avoir derrière l'écran ?
    A supposer que ce soit cela, mon raisonnement est-il le bon ?
    1 - on prend une source avec une surface non nulle, ex un petit rectangle.
    2 - je fais partir les rayons de la caméra orthogonalement à la caméra; parmi ceux arrivant sur la source, je cherche celui qui a la plus faible atténuation
    j'ai l'impression de tout mélanger... En plus je vois pas comment les rayons peuvent arriver à la source s'ils sont perpendiculaires à la caméra (je dois pas avoir la bonne déf de la caméra).

    Ce qui me perturbe c'est la fait qu'ils doivent être orthogonaux !
    Moi j'aurais fait un truc du genre:
    1 - on prend le pixel (i,j) sur l'image radio;
    2 - on cherche le rayon le moins atténué (donc de plus forte énergie) parmi les rayons liant le pixel (i,j) aux points de la source (que je prendrais par exemple comme étant un petit rectangle)...

    ça serait pas bon ça ??

  15. #15
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par mathieu_t
    Ok pour le fait que ça soit pas cohérent du fait que la source ne soit pas un point.
    Oups, attention : c'est le contraire ! C'est parceque c'est un point que ça ne peut PAS être cohérent !

    Citation Envoyé par mathieu_t
    Mais qu'appelles-tu caméra ? Celle qui est censée y avoir derrière l'écran ?
    Oui. En général, elle est représentée par un rectangle (=l'écran) ayant une direction (=sens du regard).

    Citation Envoyé par mathieu_t
    A supposer que ce soit cela, mon raisonnement est-il le bon ?
    1 - on prend une source avec une surface non nulle, ex un petit rectangle.
    Oui, posé exactement en face de l'écran/caméra, et ayant la même taille.

    Citation Envoyé par mathieu_t
    2 - je fais partir les rayons de la caméra orthogonalement à la caméra; parmi ceux arrivant sur la source, je cherche celui qui a la plus faible atténuation
    Ou plutôt la plus forte énergie... Attention, quand même : en raytracing classique, une seule source lumineuse ne suffit en général pas (image extrêmement sombre), il faut inclure aussi de la lumière diffuse. Le but n'est pas de trouver "LA" source lumineuse (ça arrive rarement), mais de trouver la plus proche du rayon de plus haute énergie.
    Une fois cette source trouvée, tu peux "ajuster" le lancer de rayon à partir de la source lumineuse, et coller au plus près du rayon de previsualisation. Simplement, à la dernière étape, tu sais déjà quel est le pixel cible, donc tu évites l'erreur d'arrondi à ce niveau. Tu me suis ?

    Citation Envoyé par mathieu_t
    j'ai l'impression de tout mélanger... En plus je vois pas comment les rayons peuvent arriver à la source s'ils sont perpendiculaires à la caméra (je dois pas avoir la bonne déf de la caméra).
    Si, c'est la bonne définition de la source de lumière qu'il te manquait. Comme je te l'ai dit, avec un tableau blanc et 2 feutres, ça s'explique hyper vite, mais juste avec du texte, ce n'est pas évident... Il est possible que j'oublie des détails parfois, alors n'hésites pas à me faire remarquer le moindre truc te paraissant étrange et/ou illogique !

    Citation Envoyé par mathieu_t
    Ce qui me perturbe c'est la fait qu'ils doivent être orthogonaux !
    C'est pour simplifier les calculs, ni plus, ni moins. Le but est de trouver rapidement un chemin à peu près correct, mais le "vrai" lancer de rayon se fait après.
    En gros, trouver les sources principales permet de dessiner la plus grande partie de l'image, et d'éliminer totalement les artefacts de tracé. Mais ça ne dispense pas de devoir "tracer" les rayons des sources secondaires si tu veux avoir une image parfaite : simplement, s'il y a des artefacts, ils ne seront pas visibles car 90% de l'information énergétique de chaque pixel est d'ores et déjà calculée... Tu saisis mieux ?

    Citation Envoyé par mathieu_t
    Moi j'aurais fait un truc du genre:
    1 - on prend le pixel (i,j) sur l'image radio;
    2 - on cherche le rayon le moins atténué (donc de plus forte énergie) parmi les rayons liant le pixel (i,j) aux points de la source (que je prendrais par exemple comme étant un petit rectangle)...
    Ca peut être bon dans ton cas, mais parceque tu utilises des informations très simplifiées pour ton tracé :
    - Ton image est en "niveau de gris", il n'y a pas d'informations de couleur autre que la luminosité. Donc, le calcul d'énergie ou le calcul de la couleur finale, c'est pareil.
    - Tes rayons ne peuvent être déviés par nature (rayons X), donc pas besoin de chercher un "chemin", c'est forcément une ligne droite.

    Citation Envoyé par mathieu_t
    ça serait pas bon ça ??
    Presque : fais partir tes rayons perpendiculairement à la caméra, et fait en sorte que la source lumineuse soit de même taille (ou légèrement supérieure) que la caméra, et que les deux soient parallèles (=les rayons seront orthogonaux à la source et à la caméra). Normalement, ton image résultat devrait être nickel, et sans aucun artefact.

    Attention, quand même : tu auras quand même un phénomène d'aliasing (inévitable), alors un léger suréchantillonnage (0.7 en taille de pixels) devrait être une bonne idée. Si tu rajoutes un simple filtre bilinéaire pour revenir à la taille d'origine, tu devrais avoir un résultat absolument parfait.

    Pour le calcul d'énergie, je ne sais pas ce que tu appliques, mais normalement, tu dois avoir une perte d'énergie à chaque changement de milieu et une perte d'énergie liée à la distance du trajet dans chaque milieu : sinon, tu ne verrais pas la différence entre (par exemple) un os de 2 cm d'épaisseur et deux os superposés de 1 cm chacun, or, ça se voit sur une radio... Essaie d'y penser, ou de demander les conseils d'un radiologue pour tes formules.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  16. #16
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Ah là là j'ai un mal de crâne ignoble à essayer de comprendre ce truc !!!
    Citation Envoyé par Mac LAK
    A supposer que ce soit cela, mon raisonnement est-il le bon ?
    1 - on prend une source avec une surface non nulle, ex un petit rectangle.

    Oui, posé exactement en face de l'écran/caméra, et ayant la même taille.
    Ok admettons, je prends une source de même taille que l'image et posée en face, jusque là je te suis.

    Citation Envoyé par Mac Lak
    Ou plutôt la plus forte énergie... Attention, quand même : en raytracing classique, une seule source lumineuse ne suffit en général pas (image extrêmement sombre), il faut inclure aussi de la lumière diffuse. Le but n'est pas de trouver "LA" source lumineuse (ça arrive rarement), mais de trouver la plus proche du rayon de plus haute énergie.
    Une fois cette source trouvée, tu peux "ajuster" le lancer de rayon à partir de la source lumineuse, et coller au plus près du rayon de previsualisation. Simplement, à la dernière étape, tu sais déjà quel est le pixel cible, donc tu évites l'erreur d'arrondi à ce niveau. Tu me suis ?
    Oui, je suis d'accord sur le principe de trouver une meilleure source que l'unique point que j'utilisais jusquà présent...
    Citation Envoyé par Mac Lak
    . Il est possible que j'oublie des détails parfois, alors n'hésites pas à me faire remarquer le moindre truc te paraissant étrange et/ou illogique !
    T'inquiète j'y viens

    Citation Envoyé par Mac Lak
    En gros, trouver les sources principales permet de dessiner la plus grande partie de l'image, et d'éliminer totalement les artefacts de tracé. Mais ça ne dispense pas de devoir "tracer" les rayons des sources secondaires si tu veux avoir une image parfaite : simplement, s'il y a des artefacts, ils ne seront pas visibles car 90% de l'information énergétique de chaque pixel est d'ores et déjà calculée... Tu saisis mieux ?
    Bah non... Attends je suis plus là, on cherche les sources principales ou secondaires ????

    Citation Envoyé par Mac Lak
    - Ton image est en "niveau de gris", il n'y a pas d'informations de couleur autre que la luminosité. Donc, le calcul d'énergie ou le calcul de la couleur finale, c'est pareil.
    - Tes rayons ne peuvent être déviés par nature (rayons X), donc pas besoin de chercher un "chemin", c'est forcément une ligne droite.
    ça je suis d'accord

    Citation Envoyé par Mac Lak
    Presque : fais partir tes rayons perpendiculairement à la caméra, et fait en sorte que la source lumineuse soit de même taille (ou légèrement supérieure) que la caméra, et que les deux soient parallèles (=les rayons seront orthogonaux à la source et à la caméra). Normalement, ton image résultat devrait être nickel, et sans aucun artefact.
    Et c'est là que tout bascule !! J'ai admis le fait de prendre une source de même taille que la caméra/image...
    Mais je comprends pas un truc : si les rayons sont perpendiculaires aux deux surfaces, alors le pixel de l'image ne peut se retouver qu'au point d'intersection entre le rayon perpendiculaire et la source !!!
    Je dois mal comprendre car dans ce cas j'ai plus une projection perspective, ce qui est nécessaire pour ma simulation (c'éatit encore concevable d'être en perspective avec une taillede source négligeable devant la taille de la caméra, mais si tu me dis qu'elles sont de même taille)...
    En plus ça sert à rien de chercher le chemin de plus haute énergie dans ce cas, vu qu'il est toujours le même : perpendiculaire aux deux surfaces et passant par mon pixel....

    Citation Envoyé par Mac Lak
    Attention, quand même : tu auras quand même un phénomène d'aliasing (inévitable), alors un léger suréchantillonnage (0.7 en taille de pixels) devrait être une bonne idée. Si tu rajoutes un simple filtre bilinéaire pour revenir à la taille d'origine, tu devrais avoir un résultat absolument parfait.
    Je comprends plus, je croyais que le but était de virer le phénomène d'aliasing par l'étude du chemin inverse... En plus un truc qui m'embête c'est que j'ai beau avoir suréchantillonné, ça n'a pas supprimé l'aliasing !!

    Ah quand je disais avoir mal au crâne... Vais me prendre une aspirine...
    En fait ce qui serait génial ce serait un petit dessin effectivement... Je sais pas si je t'en demande trop, si tu as le temps aussi de te traîner un comme moi, mais je crois que ça éclaircirait pas mal de mystères...

    En tout cas merci encore une fois pour ta motivation à m'expliquer, c'est vraiment gentil !

    A+

  17. #17
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par mathieu_t
    Ah là là j'ai un mal de crâne ignoble à essayer de comprendre ce truc !!!
    Bienvenue au club, j'en ai eu un aussi pendant mes cours sur ce sujet...

    Citation Envoyé par mathieu_t
    Bah non... Attends je suis plus là, on cherche les sources principales ou secondaires ????
    La principale, puis les secondaires sont tracées "normalement".
    Par exemple, imagines un cube blanc à l'origine, et éclairé par un spot bleu très très proche (et très puissant), puis plein de spots d'autres couleurs, mais beaucoup plus éloignés. Quelle est la couleur du cube au résultat final ? Bleu... Le spot bleu est la source principale.
    Mais il peut aussi y avoir quelques "touches" d'autres couleurs : par exemple, un spot rouge un peu plus loin peut produire des reflets violets, mais ils seraient calculés en "modifiant" la couleur bleue, qui contient donc la majeure partie de l'information couleur finale.
    S'il manque quelques pixels de reflet rouge, ce n'est pas critique, car ça sera beaucoup, BEAUCOUP moins visible qu'un trait noir ou blanc "coupant" ta surface bleue.
    Ca va mieux, avec cet exemple ?

    Citation Envoyé par mathieu_t
    Et c'est là que tout bascule !! J'ai admis le fait de prendre une source de même taille que la caméra/image...
    "Et soudain, c'est le drame !" ;-)
    Bon, je vais détailler.

    Citation Envoyé par mathieu_t
    Mais je comprends pas un truc : si les rayons sont perpendiculaires aux deux surfaces, alors le pixel de l'image ne peut se retouver qu'au point d'intersection entre le rayon perpendiculaire et la source !!!
    Ben oui, c'est exactement ça. Encore une fois, je te rappelle que c'est lié au fait que tu es dans un cas bien particulier de raytracing, qui autorise quelques simplifications impensables avec une simulation de lumière "réelle".

    Citation Envoyé par mathieu_t
    Je dois mal comprendre car dans ce cas j'ai plus une projection perspective, ce qui est nécessaire pour ma simulation (c'éatit encore concevable d'être en perspective avec une taillede source négligeable devant la taille de la caméra, mais si tu me dis qu'elles sont de même taille)...
    En quoi la perspective est-elle nécessaire ? Sur une vraie radio, ce n'est pas vraiment une perspective, mais plutôt une projection, légèrement diffuse d'ailleurs...
    Dans ton cas, tu n'auras pas de déformations géométrique liée à cette projection "par rayons cohérents", tu sais ?

    Citation Envoyé par mathieu_t
    En plus ça sert à rien de chercher le chemin de plus haute énergie dans ce cas, vu qu'il est toujours le même : perpendiculaire aux deux surfaces et passant par mon pixel....
    C'est vrai, mais c'est lié au particularisme de ton raytracing. Ce serait faux avec plusieurs sources et/ou des rayons pouvant être déviés (un pixel "final" pouvant alors recevoir l'énergie de plusieurs rayons, et non plus d'un seul).

    Citation Envoyé par mathieu_t
    Je comprends plus, je croyais que le but était de virer le phénomène d'aliasing par l'étude du chemin inverse...
    Oups, je comprends ton problème... Non, le but est d'éliminer les erreurs de tracé, qui sont certes liés à l'aliasing, mais qui ont un "traitement" bien différent... Ta ligne noire horizontale, donc.
    Moi, je parlais d'aliasing au sens premier du terme, c'est à dire un crénelage (le fameux "effet d'escalier") sur les lignes extérieures, ni plus, ni moins.

    Citation Envoyé par mathieu_t
    En plus un truc qui m'embête c'est que j'ai beau avoir suréchantillonné, ça n'a pas supprimé l'aliasing !!
    Normal : les artefacts de tracé comme ta ligne requièrent un suréchantillonnage démentiel pour être éliminés. Par contre, examine les lignes extérieures (la limite os/vide) : tu verras que le tracé ne montre pas "d'escaliers"... Voilà à quoi sert le suréchantillonnage.

    Citation Envoyé par mathieu_t
    En fait ce qui serait génial ce serait un petit dessin effectivement... Je sais pas si je t'en demande trop, si tu as le temps aussi de te traîner un comme moi, mais je crois que ça éclaircirait pas mal de mystères...
    Ben disons surtout que déjà que mes dessins au tableau ne sont pas terribles, à la souris, c'est dix fois pire... Dis-moi si tu as encore des points obscurs, et si oui, j'essaierai d'en faire un, mais c'est pas gagné.

    Citation Envoyé par mathieu_t
    En tout cas merci encore une fois pour ta motivation à m'expliquer, c'est vraiment gentil !
    Boaf, tu sais, je viendrais pas ici si je ne voulais pas aider... ;-)
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  18. #18
    Membre chevronné
    Profil pro
    Enseignant
    Inscrit en
    Avril 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2004
    Messages : 440
    Par défaut
    Salut Mac Lak!
    Bon désolé pour ne pas avoir répondu plus vite, mais je suis en pleine rédaction de rapport DEA et je dois le rendre dans 2 jours, donc c'est un peu la course... J'aavais espéré avoir règlé cette histoire avant pour en parler dans le rapport, mais je crois pas que ça va être possible.

    En tout état de cause, je suis sûr à présent que ça n'est pas de l'aliasing, même si ça y ressemble de loin : suivant l'angle d'observation, on observe soit des lignes verticales, des cerclezs concentriques ou autres formes bizarroides...

    Je pense que c'est un problème de type 'Bug', et non un problème de méthode...

    Je redonnerai plus de détails quand j'aurais débuggé !

    A+

  19. #19
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par mathieu_t
    Bon désolé pour ne pas avoir répondu plus vite, mais je suis en pleine rédaction de rapport DEA et je dois le rendre dans 2 jours, donc c'est un peu la course...
    No problem.

    Citation Envoyé par mathieu_t
    En tout état de cause, je suis sûr à présent que ça n'est pas de l'aliasing, même si ça y ressemble de loin : suivant l'angle d'observation, on observe soit des lignes verticales, des cerclezs concentriques ou autres formes bizarroides...
    Ce sont des artefacts de tracé, lié à la nature discrète du raytracing. C'est (en très très résumé) le même principe que l'effet de Moiré : c'est inévitable sans méthodes particulières destinées, justement, à éliminer de tels artefacts.

    Citation Envoyé par mathieu_t
    Je redonnerai plus de détails quand j'aurais débuggé !
    Ben comme on dit, "yaka" ! ;-)
    Et bon rapport !
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  20. #20
    Membre émérite
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Par défaut
    la perte d'energie est due a l'absorbtion.
    La "refexion" des RX repond à la loi de bragg sur les plans d'electrons:
    c'est la diffraction.
    Les conditions de diffraction sont difficile à réaliser ( il soit tourner le cristal (Debey Schere,...), soit avoir une source RX non monochromatique (Laue ) afin que les noeuds du reseau reciproque soient sur la sphère d'Ewald; L'energie "détournée est trés faible, son calcul se fait( facteurs de structure, ... )
    La longueur d'onde (0.5 a 2 A typique) est de l'ordre de grandeur des distances inter-atomiques ce qui est propice à de la diffraction. Par contre les fréquences correspondantes sont de l'ordre de 10^17 à 10^20.
    Cela est nettement audela de la fréquence que peur suivre les électrons qui tournent à environ 10^15 Hz (-> optique 10^15) et il ne peut y avoir de relexion au sens Optique où onde electo magnetique.
    Les coefficients d'absobtion changent avec le type d'élément (nombre d'électons), la densité et la longueur d'onde. Ils sont tabulés. L'intensité transmise intègre l'absorbtion tout le long du chemin: Il est parfois difficile de localiser en profondeur un défaut. Il est en général util de faire des correction d'intercept si on connait + ou mons les formes.
    Les images que j'ai simulées sont en général créées en scannant la surface de l'image avec overlap de 50 à 80% de cellulues puis retour à la source. Avec les RX c'est + facile qu'en optique où le chemin optique le + court necessite parfois de nombreux calculs. Ici il est typiquement linéaire mais la source peut être étendue!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Probleme Voyageur de Commerce - Recuit Simulé
    Par dinver dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/06/2009, 22h26
  2. Développpement d'une application de simulation .....
    Par dada5455 dans le forum OpenGL
    Réponses: 6
    Dernier message: 14/12/2003, 10h27
  3. simuler l'execution d'un message
    Par gaut dans le forum C
    Réponses: 14
    Dernier message: 24/07/2003, 23h01
  4. Simuler un coup de molette sur un memo...
    Par dynobremo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/02/2003, 11h31
  5. Simulation de transmission de paquet entre différent réseaux
    Par MelloW dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 19h51

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