Réalité Augmentée pour la chirurgie

De Wiki de Projets IMA
Révision datée du 14 février 2014 à 20:00 par Pmboup (discussion | contributions) (Semaine 2 de Mars)

Papa Momar MBOUP/ Calvin DELBERGHE

Présentation

Description et Objectif:

Notre projet consiste à assister les chirurgiens lors de chirurgies laparoscopiques. La chirurgie laparoscopique est une technique chirurgicale minimalement invasive où le chirurgien réalise une opération de l'abdomen par de petites incisions où sont placés des trocars qui permettent le passage de fins instruments chirurgicaux. Dans le cadre de ce projet, il s’agit de réaliser l’ablation de la(des) tumeur(s) présente(s) dans le foie du patient. La localisation des tumeurs ainsi que de l’ensemble du réseau vasculaire peut etre réalisé grâce à un scanner pré-opératoire et donc reconstruits en 3D. Cependant, ils ne peuvent pas être visualisés par la caméra lors de l’opération chirurgicale.

Ainsi, le chirurgien ne peut en aucun cas connaitre la localisation de la tumeur et ne peut pas se représenter la distance qui la sépare des parois du foie. D’où le but de notre projet: aider les chirurgiens dans ces opérations. Des travaux récents de l'équipe de recherche Shacra ont permis de suivre avec une bonne précision le mouvement de structures internes du foie pendant une opération laparoscopique. Le projet consiste à utiliser ces travaux pour mélanger le flux vidéo fourni par l'endoscope aux informations calculées par la simulation pour fournir aux chirurgiens des informations utiles sur la position des structures internes du foie lors de la manipulation. Différentes pistes pourront être explorées pour ne pas surcharger le flux vidéo tout en fournissant les informations importantes (position, profondeur, distance à la surface du foie...)

Environnement de travail :

1 ordinateur

OpenGL 3.3

SDL 2.0

IDE CodeBlocks

Plan d'action / Gestion de projet

Dans un premier temps, nous allons commencer à suivre des tutoriaux sur le framework OpenGL. Quand on sera assez avancé, nous débuterons le codage du programme principal. Donc pour le premier semestre, le plan est de mettre en place la base du programme et de bien maîtriser OpenGL pour la suite quand on ajoutera des fonctions plus poussées dans le programme.

Réalisation

Semaine 37

Présentation et Choix du sujet.

Semaine 38

Rencontre avec les encadrants du projet:

Explication détaillée du sujet ainsi que les attentes du projet.
Réception des premières données pour débuter quelques tests avec OpenGL.

Semaine 39

Installation d'OpenGL sous Windows avec CodeBlocks. Début des tutoriaux sur le site du zéro:

http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3

Semaine 40

Poursuite des tutoriaux.

Semaine 41

Poursuite des tutoriaux.

Semaine 42

Poursuite des tutoriaux.

Semaine 43

Poursuite des tutoriaux

Semaine 44

Poursuite des tutoriaux

Semaine 45

Poursuite des tutoriaux

Semaine 46

Poursuite des tutoriaux

Semaine 47

Fin de la première partie des tutoriaux.

Semaine 48

Démarrage du code du programme à partir du code réalisé pendant les tutoriels.

Semaine 49

Ajout de la fonction permettant de récupérer les données des fichiers .obj contenant les vertices, les coordonnées de texture, les vecteurs normaux et les références aux faces (triangles) constituant l'objet 3D.

Semaine 50

Nous sommes arrivé durant cette semaine à représenter une tumeur correctement en 3D.

Pour représenter un structure en 3D, nous allons utiliser un ensemble de triangle. Chaque triangle est constitué de 3 vertices qui sont ces sommets. Un vertex est tout simplement un point avec trois dimensions : x,y et z. Ainsi, le but est de relier les trois sommets (vertices) formant un triangle et ensuite de relier tous les triangles. Ainsi, nous obtiendront notre structure en 3D.

