2

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')

"

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;  

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?

Ander Biguri
  • 35,140
  • 11
  • 74
  • 120
En Lu
  • 21
  • 3

1 Answers1

1

You are right.

Nothing else to answer really. I suspect this is an artifact from an older version if iradon(). Perhaps submit an issue/bug to MathWorks?

Admittedly, I am not sure if its the function that should change instead.

If you set the filter to "none", I would expect to get essentially a backprojector, which means that the values should indeed stack. But instead, they are also normalized. I think this is a mix of dubious choices at implementation and lack of support, but who knows.

Ander Biguri
  • 35,140
  • 11
  • 74
  • 120
  • Hi Ander, many thx for your comments. I will send the issue to Matlab to see how it is going. – En Lu Mar 09 '23 at 14:44