[Rtk-users] Backprojection in 2D/3D and adjointness concerns

Laura Hellwege l.hellwege at uni-luebeck.de
Thu Jan 9 13:10:33 CET 2025


Hello!

I have some questions related to this post from 2015:
https://public.kitware.com/pipermail/rtk-users/2015-February/009750.html

First, the referenced website "http://www.openrtk.org/Doxygen/classrtk_1_1NormalizedJosephBackProjectionImageFilter.html" seems to not exist anymore.

Second, I have some issues concerning backprojection and adjointness:
For the following I am using these parameters:
sid = 500
sdd = 1000
n_projections = 4
angular_increment = 90.0
I am using the python version of ITK and tried forward projection (CUDAForwardProjectionImageFilter) followed by backprojection (JosephBackProjectionImageFilter/CudaBackProjectionImageFilter/CudaRayCastBackProjectionImageFilter) of an image with a single pixel value set to one:

img = np.zeros(image_size)

img[image_size[0] // 2, image_size[1] // 2, image_size[2] // 2] = 1.0


  1.  I do not get expected results for the 2D case:

image_size = [3, 1, 3]

pixel_size_mm = 1.0

slice_thickness_mm = 1.0



projection_size = [5, 1]

projection_spacing = [1.0, 1.0]



After forward projection, the backprojected image by JosephBackProjectionImageFilter is all zeros. Is this expected behavior?



  1.  According to the definition of adjoint operator, the following should hold:

<Ax, y> = <x, adjoint(A)y>            (with <.,.> indicating the scalar product)



This works for 3D CPU case (JosephBackProjectionImageFilter):

image_size = [3, 3, 3]

pixel_size_mm = 1.0

slice_thickness_mm = 1.0



projection_size = [5, 5]

projection_spacing = [1.0, 1.0]


<Ax, y> = <fp, fp> = 9.0
<x, adjoint(A)y> = <img, bp> = 9.000001907348633
This discrepancy is within tolerance.


  1.  However, in the 3D GPU case:

<x, adjoint(A)y> = <img, bp> = 4.0                                                           for CudaBackProjectionImageFilter

and

<x, adjoint(A)y> = <img, bp> = 0.33841705322265625                for CudaRayCastBackProjectionImageFilter

What kind of filtering or normalization has been used on the projections/images?  I could not verify adjointment with the aforementioned method of backprojecting a sinogram of ones and applying division.
Is there a GPU backprojection filter for which adjointness holds?

Thank you in advance for your reply and suggestions.
Best regards, Laura

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.creatis.insa-lyon.fr/pipermail/rtk-users/attachments/20250109/70397594/attachment.htm>


More information about the Rtk-users mailing list