# How to Solve Non Blind Image Deblurring with Total Variation Prior Using ADMM?

How could one use the Total Variation frame work to solve the Deblurring problem?
Specifically using the ADMM as a solver.
One could assume the blurring operator is known, linear and shift invariant.

What are the advantages of the TV approach? What are the disadvantages?

This is a continuation of How to Solve Image Denoising with Total Variation Prior Using ADMM.

• It is better to have a question about the non blind case and a dedicated question to the blind case.
– Royi
May 29 '21 at 13:32
• I answered on the Non Blind case. You may open another question on the blind case.
– Royi
Jun 5 '21 at 11:55
• @Royi, I am also interested in the Blind Version. Could you extend it as well?
– Mark
Jun 6 '21 at 15:11
• I see. I think it is better to have a dedicated question for the blind deblurring case.
– Royi
Jun 6 '21 at 18:05

## Formulation of the Problem

I am solving the problem under the following assumptions:

• The blurring operator is Linear and Spatially Invariant (Hence applied by convolution).
• The blurring operator is known.
• There is a measurement noise.

So the model is:

$$\boldsymbol{y} = H \boldsymbol{x} + \boldsymbol{n}$$

Where $$H$$ is the matrix form of the blurring kernel, $$\boldsymbol{n}$$ is AWGN noise and $$\boldsymbol{x}$$ is the reference image to be estimated.
In the model, we assume that $$D \boldsymbol{x} \sim \text{Exponential} \left( \lambda \right)$$ (See Exponential Distribution).

Hence the optimization problem (Equivalent of the MAP Estimator) is given by:

$$\arg \min_{\boldsymbol{x}} \frac{1}{2} {\left\| H \boldsymbol{x} - \boldsymbol{y} \right\|}_{2}^{2} + \lambda \operatorname{TV} \left( \boldsymbol{x} \right) = \arg \min_{x} \frac{1}{2} {\left\| H \boldsymbol{x} - \boldsymbol{y} \right\|}_{2}^{2} + \lambda {\left\| D \boldsymbol{x} \right\|}_{1}$$

Pay attention that this model makes sense only when noise is added as otherwise the TV term only smoothens the output. So the regularization of the TV allows to control between inversing the blurring operator and smoothing the noise.

The ADMM problem will be formulated as:



\begin{aligned} \arg \min_{\boldsymbol{x}, \boldsymbol{z}} \quad & \frac{1}{2} {\left\| H \boldsymbol{x} - \boldsymbol{y} \right\|}_{2}^{2} + \lambda {\left\| \boldsymbol{z} \right\|}_{1} \\ \text{subject to} \quad & D \boldsymbol{x} = \boldsymbol{z} \end{aligned}

The ADMM will have 3 steps:

1. vX = mC \ (vY + (paramRho * mD.' * (vZ - vU)));.
2. vZ = ProxL1(mD * vX + vU, paramLambda / paramRho);.
3. vU = vU + mD * vX - vZ;.

Where mC = decomposition(mH.' * mH + paramRho * (mD.' * mD), 'chol'); (That's the difference from How to Solve Image Denoising with Total Variation Prior Using ADMM?).
The parameter paramRho is the parameter of the ADMM solver.

I coded this solution in a MATLAB function - SolveLsTvAdmm().
I compared it to a reference by CVX:

In the above the noise level was 3 / 255 (Image was scaled to the range [0, 1]) and the blurring operator was Box Blur with radius of 2.
I didn't optimize the paramLambda to its optimal value. So one could get better results. Pay attention that for this low level of paramLambda and small size of an image the ADMM solver is slower then the direct solver of CVX.

The full code is available on my StackExchange Signal Processing Q75471 GitHub Repository.