I'm aiming to implement a simulation of computed tomography back projection in javascript/HTML5 canvas.

Trying to figure the correct approach for doing a back projections and I have been studying the presentation below:

http://www.dtic.upf.edu/~afrangi/ibi/reconstruction_color_2.pdf. On pp. 9-13 of the above pdf presentation a step by step example of back projection is shown.

This example involves a 2x2 matrix (with 4 projections and a total of 10 line integrals) and computes the line integrals of each projection where the value of each corresponding line integral is added to each matrix cell, respectively. Subsequently the total number of line integrals is subtracted from the value of each matrix cell. Finally the resulting value in each matrix cell is divided by the number of projections minus one.

Does this approach hold in general for larger, say a 100x100 matrix with larger cell values, say around 100?


To implement projection the simplest way is to rotate your image then sum over a row or column. The simplest way to implement back projection is to take a line of your sinogram which is a projection from certain view (angle) then repeat that line to form an image then rotate that image regarding the projection view, then sum all of backprojected views. There is a unique formula for continuous case but for discrete case there are many different implementation, this one is the simplest.

Good luck.

  • $\begingroup$ Dear Mohammad, I have been trying that implementation. Using this image as base: castlemountain.dk/greyCircle.png. 101x101 px image with black background and 11 px radius circle in center (brightness 200). I have been calculating 100 projections by rotating this image and obtained line integrals where the ones passing through the center of the image (and the center of the grey circle) have a value of 11 px X 200 = 2200. In order to obtain the resulting px value from 100 projections for say the center pixel value (x=51, y=51) from back projecting I multiply the line integrals going.... $\endgroup$ – user3001650 Aug 13 '17 at 10:16
  • $\begingroup$ through this coordinate by the number of projections 100 projections x 2200 (the respective line integral) = 22000 which is way more than the original center pixel value of 200. Can you tell me what I am doing wrong? Sincerely $\endgroup$ – user3001650 Aug 13 '17 at 10:19
  • $\begingroup$ back projection is not the inverse of Radon transform and it only reproduce the image qualitatively, to obtain the original image you have to use filtered back-projection. $\endgroup$ – Mohammad M Aug 13 '17 at 14:58
  • $\begingroup$ also you said you multiplied the ray passing through the center but you have to sum rotated ray (with different angles) and only at their intersection which is the center of circle they will add together. $\endgroup$ – Mohammad M Aug 13 '17 at 15:02
  • $\begingroup$ Thank you for your response. Each of the 100 projections has one line integral through the center and all of these 100 line integrals through the center has a value of (11px (the radius of the circle) x 200 brightness value) 2200. When I sum up the value of these line integrals in the center i get a value of 220000 which is much more than the original brightness value of 200 - and more than can be explained by only having conducted a back projection and not a filtered back projection. So is what I did not summing rotated rays? $\endgroup$ – user3001650 Aug 13 '17 at 15:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.