Majeure "Mathématiques et Informatique"
Enseignement d'approfondissement
"Images: Analyse et Synthèse"

Tomographie


Projet Réalisé par Delphine Dufourd (promo 95)


Description du projet

Il est fréquent de recourir aux rayons X pour étudier sans les détruire des objets en trois dimensions. On obtient alors un certain nombre de projections, dont chaque pixel représente l'intégrale d'une densité d'absorption sur le trajet parcouru entre la source des rayons et le capteur. La reconstruction tomographique vise ensuite à retrouver cette densité en chaque point du volume considéré. L'imagerie médicale constitue l'une des applications majeures de la tomographie : dans le cadre de ce projet, on s'attache justement à reconstituer des vaisseaux sanguins du cerveau.
NOTE: les images ne peuvent malheureusement pas être publiées

Algorithme utilisé

Concrètement, le programme dispose de 55 images aux rayons X, de taille 256*128. A chaque image est associée une matrice de projection donnée. Il s'agit alors de reconstituer le volume dans une grille de taille 256*256*128.

L'algorithme employé ici se nomme ART (Algebraic Reconstruction Techniques). Il consiste a transformer le problème par discrétisation en un très grand système linéaire de 55*256*128 équations. Chaque équation correspond à un pixel p suivant une projection de matrice M donnée : elle exprime que l'intensité de ce pixel est égale à la somme des densités rencontrées par le rayon arrivant en p pour la projection de matrice M. La projection étant une opération linéaire, l'intensité de chaque pixel s'exprime bien linéairement en fonction des densités de chaque voxel.

Pour résoudre ce système, on applique une méthode itérative, de sorte qu'à chaque étape, une ligne seulement du système soit vérifiée exactement. A cet effet, on compare pixel par pixel l'une des projections réelles avec la projection calculée sous le m^eme angle, puis on réétale la différence dans le volume, en vérifiant que les densités résultantes sont positives (on les annule sinon : l'ART est contraint). Une itération consiste à reproduire ce traitement pour chacune des 55 matrices.

Résultats obtenus

On constate que l'algorithme converge rapidement, en 3 itérations environ puisque la comparaison avec 4 itérations ne présente pas de différences significatives. Le temps d'exécution pour 3 itérations est de l'ordre de 2h30, ce qui représente moins d'une minute par projection, comparaison et transformation des intensités pour une matrice.

Pour visualiser le volume, on peut d'abord examiner des sections horizontales, qui fournissent des informations bien différentes des projections latérales d'origine. Cependant, comme on dispose d'une grille de l'objet, il est facile d'effectuer de nouvelles projections : orthogonales suivant les axes par exemple. Pour vérifier que le volume est bien reconstruit, on peut également projeter suivant les matrices de départ, et comparer avec les images réelles.

Ces différents modes de visualisation posent cependant des problèmes d'échelle. Pour les tranches, si l'on décide de rechercher les niveaux minimal et maximal d'intensité sur la grille entière afin de les ramener par une loi linéaire entre 0 et 255, on aboutit à des images trop foncées : en effet, il existe probablement des points parasites d'intensité anormalement élevée. si l'on recherche ces extrema uniquement sur la tranche, on exclut la continuité des intensités entre deux tranches consécutives. Une bonne alternative consiste donc à chercher expérimentalement une échelle fixe qui convienne à tous les niveaux. Dans le cadre de ce projet, nous avons opté pour une échelle relativement petite permettant de déceler les imperfections, qui disparaissent avec des images moins contrastées. Il en est de m^eme pour les projections.

Quelques sections horizontales en trois itérations

au niveau 90 :


















au niveau 95 :


















au niveau 100 :


















Les sections de vaisseaux paraissent assez nettes, ce qui permet de repérer l'anévrisme, plus large et plus brillant.

La projection orthogonale suivant l'axe j :













La projection suivant la dernière matrice de projection :












Problèmes rencontrés et solutions apportées

Les difficultés sont essentiellement liées à la taille des objets à manipuler : la grille de voxels représente environ 32MO d'espace mémoire, ce qui pose d'évidents problèmes de rapidité d'exécution. Pour y remédier, on peut bien sûr songer à optimiser la compilation. Mais surtout, au lieu d'utiliser une procédure de multiplication de matrice par un vecteur pour déterminer la projection d'un voxel, on peut intégrer directement ce calcul au parcours de la grille : au lieu d'effectuer cette projection pour chaque voxel (i,j,k), on se contente de modifier les coordonnées de sa projection par rapport à celles de son voisin.

On constate d'autre part que les projections obtenues à partir des matrices du début sont moins nettes :










En changeant l'ordre des matrices lors de l'exécution de l'ART, on peut vérifier que ce flou est dû à la nature itérative de l'algorithme. Pour effacer cette dissymétrie et atténuer le flou, à condition de disposer d'un espace mémoire suffisant, peut-être pourrait-on tenter de moyenner des résultats d'ART sur des ordres de matrices différents.


Enfin, des interférences apparaissent, sur la tranche de niveau 80 notamment :

















On peut éliminer ces traces de rayons résiduels en modifiant le contraste, mais il faudrait plutôt essayer de traiter les images de départ en supprimant d'éventuels points trop brillants, ou bien tenter de lisser l'image d'arrivée. Reste à définir les objectifs : obtenir des images brutes contenant toutes les informations possibles, ou des images plus belles, mais corrigées artificiellement.



Retour à la liste des projets réalisés