# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Reconstruction d'image de tomographie

## Franquie

Bonjour,

J'aimerai construire des coupes  partir de projection prise  diffrents angles autour d'un objet  l'aide d'une transforme de Radon inverse.

C'est pourquoi j'aimerai savoir si vous pourriez m'indiquer un programme ou un code en C/C++ pour construire ces coupes.

Merci d'avance.

----------


## Pistolero_JB

Salut,

il y a a http://www.eecs.umich.edu/~fessler/code/ et peut tre a http://ctsim.org/.

Sinon google regorge d'infos sur le problme et mme dans ce forum des discussions ont dj t consacr  ce sujet.

Aprs si tu ne cherche pas la qualit, c'est pas trs compliqu de l'implmenter. Aprs acquisition tu obtiens ton sinogramme i.e. la transforme de Radon qui reprsente l'intgrale ou projection pour chaque angle. Radon n'est qu'une transforme de Fourrier dans l'espace polaire. Donc tu transformes le sinogramme dans Fourrier puis tu le projette dans l'espace polaire, et enfin tu fais une transforme de Fourrier inverse, et tu obtiens la coupe.

Aprs il y a beaucoup d'autres mthodes : FBP, ART, SIRT, ...

----------


## Franquie

J'ai regard les liens que tu m'a fournis et je t'en remercie  ::): .

Je pense avoir bien compris le principe de la transforme de Radon qui permet d'obtenir le sinogramme de l'image. Cependant dans les programmes que j'ai pu regard, ils ne proposent que de raliser le sinogramme puis dans un second temps de reconstruire l'image initial  partir du sinogramme.

D'autre part pour raliser une coupe d'un volume ne lui faut il pas prendre en compte plusieurs sinogrammes de ce volume ?

Enfin peut tu me parler des autres mthodes, ce que je recherche en faite dans un premier temps c'est une solution simple dans le but de montrer la faisabilit.

----------


## Pistolero_JB

Si tu as les projections pour chaque angle tu peux construire ton sinogramme puis l'injecter dans le programme pour reconstruire la coupe.

Effectivement, un volume est constitu de plusieurs coupes (slices), il faut donc autant de sinogrammes que de coupes. C'est pour cela qu'un scanner rayon X tourne autour du patient et que le lit se dplace pour faire l'acquisition de toutes les coupes. Dans les scanners rcents les deux mouvements sont raliss simultanment (mode hlicodale).

Les autres mthodes :
- le plus utilis, rapide et facile  implmenter, Filter Back Projection (FBP). On fait un back-projection de toutes les lignes du sinogramme dans une image vierge (voir figure). Comme on projette chaque ligne, l'image obtenue ne correspond pas  l'image d'origine. Donc on construit le sinogramme de l'image prcdement reconstuire et on le compare avec celui d'origine. On dtermine un ensemble de facteurs correctifs  appliquer sur le sinogramme et on recommence, back-projection, projection, correction (filtrage).



- Algebraic Reconstruction Techniques (ART), jamais utilis.
- Simultaneous Iterative Reconstruction Technique (SIRT), idem.

Un cours au format pdf sur la tomo http://perso.telecom-paristech.fr/~bloch/ATIM/tomo.pdf.

Sinon avec les infos que je t'ai donn tu devrais trouver plein d'lments dans google.

A+

----------


## Franquie

Pour ma part j'ai dj ces projections acquises avec un tomodensitomtre et je veux accder aux coupes (dans le but de construire un volume en 3D).

J'ai utilis un plugin de ImageJ (http://rsbweb.nih.gov/ij/plugins/radon-transform.html) pour obtenir les sinogrammes de chaque angle. Il permet ensuite de lancer une rtroprojection filtre qui ne me donne pas de coupe mais les projections (modifies surement dt  l'opration).

C'est cela que je comprend pas : la rtroprojection filtre ne permet elle pas d'atteindre les coupes ?

----------


## Pistolero_JB

La FBP permet d'obtenir la coupe, c'est le but de l'algo.

Par contre il y a un point que je ne comprend pas, peut tre li au vocabulaire, pourquoi la TDM te retourne une projection ? Le plugin ImageJ, part d'une coupe fait le sino, puis par FBP retrouve la coupe d'origine. 

Qu'est ce que tu entends par projection ?
La projection d'une image de n dimensions est l'intgral de cette image selon une direction, cela donne une image de (n-1) dimensions, 3D->2D, 2D->1D.
La transform de Radon (le sino), appel aussi Ray-Transform, projette une image de n dimensions selon une direction seulement sur une ligne, par consquent quelle que soit la dimension on obtient toujours un signal de une dimension, 3D->1D, 2D->1D.

Si tu as des "vraies" projections du patient pour chaque angle, il faut rorganiser les lignes de chaque projection pour construire le sino de chaque coupe... tout dpend de ce que tu as, peux-tu en dire un peu plus sur tes projections, voir mettre un exemple ?

----------


## Franquie

Ce que j'aimerai faire ressemble  ceci : http://www.physics.ubc.ca/~mirg/home...fbp_recon.html. C'est  dire que j'ai plusieurs projections acquises tous les 1. Ensuite  partir de ces projections j'aimerai obtenir des coupes (des tranches de mon volume en quelque sorte). Et au finale il faudrait que j'ai un volume reprsent en 3 dimension.

