Image recovery from partial Fourier Measurement via TV minimization

Hello !

I would like to solve $$ f^{#}=\underset{g \in \mathbb{C}^{NxN}}{\operatorname{argmin}} |g|{\textrm{TV}}\ \ \ \textrm{such that}\ \ \ |\rho\circ(\mathcal{F}\Omega g-y)|_2 \leq \xi$$ where f would be our initial Image, y = \mathcal{F}_\Omega f + \xi is our partial Fourier Measurement and \rho denotes a weight vector (but if I implement it without that \rho I would already be happy).

I played around with cvx and got it working for smaller images(~64x64), but it didn’t work for bigger problems so I looked for other solvers, namely TFOCS.

Can anyone help me with the implementation, or point me in the right direction (or even towards another solver)?

Thanks!

Did you try MOSEK?

We are the maker and of MOSEK and if did not work then it would interest us.

Hello and thanks for your reply!

I did indeed try MOSEK with cvx and it did work fine (as did SDPT3 and SeDuMi). But my memory limits me severely (up to 64x64 it’s fine) and I thought that comes from the fact that I’m using a naive fourier transformation and not the fft (as it does not work with cvx).

Do you have any suggestion on how I could solve this or in which directions I could search for an appropriate solver?

CVX is simply not designed for large-scale problems. It is designed to make it easy to build models; and interior-point methods in general don’t scale as well as first-order methods. (Of course, they hit higher accuracy levels, so there’s a tradeoff…)

First order method scales better for sure. If you for instance call MOSEK directly from C, then you will of course save some overhead. Whether that is a lot is hard to say.

Yes that’s what I understood from reading other comments from you, and therefore I started looking into other solvers to find something more appropriate for my problem (and I think you did a great job with cvx as it is really accessible for people without prior experience).
So TFOCS is still a interior-point method, would I face the same problem?
Do you by chance have an idea of how to solve my problem appropriately?