# TV\_denoise

最近本来在研究TV去噪效果的改进，但是由于自己之前对于TV去噪方法学习太浅，所以理解出了很大的问题，这里想总结一下： 首先是TV去噪的原理，我自己觉得比较好理解的这篇文章是

[从欧拉-拉格朗日方程到理论力学和全变分约束降噪 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/93350544)

欧拉-拉格朗日(Euler-Lagrange)方程：

$$
\dfrac{\partial L}{\partial f}-\dfrac{\mathrm{d}}{\mathrm{d}x}(\dfrac{\partial L}{\mathrm{d}f'})=0
$$

当$f(x)$满足欧拉-拉格朗日方程时，**泛函取极值**。

得到高维函数的欧拉-拉格朗日方程式：

$$
\dfrac{\partial L}{\partial f}-\dfrac{\mathrm{d}}{\mathrm{d}x}(\dfrac{\partial L}{\mathrm{d}f\_x})-\dfrac{{\mathrm{d}}}{{\mathrm{d}y}}(\dfrac{{\partial L}}{{\partial}f\_y})=0
$$

TV去噪通常使用的是L1范数。

***

Rudin 等人（Rudin1990）观察到，**受噪声污染的图像的总变分比无噪图像的总变分明显的大**。总变分定义为梯度幅值的积分，定义式为

$$
J\_{T\_0}(u)=\iint|\nabla u|dx dy=\iint\sqrt{u\_x^2+u\_y^2}dx dy
$$

其中，$u\_{x}=\frac{\partial u}{\partial x},u\_{y}=\frac{{\partial u}}{{\partial y}}$限制总变分就是限制噪声，

在解决问题的过程中，我们同时希望去噪后的图像与原图像的差距不会特别大（图像不失真），因此，**在求解这个梯度极小值时，加了一个保真项**，结果变成：

$$
\text{J}\[u(x,y)]=\iint|\nabla u(x,y)|dxdy+\dfrac{\lambda}{2}\iint\[u(x,y)-u\_0(x,y)]^2dxdy^{\perp}
$$

后一项为泛函的保真项，λ是松弛因子，调节保真项与梯度的占比,泛函的核

$$
\text{F}=\frac{\lambda}{2}(u-u\_0)^2+|\nabla u|=\frac{\lambda}{2}{(u-u\_0)}^2+\sqrt{(\frac{\partial u}{\partial x})^2+(\frac{\partial u}{\partial y})^2\_<}
$$

泛函取极值的必要条件为满足欧拉方程

$$
\dfrac\partial{\partial u}F-\dfrac\partial{\partial x}\Bigl(\dfrac\partial{\partial u\_x}F\Bigr)-\dfrac\partial{\partial y}\Biggl(\dfrac{\partial}{\partial u\_y}F\Bigr)=0
$$

其中

$$
\dfrac{\partial}{\partial u}F=\lambda(u-u\_0) \ \dfrac{\partial}{\partial u\_x}F=\dfrac{\dfrac{\partial u}{\partial x}}{|\nabla u|} \ \dfrac{\partial}{\partial u\_y}F=\dfrac{\dfrac{\partial u}{\partial y}}{|\nabla u|} \ divF=\nabla\cdot F=\dfrac{\partial}{\partial x}F\_{x}+\dfrac{\partial}{{\partial y}}F\_{y}={\nabla}\cdot(\dfrac{\nabla u}{|\nabla u|})
$$

欧拉方程可化简为

$$
\lambda(u-u\_0)-\nabla\cdot\left(\dfrac{\nabla u}{|\nabla u|}\right)=0
$$

***

关于TV的作用我主要是从这篇文章理解的

在图像边缘处，|▽u|越大，1/|▽u|越小，u越趋近于u0，保留了边缘；在平滑区域，|▽u|越大，因此在图像平滑区域能较好地去噪了。

***

如何理解TV去噪产生的阶梯效应呢？ **TV的L1范数的作用主要是稀疏**

L1范数是我们经常见到的一种范数，它的定义如下：

$$
|\mathbf{x}|*1=\sum*{i=1}^{n}|x\_i|
$$

表示向量x中非零元素的绝对值之和。

L1范数有很多的名字，例如我们熟悉的曼哈顿距离、最小绝对误差等。使用L1范数可以度量两个向量间的差异，如绝对误差和（Sum of Absolute Difference）：

$$
SAD(x\_1,x\_2)=\sum\_i^n|x\_{1i}-x\_{2i}|
$$

对于L1范数，它的优化问题如下：

$$
min|\mathbf{x}|\_1 \ s.t.Ax=b
$$

由于L1范数的天然性质，对L1优化的解是一个稀疏解，因此L1范数也被叫做稀疏规则算子。**通过L1可以实现特征的稀疏，去掉一些没有信息的特征**，例如在对用户的电影爱好做分类的时候，用户有100个特征，可能只有十几个特征是对分类有用的，大部分特征如身高体重等可能都是无用的，利用L1范数就可以过滤掉。

***

### 这是通过L1范数正则项实现的，与其让每一点的梯度都是常数值，不如出现很多0和一个非0值，这也就出现了阶梯效应，但是也保证了边缘。通过调节λ的值，可以在保护边缘和平滑之间进行调节。λ=0时，会过于平滑，为使值达到最小，就让|▽u|尽可能小，所以迭代到最后，可能会得到边界都被模糊掉了的图片，

但是当λ越大，边界保留越好。

继续分析TV算法： 通过梯度下降法

$$
\dfrac{\partial u}{\partial t}=-\mathbb{欧拉方程} \ \dfrac{\partial u}{\partial t}=\nabla\cdot\left(\dfrac{\nabla u}{|\nabla u|}\right)-\lambda(u-u\_0) \ \nabla\cdot\left(\dfrac{\nabla u}{\lvert\nabla u\rvert}\right)=div\left(\dfrac{{\nabla u}}{\lvert{\nabla u\rvert}}\right)=\dfrac{\partial}{\partial x}\left(\dfrac{u\_x}{\sqrt{{u\_x}^2+{u\_y}^2}}\right)+\dfrac{\partial}{{\partial y}}(\dfrac{{u\_y}}{{\sqrt{{u\_{x}}^2+{u\_y}}^2}}) \ \nabla\cdot\left(\frac{\nabla u}{|\nabla u|}\right)=\frac{{u\_x}^2u\_{yy}+u\_{xx}{u\_y}^2-2u\_xu\_y u\_{xy}}{|\nabla u|^3}
$$

利用有限差分求数值解

$$
u^{n+1}*{i,j}=u^{n}*{i,j}-\Delta t\lambda\Big(u^n\_{i,j}-u\_0(i,j)\Big)+\Delta t(\nabla\cdot\dfrac{\nabla u^n\_{i,j}}{\big|\nabla u^{n}\_{i,j}\big|})
$$

其中为学习率或步长，对二维离散信号（图像），差分形式如下

$$
\begin{array}{c} \left(u\_{x}\right)*{i, j}^{n}=\frac{u*{i+1, j}^{n}-u\_{i-1, j}^{n}}{2} \ \left(u\_{y}\right)*{i, j}^{n}=\frac{u*{i, j+1}^{n}-u\_{i, j-1}^{n}}{2} \ \left(u\_{x x}\right)*{i, j}^{n}=u*{i+1, j}^{n}-u\_{i-1, j}^{n}-2 u\_{i, j}^{n} \ \left(u\_{y y}\right)*{i, j}^{n}=u*{i, j+1}^{n}-u\_{i, j-1}^{n}-2 u\_{i, j}^{n} \ \left(u\_{x y}\right)*{i, j}^{n}=\left(u*{x y}\right)*{i, j}^{n}=\frac{u*{i+1, j+1}^{n}+u\_{i-1, j-1}^{n}-u\_{i-1, j+1}^{n}-u\_{i+1, j-1}^{n}}{4} \end{array}
$$

[TV去噪的理解\_打着灯笼摸黑的博客-CSDN博客](https://blog.csdn.net/qq_39594939/article/details/104089819)