J'ai upload des projections du volumes que je veux reconstruire : http://sowz.fr/morgan/Tomo/. L'objet  reconstruire est une souris optique pour ordinateur.

Merci pour ton aide  ::): .

----------


## Pistolero_JB

Ok je vois, quand tu parlais de projection je pensais que tu parlais de Radon i.e. la projection d'une ligne et pas d'une vraie projection 2D.

Cela dit, les mthodes sont les mmes et tu as plein de possibilits pour faire ta reconstruction. 

- Chaque ligne de l'image de projection est en fait une coupe transversal projete en 1D. Donc le sinogramme de la coupe i, correspond  ligne i des  projections pour tous les angles. Tu obtiens autant de sinogramme qu'il y a de lignes (coupes) dans l'image de tes projections. Ensuite tu inverses la transforme de Radon pour chaque coupe et tu as le volume.

- Mais il y a plus direct, avec la FBP. A la place d'une back-projection 1D (voir figure), tu fais une back-projection 2D de toutes les projections dans un volume voxlis 3D, i.e. chaque pixel de la projection est une ligne qui traverse et laisse "une trace" dans le volume 3D. De ce volume, tu re-projettes pour chaque angle et tu compares les projections avec celles originales. Tu corriges puis recommence une autre itration tel qu'expliqu prcdemment.

En fait ce que tu cherches ce n'est pas une reconstruction tomographique au sens strict du terme (mme si c'est proche et li), mais plutt une "tilt-reconstruction" ou "projection-reconstruction".

A+

----------


## Franquie

Je pense que je ne comprend pas quelque chose.

Si j'ai bien compris, on part d'une vraie projection 2D puis on fait une transforme de Radon pour obtenir les sinogrammes. Aprs avec une Filter Back Projection on trouve le volume reconstruit. Puis ensuite on projette sur chaque angle pour obtenir de vraies projections 2D et ensuite les comparer  ceux initiales.

Cependant ceci n'est pas faisable avec le plugin de ImageJ ((http://rsbweb.nih.gov/ij/plugins/radon-transform.html) que j'avais indiqu plus bas ?
Mais comme je l'avais expliqu  partir de mes vraies projections 2D avec ImageJ je ralise mes sinogrammes (images en 2D). J'ai mis un de ces sinogrammes en pice-jointe.

Ensuite ImageJ permet de faire une Back Projection  partir des sinogrammes. Le rsultat de l'opration devrai tre des coupes transversales (et non pas de vraies projections 2D) ? Parce que c'est ce point que je ne comprend pas : Le rsultat que j'obtiens sont mes vraies projections 2D initiales.

Par ailleurs, aurais tu as ta connaissance un programme gratuit permettant d'obtenir les coupes transversales  partir de vraies projections 2D ?

----------


## Pistolero_JB

En fait tu n'as pas compris la relation qu'il y a entre projection 2D et transforme de Radon. 




> Mais comme je l'avais expliqu  partir de mes vraies projections 2D avec ImageJ je ralise mes sinogrammes (images en 2D).


ImageJ utilise la transforme de Radon pour constuire le sino, mais ca n'a aucun sens de le faire sur une de tes projections, c'est pourquoi que ImageJ te retourne la projection. Il faut galement que tu comprennes bien la transforme de Radon. Le plugin d'ImageJ est suffisant pour rsoudre ton problme, mais tu dois construire le sinogramme  partir des projections 2D.

Une partie de ton sinogramme est dj dans la projection 2D, si tu fais la transforme de Radon, tu vas donc l'appliquer deux fois ?! La ligne i de la projection 2D pris  l'angle theta, correspond au sinogramme de la coupe i  la position theta.

Par consquent avec l'ensemble des projections tu peux crer tes sinogrammes. Quand je dis crer c'est par toi mme, pas avec la transforme de Radon via ImageJ. Il faut juste quelque lignes de code pour copier-coller les lignes des projections dans les sinogrammes. Ensuite tu utilises ImageJ sur chaque sino et l tu obtiens les coupes.

Sinon, il y a une deuxime solution, qui n'a rien avoir avec la transforme de Radon ou le sinogramme. Tu fais un FBP directement sur les projections 2D pour obtenir directement le volume 3D.

Il faut que tu rflchisses au problme et que tu comprennes bien ce qu'est une projection 2D, un sino, une transforme de Radon et la mthode FBP.

A+

----------


## Franquie

Je te rpond peut tre un peu tardivement mais je pense que ma rponse pourrait tre utile.

J'ai mis en place la technique tu m'avais propos pour crer les sinogrammes de ma souris. Avec ImageJ j'ai pu reconstruire les coupes et le rsultat est plutt satisfaisant (voir pice jointe).

Ensuite j'ai trouv un site qui expliquait trs bien la rtroprojection : http://cardiac-mr.net/index.php?title=Fourier3 et ce site est accompagn d'animations qui aide  comprendre  ::): .

----------


## Pistolero_JB

C'est cool si tu obtiens le rsultat, c'est vrai que le site internet est vraiment didactique... Oublis pas de mettre le sujet comme rsolu.

A+

----------


## Mhirimhirimhiri

Bonsoir, merci bien pour tous ce que vous avez dit et illustrs, mais j'ai une petite question  ::):   Est ce que la methode de retroprojection filtre permet-elle de reconstruire les coupes? c'est a dire elle permet de fabriquer a partir de l'image originale les coupes sagittales, coronales et axiales ?


Je vous bien remercie

----------

