如何使用 ADMM 解决全变差先验的非盲图像去模糊?

信息处理 图像处理 matlab 反卷积 优化 全变
2021-12-22 07:23:46

如何使用 Total Variation 框架来解决去模糊问题?
特别是使用 ADMM 作为求解器。
可以假设模糊算子是已知的、线性的和移位不变的。

电视方法的优点是什么?有什么缺点?

这是How to Solve Image Denoising with Total Variation Prior Using ADMM的续篇。

1个回答

问题的表述

我在以下假设下解决问题:

  • 模糊算子是线性和空间不变的(因此通过卷积应用)。
  • 模糊算子是已知的。
  • 有测量噪音。

所以模型是:

y=Hx+n

其中H是模糊核的矩阵形式,n是AWGN噪声,x是要估计的参考图像。
在模型中,我们假设DxExponential(λ)(参见指数分布)。

因此优化问题(MAP Estimator的等价物)由下式给出:

argminx12Hxy22+λTV(x)=argminx12Hxy22+λDx1

请注意,此模型仅在添加噪声时才有意义,否则 TV 项只会使输出平滑。因此,TV 的正则化允许在反转模糊算子和平滑噪声之间进行控制。

ADMM 的解决方案

ADMM 问题将被表述为:

argminx,z12Hxy22+λz1subject toDx=z

ADMM 将有 3 个步骤:

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

在哪里mC = decomposition(mH.' * mH + paramRho * (mD.' * mD), 'chol');(这与How to Solve Image Denoising with Total Variation Prior Using ADMM的区别?)。
该参数paramRho是ADMM求解器的参数。

我在 MATLAB 函数中编写了这个解决方案 - SolveLsTvAdmm().
我将它与 CVX 的参考文献进行了比较:

在此处输入图像描述 在此处输入图像描述

在上面的噪声水平是3 / 255(图像被缩放到范围[0, 1]),模糊算子是半径为 的 Box Blur 2
我没有优化paramLambda到它的最佳值。所以可以得到更好的结果。请注意,对于这种低水平paramLambda和小尺寸的图像,ADMM 求解器比 CVX 的直接求解器要慢。

完整代码可在我的StackExchange Signal Processing Q75471 GitHub 存储库中找到(查看SignalProcessing\Q75471文件夹)。