How to use 'CVX' to solve convolution-based problem

In the field of image processing, convolution is often used. I want to minimize a norm function involving convolution, for example:

\text{minimize} & |Y-D(X*B)|_2 \
\text{subject to} & L(i,j)\leq X(i,j)\leq U(i,j) \

where Y is a constant matrix, X is variable matrix, D is down-sampling matrix, * is the convolution operator and B is the point spread function (PSF) which is generally a smoothing kernel,L and U are also constant matrixes.

One feasible solution reshapes the variable matrix X into a vector. In order to transform convolution operator * into matrix multiplication, smoothing kernel B should be converted into a matrix. But, the size of B increases so much that out-of-memory will happen.

Is there a better way to solve the problem?

Thanks very much!

I’m afraid there is not a better way. There is certainly a lot of structure in a problem like this. However, only kind of structure that the underlying solvers recognize is sparsity.

Thanks for mcg’s answer!

If CVX supports sparsity, it will be an improvement to transform B into a sparse matrix. Maybe I should have a try.

Yes, that’s a good point. If your kernel is not too large, B should actually be reasonably sparse. But still, 2-D images get large fast, so CVX’s solvers may still struggle.