lanl / scico

Scientific Computational Imaging COde
BSD 3-Clause "New" or "Revised" License
96 stars 17 forks source link

Enabling use of TV prior with a forward operator with Accelerated PGM #450

Closed shnaqvi closed 10 months ago

shnaqvi commented 1 year ago

Enhancement request

My deconvolution problem of deblurring with space-variant PSF involves a forward operator that is a weighted sum of convolutions. This algorithm is presented in Flicker & Rigaut (2005), reviewed here and used very recently here. Thus the final optimization problem as presented in Eq 1 of the last reference looks like this:

image

Also, this last reference uses FISTA to speed up the problem convergence. However, I'm not able to use FISTA with SCICO because AcceleratedPGM does not currently support solving the problem with a forward operator and TV regularization. Even though TV prior is supported by other algorithms, like ADMM and PDHG, they have other issues of their own which prohibits me from using those. Specifically:

Reformulating the problem in a way that it doesn't require complex l2 prox computation with ProximalADMM hasn't worked for me either, despite extensive penalty parameter tuning. And its iterations are also much slower than APGM.

Thus this issue is actually an enhancement request to enable TV regularization with a forward operator when using AcceleratedPGM. @bwohlberg mentioned the fast subiteration-free parallel proximal method for TV minimization presented by Kamilov, 2016, which can be a likely contender.

This would be a really useful addition as it would make the fastest proximal gradient method even more applicable across application domains, especially all the deblur problems which rely on TV regularization to enforce sharper edges or blockiness of image through sparsity in gradient.

shnaqvi commented 11 months ago

Hi @bwohlberg, took some time but here I am finally ☺️. I've gone through Kamilov's algorithm in detail and have implemented and tested it on synthetic blur data, getting promising reconstruction with the expected fast execution time. I've integrated it in scico's main branch, creating a pull request. I've made sure to follow the implementation style of other norms defined in scico and document generously. Would you be kind to please review it, so we can merge it to in the official pip distribution?

P.S. I've also reached out to Ulugbek Kamilov to have this implementation reviewed but unfortunately haven't hear back from him in a week.

bwohlberg commented 11 months ago

Thanks! Let's move further discussion to the PR.