This is meant to be a noiseless sinogram, to later compare with one determined from simulated annihilation events. It's not perfect but it's a start.
I tried to do something similar to Andrew Reader, who has a great youtube series on this kind of thing. You can find it here.
Here is a gif of some of my results. Please enjoy. This is a WIP!
[OUTDATED! UPDATED VERSION COMING SOON!]
Left: Random Emitters | Middle: (a few) Forward Projection Scan Lines for Integrating | Right: Sinogram
APRIL 21 2026
- Still goint through copmmenting FBP implementation, cleaning (making forward projection a function)
- Is normalizing to 0 to 255 any good if max count was less than 255? See normalization of backprojection
APRIL 19&20 2026
- Back projection pretty much imlemented, it works
UPDATE APRIL 9 2026
- Started preparing for FBP integration with looking at video series by Andrew Reader (see TODO)
UPDATE APRIL 8 2026
- Changed some names
- Changed out of bounds area colour to gray (emitters outside this region still not coulored over, but not used either)
- Updated sinogram to keep track of true counts, instead of maxing out at 255, so that the final image is remapped from [0, max_count] -> [0, 255], only iff max_count > 255. Not sure if best. Will have to implement FBP
- Increased IMAGE_SIZE, tested some higher counts
- LAST TEST: ./build/PET 500 10, IMAGE_SIZE 1024 Better IMAGE_SIZE 500 because frame skipping not implemented (waiting each IMAGE_SIZE of pixels rows drawn of sinogram, so animation is quite slow for high counts)
TODO
- Commenting / cleaning
- Is normalizing to 0 to 255 any good if max count was less than 255?
- Verify FPB
- Colour over OOB emitters DONE, BETTER SOLUTION IN populate_detector_region_with_random_emitters
- Other quality of life checks understanding the even circle centers (2x2 or 4x4 for example) arbitrary input images FFTSHIFt only do when animating / showing the picture
- parallel? idk think later
"Utilized C++ and OpenCV to animate the Forward Projection or Radon Transform of a noiseless sinogram based on random emitter locations. This will eventually be compared with a noisy sinogram from simulated annihilation events, in the context of their reconstruction via Filtered Back Projection."