Cependant, nous rencontrons un problème quand on a un nombre de vertices élevés à représenter (de l'ordre de 20000 vertices). Une des pistes pour la résolution de ce problème est d'utiliser les display list. Cependant, les display List n'existent plus en OpenGL 3.3. Donc le problème reste irrésolu pour l'instant. On va regarder du coté des VBO (Vertex Buffer Object) et VBA(Vertex Buffer Array).

Les "Display List" permettent un stockage des données sur la carte graphique mais ne permettent pas de mettre à jour ces données. Les "VertexArray" conservent les données dans des tampons en mémoire système ce qui permet de les modifier mais oblige à transférer toutes ces données à chaque fois qu'elles doivent être affichées.

Un VBO est un objet OpenGL qui contient des données relatives à un modèle 3D comme les vertices, les coordonnées de texture, les normales (pour les lumières), ... Sa particularité vient du fait que les données qu'il contient se trouvent non pas dans la RAM mais directement dans la carte graphique.

Les VBO permettent de gagner un temps considérable à OpenGL en évitant de faire des aller-retours inutiles entre la RAM et la mémoire graphique: Interet VBO.png

Chargement avec VBO.png

Affichage avec VBO.png

Images prises sur : http://fr.openclassrooms.com/informatique/cours/developpez-vos-applications-3d-avec-opengl-3-3/c-est-quoi-un-vbo

On économise ainsi le transfert de centaines de milliers de données à chaque affichage, la carte graphique peut travailler plus rapidement.


Nous avons aussi trouvé durant cette semaine ce site qui explique très bien la théorie de l'intersection rayon/triangle avec une traduction en code.

http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-9-ray-triangle-intersection/ray-triangle-intersection-geometric-solution/

Nous avons grâce à ceci pu coder une méthode adaptée pour tester les triangles de la surface du foie et voir s'ils sont en intersection avec le rayon partant du barycentre de la tumeur et ayant pour vecteur directeur X, Y, ou Z. Une fois le bon triangle trouvé, la fonction se charge de renvoyer le point d'intersection, et il ne reste qu'a récupérer sa coordonnée en X,Y,ou Z (suivant le vecteur directeur précisé dans l'appel à la fonction) qui se trouve être la distance entre la tumeur et la surface du foie. Pour affiner un peu notre méthode, il faut d'abord l'appliquer à l'enveloppe de la tumeur elle même, puis faire de même avec la surface du foie, et soustraire les coordonnées obtenues pour les points d'intersections dans chacune des 3 direction afin d'obtenir une distance correcte pour chaque direction.

Semaine 51

Rédaction du rapport d'avancement

Rédaction de la présentation oral

Conclusion Première partie

Ce premier semestre à travailler sur ce projet a été des plus instructifs pour nous, nous permettant de mieux concevoir la charge de travail que représentait celuici, de réaliser la chance qu’il nous était donnée de pouvoir apporter notre contribution dans le domaine concret et important qu’est la médecine. Cela nous aura aussi permis de nous cultiver sur les méthodes utilisées aujourd’hui en chirurgie, ainsi que de découvrir OpenGL et la modélisation dans l’espace. Les bases de l’application sont bien en place et le cahier des charges bien défini. Il reste donc pour la seconde moitié de l’année à finaliser la modélisation des structures ainsi que l’affichage de la distance entre la tumeur et la surface du foie. De plus, nous devrons rendre l’application dynamique avec la récupération des flux de données en temps réel par la caméra.

Deuxième partie

Objectifs

Les objectifs pour cette seconde partie sont représentés dans notre planning:

PHOTO PHOTO PHOTO PHOTO

Semaine 1 de Mars

Nous avons créé une classe foie pour représenter ce dernier. De ce fait, notre programme sera plus lisible et ordonné.

Semaine 2 de Mars

On arrive enfin à représenter le foie. Pour celà donc, nous avons utilisé les VBO afin d'aboutir à ce résultat. La prochaine étape est de représenter la tumeur et le foie en même temps. Nous avons créé une classe tumeur qui s'occupe du chargement et de l'affichage de la tumeur. Nous arrivons maintenant à afficher le foie et la tumeur en même temps. Cependant, vu que la tumeur se trouve à l'intérieur du foie, nous allons changer l'affichage du foie de tel sorte que l'on voit que les traits reliant les triangles sans couleur ni texture. On affiche désormais le foie et la tumeur ensemble avec pour le foie juste des traits pour avoir une meilleure vision de la position de la tumeur.

Semaine 3 de Mars

Semaine 4 de Mars