How to make a sinogram and back projection from CT data matrix?
167 views (last 30 days)
Show older comments
If I have 18 projection angles (0-340 with 20 deg separations) and 11 lateral values for each projection angle, I can make an 18x11 matrix. I would like to make a sinogram and back projected image from what would be a parallel beam geometry scan. How might I be able to do this?
I see examples all over with a pre-generated image, using a radon function to then generate a sinogram, and then iradon to back project the image again. I don't have the original image, I have the raw data that I want to use to genrate the sinogram, then use iradon on that sinogram. Hopefully I explained well enough what I am trying to figure out.
I understand the image will not be very nice given my sparse data set, but I can always increase the number of projection angles and parallel beams.
0 Comments
Answers (1)
Aditya
on 13 Sep 2023
Hey Brett,
I understand that you want to make a sinogram and a back projection from CT data matrix.
To generate a sinogram and back-projected image from your raw data acquired in a parallel beam geometry scan, you can follow these steps:
1. Create an empty sinogram matrix: Initialize an empty matrix with dimensions corresponding to the number of projection angles and lateral values. In your case, create an 18x11 matrix to store the sinogram.
2. Populate the sinogram matrix: Iterate through your raw data and fill the sinogram matrix with the corresponding values. Each element in the sinogram matrix represents the intensity measurement at a specific projection angle and lateral position.
3. Apply inverse Radon transform (iradon): Use the `iradon` function in MATLAB to perform the inverse Radon transform on the sinogram matrix. This will reconstruct the back-projected image from the sinogram data.
Here's an example code snippet illustrating these steps:
% Step 1: Create an empty sinogram matrix
sinogram = zeros(18, 11);
% Step 2: Populate the sinogram matrix
for angle = 0:20:340
% Read the data for the current projection angle and lateral position
% Assuming you have a function getRawData(angle, lateral) that returns the data
data = getRawData(angle, lateral);
% Assign the data to the corresponding position in the sinogram matrix
sinogram(angle/20 + 1, :) = data;
end
% Step 3: Apply inverse Radon transform (iradon)
back_projected_image = iradon(sinogram, 0:20:340, 'linear', 'none');
% Display the back-projected image
imshow(back_projected_image, [])
In this example, the `getRawData(angle, lateral)` function represents your method of accessing the raw data for a given projection angle and lateral position. You would need to replace it with your actual data retrieval mechanism.
Keep in mind that with a sparse dataset, the resulting image may not be of high quality. As you mentioned, increasing the number of projection angles and parallel beams can help improve the image reconstruction. Additionally, you can explore advanced reconstruction algorithms and techniques, such as filtered back projection, to enhance the image quality.
You may refer to the following documentation link for more information:
Thanks,
Best Regards
Aditya Kaloji
0 Comments
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!