如何使用 ADMM 解决全变差先验图像去噪?

信息处理 图像处理 matlab 去噪 优化 全变
2022-01-06 06:55:15

我正在查看一些关于使用 Total Variation norm 去噪图像的文章或维基百科。设置为 Rudin Osher Fatemi (ROF) 方案,对应的方程为:

F(u)=Ω|Du|+λΩ(Kuf)2dx

一些来源提到使用 ADMM 优化器来解决这个去噪问题。但我希望有人能够指导我使用一些代码来展示这种方法的实现。MATLAB、Julia 或 Python 中的代码会非常好,只是入门的东西。

谢谢。

2个回答

去噪问题的公式化

问题由下式给出:

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

其中D列堆叠导数运算符

在上面我使用了Anisotropic TV Norm

ADMM 的解决方案

ADMM 问题将被表述为:

argminx,z12xy22+λ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(mI + paramRho * (mD.' * mD), 'chol');

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

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

完整代码可在我的StackExchange Signal Processing Q75231 GitHub 存储库中找到。

备注:对于去模糊问题,打开一个新问题,我也会发布一个代码。

我自己做了一点,你需要适应。
有一个 Douglas Rachford 自己实现的和一个原始的双重方法,这里在通过压缩传感恢复融合帧结构化信号中实现。

请注意,Clarice Poon(巴斯大学)有一些很好的教程。

另一个来源是Gabriel Peyre 的 Numerical Tours请参阅Sobolev 去噪和总变差正则化