CERN / TIGRE

TIGRE: Tomographic Iterative GPU-based Reconstruction Toolbox
BSD 3-Clause "New" or "Revised" License
527 stars 180 forks source link

Question about tvdenoising.cu #529

Closed pjueon closed 3 months ago

pjueon commented 3 months ago

Hello. I have a question regarding the tvdenoising algorithm (CUDA/tvdenoising.cu file.). Firstly, please forgive my lack of theoretical background knowledge on TV denoising.

My question is about the update_p function in the code below.

https://github.com/CERN/TIGRE/blob/ae39ee0dc038051bd026dae093ec1f1d311d3d36/Common/CUDA/tvdenoising.cu#L145-L170

What does p represent here?

Initially, when looking at the update_u function, I thought p might be $\nabla u/ | \nabla u|$ from ROF PDE:

$$\nabla \cdot (\nabla u/ | \nabla u|) + \lambda(f-u) = 0$$

However, I'm having trouble understanding the logic of updating p in the update_p function. Could you please explain this logic, or perhaps point me to a theoretical reference related to this?

Thank you for your time. I would really appreciate your assistance.

AnderBiguri commented 3 months ago

Its one of the variables for the primal-dual algorithm used to minimise the ROF. The code is essentially an implementation of this paper: https://pubmed.ncbi.nlm.nih.gov/20352289/. You can read more in the paper or my PhD thesis.

AnderBiguri commented 3 months ago

I actually should add a reference to it, there is a dead link to the paper in the source code. Should update that.

pjueon commented 3 months ago

Thank you very much. I'll check the paper!