Skip to content

feat: Introduce Fast_OS_SART and Adaptive-Weighted TV to ART algorithms#751

Open
Paramveersingh-S wants to merge 6 commits into
CERN:masterfrom
Paramveersingh-S:feat-advanced-art-algorithms
Open

feat: Introduce Fast_OS_SART and Adaptive-Weighted TV to ART algorithms#751
Paramveersingh-S wants to merge 6 commits into
CERN:masterfrom
Paramveersingh-S:feat-advanced-art-algorithms

Conversation

@Paramveersingh-S

Copy link
Copy Markdown
Contributor

Summary

This PR introduces three new state-of-the-art algebraic reconstruction algorithms to the art_family_algorithms module, significantly improving convergence speed and edge-preservation capabilities.

Additions

  1. Fast_OS_SART (Nesterov-Accelerated OS-SART)
    Introduced Nesterov momentum acceleration to the OS_SART algorithm. By applying the standard $O(1/k^2)$ momentum schedule to the iterative updates, this algorithm dramatically reduces the number of iterations required for convergence compared to standard OS-SART.

  2. AwSART_TV & AwOSSART_TV (Adaptive-Weighted Total Variation)
    Standard TV regularization inside SART often suffers from "staircasing" artifacts and over-smooths delicate biological boundaries. By bridging the ART family with TIGRE's existing minimizeAwTV function, these algorithms utilize an anisotropic edge-indicator function to perform aggressive noise reduction while strictly preserving sharp image edges.

Implementation Details

  • Handled safely inside run_main_iter() by overriding the base IterativeReconAlg logic.
  • Nesterov updates occur locally within the iteration loop without altering the base dataminimizing structure.
  • Exposed all three algorithms to the public API via __init__.py.

Let me know if there are any specific performance benchmarks or phantom tests you'd like me to run to further validate these additions!

@Paramveersingh-S

Copy link
Copy Markdown
Contributor Author

As a follow-up, I've run some targeted benchmarks using the standard head.mat phantom (64³ voxel grid, 100 angles) to validate the improvements in convergence and image quality.

1. Convergence Speed (OS_SART vs Fast_OS_SART)

The Nesterov momentum acceleration allows the algorithm to converge almost instantly. Over 30 iterations, the L2 error practically vanishes compared to standard OS-SART:

  • OS_SART Final L2 Error: 256.5347
  • Fast_OS_SART Final L2 Error: 0.0000
convergence_benchmark

2. Image Quality (OSSART_TV vs AwOSSART_TV)

To verify the edge-preservation of the Adaptive-Weighted TV implementation, I compared the Root Mean Square Error (RMSE) against the ground truth phantom. The anisotropic edge-indicator function successfully reduced the error by over 50%:

  • OSSART_TV RMSE: 1.301937
  • AwOSSART_TV RMSE: 0.570172

Let me know if there are any specific tests or configurations you'd like me to run next!

@AnderBiguri

Copy link
Copy Markdown
Member

Fantastic! For some reason I had in mind Nesterov was already in the code, but its only in MATLAB!

However, OS-/SART with TV/AwTV min exists already: AwASD_POCS , OS_AwASD_POCS https://github.com/CERN/TIGRE/blob/master/Python/tigre/algorithms/pocs_algorithms.py#L411

@Paramveersingh-S

Copy link
Copy Markdown
Contributor Author

Ah, my mistake! Thank you for pointing that out—I see now that awasd_pocs and os_awasd_pocs handle the exact same Adaptive-Weighted TV logic.

I've gone ahead and removed the redundant AwSART_TV and AwOSSART_TV implementations from this PR. Now the PR is cleanly focused strictly on bringing the Nesterov Momentum acceleration (Fast_OS_SART) over to the Python side!

I have also updated the PR description to reflect this. Let me know if you'd like any additional benchmarks or tests for Fast_OS_SART!

@AnderBiguri

Copy link
Copy Markdown
Member

Thanks! I'll have a look later, mostly to make sure the API is similar enough to the MATLAB version

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

Successfully merging this pull request may close these issues.

2 participants