图像降噪算法——低秩聚类:WNNM算法
图像降噪算法——低秩聚类:WNNM算法图像降噪算法——低秩聚类:WNNM算法基本原理python代码结论图像降噪算法——低秩聚类:WNNM算法同样是为了完善自己知识版图的完整性,我决定再补充下低秩聚类算法的相关算法,低秩聚类算法同样是一大类算法,这篇博客是挑选了其中最经典的一种算法WNNM算法进行展开学习,由于没有在这方面做过太多相关的工作,因此可能理解相对肤浅,还请读者见谅基本原理python代
图像降噪算法——低秩聚类:WNNM算法
图像降噪算法——低秩聚类:WNNM算法
同样是为了完善自己知识版图的完整性,我决定再补充下低秩聚类算法的相关算法,低秩聚类算法同样是一大类算法,这篇博客是挑选了其中最经典的一种算法WNNM算法进行展开学习,由于没有在这方面做过太多相关的工作,因此可能理解相对肤浅,还请读者见谅
1. 基本原理
在写这篇博客之前,我先学习了稀疏表达相关的知识,这里我从稀疏表达算法出发,引入低秩聚类算法的相关解释:
在稀疏表达相关算法中,将图像建模成 Y = D X \mathbf{Y}=\mathbf{D}\mathbf{X} Y=DX的形式,其中 Y \mathbf{Y} Y是有单个样本按列组成而成的样本矩阵,注意这里的样本并没有要求是相似的, D \mathbf{D} D是字典矩阵,矩阵中每一列为一个基向量或者子空间, X \mathbf{X} X则为系数矩阵,在系数表达中给定的限制条件是要求系数矩阵是稀疏的。我们通过一个过完备的字典和稀疏的系数矩阵就可以还原样本,而噪声不行,因此可以通过稀疏表达进行去噪。
而在低秩聚类相关算法中,是将图像建模成 Y = X − N \mathbf{Y}=\mathbf{X} - \mathbf{N} Y=X−N,其中 Y \mathbf{Y} Y同样是由带有噪声的相似样本组成而成的样本矩阵。 X \mathbf{X} X和 N \mathbf{N} N分别为对应的的无噪声的样本矩阵以及噪声。我们给出的限制条件是 X \mathbf{X} X是低秩矩阵。由于相似样本组成的矩阵具备低秩性,噪声不具备低秩性,因此通过低秩聚类可以实现图像降噪的效果。
由此可见,从降噪的本质上来将,稀疏表达的稀疏和低秩聚类中的聚类是具有一定相关性的。
为什么相似样本具备低秩性呢?参考图像降噪方法综述中的说法,当我们拍摄一张大草原的图片时,草原是由草组成的,而草是相似的,如果图片上全是草,那么这张图片实际包含的信息是很少的,因此可以理解为草是草的复制品,这就是低秩性的一个直观理解。
那么接下来就开始具体将WNNM算法的实现,主要参考
非局部相似性去噪算法研究
Weighted Nuclear Norm Minimization with Application to Image Denoising
WNNM的全称是Weighted Nuclear Norm Minimization,中文翻译成加权核范数最小化方法,算法的流程如下图所示:
如果在图像上搜索相似patch的流程就不用赘述了,方法多种多样,重要的是,假定我们要降噪的图像块为
P
i
\boldsymbol{P_i}
Pi,由该图像块以及图像上与其相似的图像块组成的矩阵为
Y
i
\boldsymbol{Y_i}
Yi,对应的降噪后的矩阵为
X
i
\boldsymbol{X_i}
Xi,低秩矩阵最小化可以用来求矩阵的解,于是我们得到目标函数:
X
i
=
argmin
x
i
∥
Y
i
−
X
i
∥
F
2
+
rank
(
X
i
)
\boldsymbol{X}_{i}=\operatorname{argmin}_{x_{i}}\left\|\boldsymbol{Y}_{i}-\boldsymbol{X}_{i}\right\|_{F}^{2}+\operatorname{rank}\left(\boldsymbol{X}_{i}\right)
Xi=argminxi∥Yi−Xi∥F2+rank(Xi)但是,其中
∥
X
∥
F
\left\|\boldsymbol{X}\right\|_F
∥X∥F是F范数,F范数的定义是矩阵
X
\boldsymbol{X}
X各项元素的绝对值平方的总和,即
∥
X
∥
F
≡
∑
i
=
1
m
∑
j
=
1
n
∣
x
i
j
∣
2
\|\mathbf{X}\|_{F} \equiv \sqrt{\sum_{i=1}^{m} \sum_{j=1}^{n}\left|x_{i j}\right|^{2}}
∥X∥F≡i=1∑mj=1∑n∣xij∣2上式是一个非凸函数,求解过程将是一个NP问题,因此需要对该问题转为凸优化问题后再求解,为此,前辈提出了标准核范数最小化的求解方法,也就是NNM——本文要介绍的WNNM算法的前身,NNM的目标函数如下:
X
i
=
argmin
X
i
∥
Y
i
−
X
i
∥
F
2
+
λ
∥
X
i
∥
∗
\boldsymbol{X}_{i}=\operatorname{argmin}_{X_{i}}\left\|\boldsymbol{Y}_{i}-\boldsymbol{X}_{i}\right\|_{F}^{2}+\lambda\left\|\boldsymbol{X}_{i}\right\|_*
Xi=argminXi∥Yi−Xi∥F2+λ∥Xi∥∗式中,
λ
\lambda
λ是一个正数,
∥
X
i
∥
∗
\left\|\boldsymbol{X}_{i}\right\|_*
∥Xi∥∗是核范数,核范数的定义为
∥
X
∥
∗
=
tr
(
X
T
X
)
=
tr
(
Σ
)
\|\boldsymbol{X}\|_{*}=\operatorname{tr}\left(\sqrt{\boldsymbol{X}^{T} \boldsymbol{X}}\right)=\operatorname{tr}(\boldsymbol{\Sigma})
∥X∥∗=tr(XTX)=tr(Σ)
求解方法是对 Y i \boldsymbol{Y_i} Yi进行奇异值分解为 Y j = U Σ V \boldsymbol{Y}_{j}=\boldsymbol{U \Sigma V} Yj=UΣV,然后对奇异值进行软阈值收缩: S λ ( Σ ) i i = max ( Σ i i − λ , 0 ) \mathcal{S}_{\lambda}(\boldsymbol{\Sigma})_{i i}=\max \left(\boldsymbol{\Sigma}_{i i}-\lambda, 0\right) Sλ(Σ)ii=max(Σii−λ,0)其中, Σ i i \boldsymbol{\Sigma}_{i i} Σii为奇异矩阵 Σ \boldsymbol{\Sigma} Σ对角线元素,于是得到目标函数的解: X i = U S λ ( Σ ) V \boldsymbol{X}_{i}=\boldsymbol{U}\mathcal{S}_{\lambda}\left(\boldsymbol{\Sigma}\right) \boldsymbol{V} Xi=USλ(Σ)V在NNM算法中,是使用同一个 λ \lambda λ值对所有奇异值进行软阈值收缩,这样做没有考虑到图像的信息主要集中在数值较大的上这个特点,因此会导致图像细节过度平滑而变得模糊,为了解决这个问题,于是就诞生了WNNM算法,使用不同的 λ \lambda λ值对奇异值进行软阈值收缩,数值大的奇异值对应数值小的 λ \lambda λ。由此我们得到目标函数: X ^ i = argmin X i 1 σ n 2 ∥ Y i − X i ∥ F 2 + ∥ X i ∥ w , ∗ \hat{\boldsymbol{X}}_{i}=\operatorname{argmin}_{X_{i}} \frac{1}{\sigma_{n}^{2}}\left\|\boldsymbol{Y}_{i}-\boldsymbol{X}_{i}\right\|_{F}^{2}+\left\|\boldsymbol{X}_{i}\right\|_{\boldsymbol{w},*} X^i=argminXiσn21∥Yi−Xi∥F2+∥Xi∥w,∗其中 σ n 2 \sigma_{n}^{2} σn2为噪声方差,用于归一化F范数,而其中 w = [ w 1 , … , w n ] \boldsymbol{w}=\left[w_{1}, \ldots, w_{n}\right] w=[w1,…,wn]中的每一项都为非负数,对应每一个奇异值,如下: w i = c k / ( σ i ( X ) + ε ) {w}_{i}=c \sqrt{k} /\left(\sigma_{i}\left(\boldsymbol{X}\right)+\varepsilon\right) wi=ck/(σi(X)+ε) 其 中 , σ i ( X ) 其中,\sigma_{i}\left(\boldsymbol{X}\right) 其中,σi(X)为 X \boldsymbol{X} X的第 i i i奇异值,可以观察到,当奇异值越大时权重越小。 k k kw为相似图像patch的数量, ε \varepsilon ε为防止被零正常的小参数。但是这里有个问题是, σ i ( X ) \sigma_{i}\left(\boldsymbol{X}\right) σi(X)是未知的呀,我们可以假设在初始时刻,噪声能量是在各个特征上分布是均匀的,因此初始化 σ i ( X ) \sigma_{i}\left(\boldsymbol{X}\right) σi(X)为: σ i ( X ) = max ( σ i 2 ( Y ) − k σ n 2 , 0 ) \sigma_{i}\left(\boldsymbol{X}\right)=\sqrt{\max \left(\sigma_{i}^{2}\left(\boldsymbol{Y}\right)-k \sigma_{n}^{2}, 0\right)} σi(X)=max(σi2(Y)−kσn2,0)最后同样我们对 Y i \boldsymbol{Y_i} Yi进行奇异值分解为 Y j = U Σ V \boldsymbol{Y}_{j}=\boldsymbol{U \Sigma V} Yj=UΣV,然后目标函数的解为: X i = U S w ( Σ ) V \boldsymbol{X}_{i}=\boldsymbol{U}\mathcal{S}_{\boldsymbol{w}}\left(\boldsymbol{\Sigma}\right) \boldsymbol{V} Xi=USw(Σ)V
2. matlab代码
matlab代码我就直接贴上链接好了 csjunxu/WNNM_CVPR2014 ,这份matlab代码我也没有细读,仅仅跑了一下,感兴趣的同学可以多画时间研究研究。
3. 结论
- 低秩聚类不仅仅可以用在图像降噪,在图像分割、分类等方面也有广泛的应用。
- 论文中的图像效果如下:
我测试的结果也差不多,相对BM3D其文理细节保留会更好一些,但是一些纹理密集的区域会出现一些artifact,至于好不好,就要看大家对图片质量的要求了,这篇文章写的比较浅显,有问题欢迎交流
此外,这里我写一个各种算法的总结目录图像降噪算法——图像降噪算法总结,对图像降噪算法感兴趣的同学欢迎参考
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)