How to implement a inverse Iradon Transform to a single projection vector?

17 次查看(过去 30 天)
My question is the example at inverse Iradon Transform to a single projection vector, why the result of iradon need to be divided by 2? <https://www.mathworks.com/help/images/ref/iradon.html>.
Here is the example at the MathWorks webpage:
"
The example of 'Examine Backprojection at a Single Angle':
P = phantom(128);
Perform a Radon transform of the image, then get the projection vector corresponding to a projection at a 45 degree angle.
R = radon(P,0:179);
r45 = R(:,46);
Perform the inverse Radon transform of this single projection vector. The iradon syntax does not allow you to do this directly, because if theta is a scalar it is treated as an increment. You can accomplish the task by passing in two copies of the projection vector and then dividing the result by 2.
I = iradon([r45 r45], [45 45])/2; %Here is my question.
Display the result.
imshow(I, [])
title('Backprojection from 45 degrees')
"
  1 个评论
En
En 2023-3-6
Btw, when I go to the Iradon.m file, I found the normalization of the command result. Which means the result of 'Iradon' is independent to the number of angles it process. To prove it, I just did the below experiment:
P = phantom(128);
R = radon(P,0:179);
I1 = iradon([R(:,46) R(:,46)],[45 45]);
I2 = iradon([R(:,46) R(:,46) R(:,46)],[45 45 45]);
D1 = max(I1, [], 'all')-max(I2, [], 'all');
I3 = iradon([R(:,46) R(:,46)],[45 45])/2;
I4 = iradon([R(:,46) R(:,46) R(:,46)],[45 45 45])/3;
D2 = max(I3, [], 'all')-max(I4, [], 'all');
The result is D1 = 0, D2 = 0.804. Which means the 'I1' and 'I2' is the same.If the example command "I = iradon([r45 r45], [45 45])/2; %Here is my question." from MathWorks is correct. I think D2 should be 0 but it's not, and D1 is 0.
So I just image the iradon transform of a single angle should be written like" I1 = iradon([R(:,46) R(:,46)],[45 45]);" . NOT "I = iradon([r45 r45], [45 45])/2;", which is presented on the MathWorks webpage. Am I wrong?

请先登录,再进行评论。

回答(1 个)

Raghvi
Raghvi 2023-3-14
Hey,
I believe you understand that the iradon syntax does not allow you to Perform the inverse Radon transform of this single projection vector directly, because if theta is a scalar it is treated as an increment. It would look something like this:
Therefore, we would use two copies of the projection angle and pass theta as a vector. When we do this, we are reconstructing the image from 2 projections at 45deg each i.e., there are two propagations of 45deg laying on top of each other. The value of the inverse randon transform is therefore double of what it should be. We divide it by 2 to get the accurate value of backpropagation from 45deg.
You can find more information on inverse radon transform here

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by