Why the amplitude of Ram-Lak filter is multiplied by 2 in iradon transform?

24 vues (au cours des 30 derniers jours)
z0gSh1u
z0gSh1u le 10 Jan 2022
Commenté : Matt J le 10 Jan 2022
The FBP reconstrcution algorithm tells us to convolve the sinogram using Ram-Lak Filter (Ramp Filter) along detector channels for every view. Since the Ramp Kernel is generated using the well-known form:
1/4 n = 0
0 n even
-1/(pi*n)^2 n odd
MATLAB iradon function performs filtering in Fourier Domain (Frequency Domain), but the amplitude is multiplied by 2:
filtImpResp = [filtImpResp filtImpResp(end-1:-1:2)];
filt = 2*real(fft(filtImpResp)); % Here is a factor 2, why?
filt = filt(1:(order/2)+1);
For other implementations like in ASTRA Toolbox, they perform filtering in Spatial Domain (Time Domain), there is also a factor 2 to adjust the amplitude:
pfFilt[iDetectorIndex] = 2.0f * pfData[2*iDetectorIndex];
Without this factor, the value of the reconstructed image is HALF of the ground-truth.
  3 commentaires
z0gSh1u
z0gSh1u le 10 Jan 2022
Yeah.. But why? filtImpResp is the impulse response of Ramp in Spatial domain. Convolution with it is equal to multiplying fft(filtImpResp) in Fourier domain. The multiplier 2 just comes from nowhere. @Matt J
Matt J
Matt J le 10 Jan 2022
Well, I gave you a possiblity in my answer below.

Connectez-vous pour commenter.

Réponses (1)

Matt J
Matt J le 10 Jan 2022
Modifié(e) : Matt J le 10 Jan 2022
Perhaps it is different from what you expect because the backprojection sums only from 0 to 180 degrees. If you summed from 0 to 360, you would not include the factor of 2.

Community Treasure Hunt

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

Start Hunting!

Translated by