Hi Ryan, If you check our code, the normalization step is quite simplistic to avoid a backprojection: we simply calculate and divide by the length of the intersection between each ray and the "image box" (parallelepiped corresponding to the space occupied by the volume) using the rtk::RayBoxIntersectionImageFilter <https://www.openrtk.org/Doxygen/classrtk_1_1SARTConeBeamReconstructionFilter.html>. This is exactly what you should get if you forward project a volume of 1 with our Joseph forward projectors. See the diagram from the implementation of SART: https://www.openrtk.org/Doxygen/classrtk_1_1SARTConeBeamReconstructionFilter.html Maybe you can try to do the same here? For what you want to do, it would be better to use a forward and backprojector combining the projection and a vector field... We have it available for the backprojection <https://www.openrtk.org/Doxygen/classrtk_1_1FDKWarpBackProjectionImageFilter.html> and for the forward <https://www.openrtk.org/Doxygen/classrtk_1_1ForwardWarpImageFilter.html>, maybe we should try to implement it in the SART command line application for you... I have opened an issue to track this: https://github.com/RTKConsortium/RTK/issues/721 Cheers, Simon
On Mon, Apr 14, 2025 at 6:25 PM Andosca, Ryan <rando...@mednet.ucla.edu> wrote: > Hi, > > So, my experience with coding, especially in C, is extremely limited. I > mostly work in MATLAB, and as such I've been primarily using the built-in > console applications to perform reconstruction on CBCT datasets. The > rtksart application works great and provides a beautiful reconstruction. My > goal is to effectively do the same reconstruction, but tack on motion > compensation to each iteration. > > After delving into the algorithm implementation in rtksart as much as I am > able, I wrote a MATLAB workflow that boils down to: > > - Start with image of zeros > - Randomize gantry angle order > - Iterate over gantry angles: > - Load current projection forward and backward motion compensation DVFs > - Deform current image iteration to current gantry angle breathing > state > - Forward project deformed image > - Subtract deformed projections from raw CBCT image data > - Back project the subtraction image > - NORMALIZE BACK PROJECTION (this is where I think my issue is) > - Deform normalized back projection back to the original image space > - Update current image: img = img + lambda * > (normalized_back_projection / number_of_gantry_angles) > - Note: This step, as it also contains normalization, may also be a > source of my issue... > - Set negatives to 0 > - Repeat > > > I get an image that is much as I expect - a much sharper diaphragm and > generally higher definition in soft tissue structures. So I must be > generally on the right track. The issue is that the normalization is > clearly off in some way. I have a bright circle artifact in the middle of > the image and some striping throughout. Try as I might to understand it, I > couldn't discern how normalization was done in the rtksart application. So, > this is the method I used: > > - Create an image of 1s of the size of the final (SART reconstructed) > image. > - Forward project through this image of 1s > - Back project through the resulting forward projection > - In the normalization step in the MCSART process detailed above, I > simply divide by this resulting back projection. > > > Knowing all of that, any idea what my issue might be leading to my > artifacts? Ultimately, I know it would be more ideal if I just altered the > rtksart application itself to include motion compensation, and then I'd > just be using the built-in normalization that clearly works, but I find my > abilities lacking when I attempt to do this... So instead I am just seeking > to understand how that application implements normalization, so that I can > use a similar normalization in my algorithm! > > I greatly appreciate any help provided! > > Best, > R. Andosca > GSR > UCLA Health > > > > > > ------------------------------ > > UCLA HEALTH SCIENCES IMPORTANT WARNING: This email (and any attachments) > is only intended for the use of the person or entity to which it is > addressed, and may contain information that is privileged and confidential. > You, the recipient, are obligated to maintain it in a safe, secure and > confidential manner. Unauthorized redisclosure or failure to maintain > confidentiality may subject you to federal and state penalties. If you are > not the intended recipient, please immediately notify us by return email, > and delete this message from your computer. > _______________________________________________ > Rtk-users mailing list > rtk-us...@openrtk.org > https://www.creatis.insa-lyon.fr/mailman/listinfo/rtk-users >
_______________________________________________ Rtk-users mailing list rtk-us...@openrtk.org https://www.creatis.insa-lyon.fr/mailman/listinfo/rtk-users