Thursday, November 29, 2012

Learning Tomography: Where are the sinograms?



In a tomographic project, 2D data are collected (from a specific device using X-rays,  electrons, etc.) and must be used to compute a 3D-reconstruction. From the previous posts of the series Learning Tomography, the primary input data is the sinogram. However, where are they located in a 2D-data collection?


Before starting, we assume that we are using the simplest data collection scheme that is a sample rotating about a vertical axis. This is the case in X-ray and in electron tomography.
Note: In medical tomography, the sample (the patient) is NOT rotated but the data acquisition system composed of the X-ray emitter and the detector is rotating about the sample [Wikipedia].

In Fig. 1, several projections of a human head (actually calculated from the ImageJ sample T1 Head) were obtained from different viewpoints. In this case, 180 2D projections were calculated from 0° to 179° with an angular step of 1° around the vertical axis. For sake of convenience, these projections are stored in a stack [Link].
Fig. 1: Ten projections of the human head.

In this collection scheme, we plan to reconstruct slice by slice this head and consequently, to compute 2D reconstructions which then will be stacked to build the final volume (3D) as shown in Fig. 2.
Fig.2: Procedure to compute a 3D reconstruction. From the projection stack (lower left), each row of a given projection (symbolized by the yellow lines) is extracted to build the sinogram (top middle). Each sinogram allows the computation of a 2D reconstruction corresponding to one section of the final volume.

Thus, to calculate a 2D reconstruction, we need a collection of 1D-projections in the range of [0;180°[. For example, to reconstruct the slice Y=120, we have to extract the row Y=120 for all the slices of the projection stack as shown in Fig. 3.






2- Extracting 1D-projections from the projections stack

Rather than writing a small script scanning all the slices of the stack to copy/paste the given row into a target image, it's easier to reslice the stack along the Y direction (to get the top views).
Just click on the projections stack (to be active) and run Image > Stacks > Reslice [/]... Choose Top...

Fig. 4: Popup window of the Reslice command. Choose 'Top' to reslice along the Y-axis (vertical). Uncheck all the other checkboxes.

Now, the stack looks like ...
Fig. 5: Resulting Y-resliced data showing the stack of sinograms (A) and a copy of slice Y=120 (B).
Et voilà! you get the sinograms of the 2D projections allowing the computation of 2D reconstructions of each section of the  final 3D data.

Finally, you are ready to filter the sinogram of Fig.5B with a ramp filter and run the backProjImproved.js JavaScript code [Link] to compute the following 2D reconstruction corresponding to one slice of the human head (Fig.6). To get the whole head, you have to loop over all the slices of the sinogram stack.

Fig. 6: 2D reconstruction of the slice Y=120.

Data

  • Projections of the human head [Link] or go to the directory [Link] and right-click to save the file. 
  • Another way to download these data is to go to File > Import > URL... and then to copy and paste the following web address: 
http://www.u-bordeaux1.fr/crazybiocomputing/blog/head_projs.tif

Other crazybiocomputing posts

Further readings are available in ...
  • Learning Tomography Series  [Link]
  • Image Processing TOC [Link]

No comments:

Post a Comment