Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Flying focal point and cone-beam ziegler correction #144

Open
Zhentao-Liu opened this issue Jan 11, 2025 · 12 comments
Open

Flying focal point and cone-beam ziegler correction #144

Zhentao-Liu opened this issue Jan 11, 2025 · 12 comments

Comments

@Zhentao-Liu
Copy link

Zhentao-Liu commented Jan 11, 2025

New feature. Flying focal point. I here got a curved-plane cbct scan data with flying focal point which means the detector focal point varying between odd/even frame. It means that the centerRow, centerCol params are different to set in set_conebeam(.) for odd/even. How should I achieve it?

@Zhentao-Liu
Copy link
Author

Can I perform forward projection view-by-view?When I perform optimization like demo_leaptorch/test_recon_NN.py with my own cbct scan data. The projection resolution or volume size maybe large. Usually randomly select a view and forward projection, calculate loss, would save meomry cause I have 1200/2400 views or even more. Rather than directly project all views at once.

@Zhentao-Liu Zhentao-Liu changed the title Relationship between leaptorch and leapctype Flying focal point Jan 12, 2025
@kylechampley
Copy link
Collaborator

LEAP does not support FFS directly, but as you suggested you can achieve this by defining multiple instances each with a different geometry. Note that centerRow and centerCol move the detector, not the source.

There is no direct method to perform projections view-by-view. The best way to do this is to split up your data and define multiple instances each with its own geometry.

@Zhentao-Liu
Copy link
Author

Thanks for you prompt reply. I just try out set_modularbeam, but it seems not work well. Should I use set_conebeam twice? But can two leatct instance reconstruct one volume together?

@Zhentao-Liu
Copy link
Author

Zhentao-Liu commented Jan 14, 2025

LEAP does not support FFS directly, but as you suggested you can achieve this by defining multiple instances each with a different geometry. Note that centerRow and centerCol move the detector, not the source.

There is no direct method to perform projections view-by-view. The best way to do this is to split up your data and define multiple instances each with its own geometry.

@kylechampley hello kyle, it seems that project view-by-view would x10 slower than project all views at once. Do you got any idea?

I think I got the reason. You iterate different views in cuda, but I iterate different views in python, thats why it is so slow.

@Zhentao-Liu
Copy link
Author

Currently, volume masking does not improve the speed of forward and backprojection algorithms. I wonder if we could use something like empty space skipping to accelerate the FP and BP algs?

@kylechampley
Copy link
Collaborator

The modular-beam geometry does not model curved detectors. Only the cone-beam geometry does.

Instead of projecting view-by-view, why don't you project all views with the same focal spot position together? This should be much faster. You could use the subsetParameters class to divide the projections amongst the different focal spot positions. There are examples of how to use this in leapctype.py, for example here.

@Zhentao-Liu
Copy link
Author

Zhentao-Liu commented Jan 15, 2025 via email

@kylechampley
Copy link
Collaborator

Iterative reconstruction should give you reduced cone-beam artifacts, so maybe you are doing something wrong or not taking it to convergence.

@Zhentao-Liu
Copy link
Author

Zhentao-Liu commented Jan 15, 2025 via email

@Zhentao-Liu
Copy link
Author

Zhentao-Liu commented Jan 16, 2025

Image
When I conduct FBP, it is actually conduct filtering + weightedbackprojection.
When I conduct filtering + backprojection, it shows cone-angle artifacts.
When I conduct SART which use backprojection, is shows cone-angle artifacts.
I think the reason is that weightedbackprojection would mitigate cone-angle artifacts.

@kylechampley
Copy link
Collaborator

Those artifacts you are seeing in the SART reconstruction are not cone-beam artifacts; they are truncation artifacts from the fact that the patient extends past the field of view of the scanner. A description and solution to this problem is in the d34_iterative_reconstruction_long_object.py demo script.

The weighted backprojection algorithm does not mitigate cone-beam artifacts. What it does is use zero-th order extrapolation off the top and bottom of the detector to fill in some of the missing information from some projections.

@Zhentao-Liu
Copy link
Author

Zhentao-Liu commented Jan 17, 2025

Image
Thanks for your reply! I try the ziegler correction that you mentioned. It did works! But there is still some artifacts left. I think it cannot be totally corrected due to the cone beam mode inherent problem. Anyway thx. And may you simply describe what actually cone-angle (cone-beam) artifacts is?

@Zhentao-Liu Zhentao-Liu changed the title Flying focal point Flying focal point and cone-beam ziegler correction Jan 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants