最近本来在研究TV去噪效果的改进,但是由于自己之前对于TV去噪方法学习太浅,所以理解出了很大的问题,这里想总结一下: 首先是TV去噪的原理,我自己觉得比较好理解的这篇文章是
从欧拉-拉格朗日方程到理论力学和全变分约束降噪 - 知乎 (zhihu.com)
欧拉-拉格朗日(Euler-Lagrange)方程:
∂f∂L−dxd(df′∂L)=0 当$f(x)$满足欧拉-拉格朗日方程时,泛函取极值。
得到高维函数的欧拉-拉格朗日方程式:
∂f∂L−dxd(dfx∂L)−dyd(∂fy∂L)=0 TV去噪通常使用的是L1范数。
Rudin 等人(Rudin1990)观察到,受噪声污染的图像的总变分比无噪图像的总变分明显的大。总变分定义为梯度幅值的积分,定义式为
JT0(u)=∬∣∇u∣dxdy=∬ux2+uy2dxdy 其中,$u_{x}=\frac{\partial u}{\partial x},u_{y}=\frac{{\partial u}}{{\partial y}}$限制总变分就是限制噪声,
在解决问题的过程中,我们同时希望去噪后的图像与原图像的差距不会特别大(图像不失真),因此,在求解这个梯度极小值时,加了一个保真项,结果变成:
J[u(x,y)]=∬∣∇u(x,y)∣dxdy+2λ∬[u(x,y)−u0(x,y)]2dxdy⊥ 后一项为泛函的保真项,λ是松弛因子,调节保真项与梯度的占比,泛函的核
F=2λ(u−u0)2+∣∇u∣=2λ(u−u0)2+(∂x∂u)2+(∂y∂u)<2 泛函取极值的必要条件为满足欧拉方程
∂u∂F−∂x∂(∂ux∂F)−∂y∂(∂uy∂F)=0 其中
∂u∂F=λ(u−u0)∂ux∂F=∣∇u∣∂x∂u∂uy∂F=∣∇u∣∂y∂udivF=∇⋅F=∂x∂Fx+∂y∂Fy=∇⋅(∣∇u∣∇u) 欧拉方程可化简为
λ(u−u0)−∇⋅(∣∇u∣∇u)=0
关于TV的作用我主要是从这篇文章理解的
在图像边缘处,|▽u|越大,1/|▽u|越小,u越趋近于u0,保留了边缘;在平滑区域,|▽u|越大,因此在图像平滑区域能较好地去噪了。
如何理解TV去噪产生的阶梯效应呢? TV的L1范数的作用主要是稀疏
L1范数是我们经常见到的一种范数,它的定义如下:
∥x∥1=i=1∑n∣xi∣ 表示向量x中非零元素的绝对值之和。
L1范数有很多的名字,例如我们熟悉的曼哈顿距离、最小绝对误差等。使用L1范数可以度量两个向量间的差异,如绝对误差和(Sum of Absolute Difference):
SAD(x1,x2)=i∑n∣x1i−x2i∣ 对于L1范数,它的优化问题如下:
min∥x∥1s.t.Ax=b 由于L1范数的天然性质,对L1优化的解是一个稀疏解,因此L1范数也被叫做稀疏规则算子。通过L1可以实现特征的稀疏,去掉一些没有信息的特征,例如在对用户的电影爱好做分类的时候,用户有100个特征,可能只有十几个特征是对分类有用的,大部分特征如身高体重等可能都是无用的,利用L1范数就可以过滤掉。
这是通过L1范数正则项实现的,与其让每一点的梯度都是常数值,不如出现很多0和一个非0值,这也就出现了阶梯效应,但是也保证了边缘。通过调节λ的值,可以在保护边缘和平滑之间进行调节。λ=0时,会过于平滑,为使值达到最小,就让|▽u|尽可能小,所以迭代到最后,可能会得到边界都被模糊掉了的图片,
但是当λ越大,边界保留越好。
继续分析TV算法: 通过梯度下降法
∂t∂u=−欧拉方程∂t∂u=∇⋅(∣∇u∣∇u)−λ(u−u0)∇⋅(∣∇u∣∇u)=div(∣∇u∣∇u)=∂x∂(ux2+uy2ux)+∂y∂(ux2+uy2uy)∇⋅(∣∇u∣∇u)=∣∇u∣3ux2uyy+uxxuy2−2uxuyuxy 利用有限差分求数值解
ui,jn+1=ui,jn−Δtλ(ui,jn−u0(i,j))+Δt(∇⋅∇ui,jn∇ui,jn) 其中为学习率或步长,对二维离散信号(图像),差分形式如下
(ux)i,jn=2ui+1,jn−ui−1,jn(uy)i,jn=2ui,j+1n−ui,j−1n(uxx)i,jn=ui+1,jn−ui−1,jn−2ui,jn(uyy)i,jn=ui,j+1n−ui,j−1n−2ui,jn(uxy)i,jn=(uxy)i,jn=4ui+1,j+1n+ui−1,j−1n−ui−1,j+1n−ui+1,j−1n TV去噪的理解_打着灯笼摸黑的博客-CSDN博客