文章目录
- 一、前言
- 二、NL-means
- 1.两个邻域块的相似度
- 2.NL-means原理
- 3.数学理论推导
- 4.代码链接
- 参考链接
一、前言
在之前我们已经介绍过许多图像去噪的方法,比如均值滤波、中值滤波、高斯滤波等。今天我们要介绍一种新的去噪方法——非局部均值去噪(the non local means, NL-means)。那么NL-means相较于之前的方法有什么不同的地方呢?
我们先思考之前的图像去噪方法,用均值滤波进行举例。均值滤波在对噪声图像中的某个位置的像素进行处理时,需要以该像素为中心,选取3x3或者5x5邻域大小的像素求和后取平均值作为该像素的像素值。可以看到,使用均值滤波进行去噪时,我们只使用了该像素的邻域区域(也就是局部区域),中值滤波类似。
NL-means来自于这篇论文“A non-local algorithm for image denoising”(发表于2005年)。该方法充分利用了图像中的冗余信息,在去噪的同时能最大程度得保持图像的细节特征。
二、NL-means
先观察下面的这张图像:
可以看到
p
、
q
1
、
q
2
p、q_1、q_2
p、q1、q2三个区域比较相似,那么
q
1
、
q
2
q_1、q_2
q1、q2相较于
p
p
p可以说是重复区域,也就是说图像中存在着冗余信息。那么在对
p
p
p区域进行去噪时,能否利用
q
1
、
q
2
q_1、q_2
q1、q2这两个区域呢?NL-means就是基于这样的想法提出来的。
1.两个邻域块的相似度
如何衡量
A
A
A与
B
B
B两个邻域块的相似度呢?一种常见的衡量方法是MSE(均方误差),当然还有其他的方法,例如PSNR,余弦相似度等等。
MSE的计算公式如下:
M
S
E
(
A
,
B
)
=
1
m
n
∑
i
=
0
m
−
1
∑
j
=
0
n
−
1
[
A
(
i
,
j
)
−
B
(
i
,
j
)
]
2
MSE(A,B)=\frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}\left[A(i,j)-B(i,j)\right]^2
MSE(A,B)=mn1i=0∑m−1j=0∑n−1[A(i,j)−B(i,j)]2
其中
m
m
m和
n
n
n分别为两个邻域块的宽和高。
2.NL-means原理
使用NL-means对图像进行去噪,假设A点为当前待滤波点,我们需要为A设置两个窗口:搜索窗口和邻域窗口。搜索窗口的大小为 D × D , D = 2 × D s + 1 D\times D, D=2\times D_s+1 D×D,D=2×Ds+1,邻域窗口的大小为 d × d , d = 2 × d s + 1 d\times d,d=2\times d_s+1 d×d,d=2×ds+1。如下所示:
那么对A点进行NL-means滤波后的像素值为:
NL-means
=
∑
B
w
(
A
,
B
)
×
I
(
B
)
\text{NL-means}=\sum_{B}w(A,B)\times I(B)
NL-means=B∑w(A,B)×I(B)
其中
I
(
B
)
I(B)
I(B)为B点的像素值;
w
(
A
,
B
)
w(A,B)
w(A,B)为
A
、
B
A、B
A、B两个邻域块的相似度,其计算公式如下:
w
(
A
,
B
)
=
1
s
u
m
e
−
M
S
E
(
A
,
B
)
h
2
s
u
m
=
∑
B
e
−
M
S
E
(
A
,
B
)
h
2
w(A,B)=\frac{1}{sum}e^{-\frac{MSE(A,B)}{h^2}}\\ sum=\sum_{B}e^{-{\frac{MSE(A,B)}{h^2}}}
w(A,B)=sum1e−h2MSE(A,B)sum=B∑e−h2MSE(A,B)
可以看到,
w
(
A
,
B
)
w(A,B)
w(A,B)的计算公式与
A
,
B
A,B
A,B两点所在邻域窗口的相似度有关。其中h也是一个重要的参数,h越大去噪效果越好,但是图像越模糊,反之h越小去噪效果越差,但是去噪后的失真度越小。
3.数学理论推导
假设无噪声像素块的值为
f
(
x
,
y
)
f(x,y)
f(x,y),噪声为
n
(
x
,
y
)
n(x,y)
n(x,y),这里我们认为噪声是不相关的。那么带噪的像素块的值为
g
(
x
,
y
)
=
f
(
x
,
y
)
+
n
(
x
,
y
)
g(x,y)=f(x,y)+n(x,y)
g(x,y)=f(x,y)+n(x,y)。将
k
k
k个相似的带噪像素块进行叠加后取均值得到
g
ˉ
(
x
,
y
)
=
1
k
∑
i
=
1
k
g
i
(
x
,
y
)
=
1
k
∑
i
=
1
k
f
i
(
x
,
y
)
+
n
i
(
x
,
y
)
\bar{g}(x,y)=\frac{1}{k}\sum_{i=1}^{k}g_i(x,y)=\frac{1}{k}\sum_{i=1}^{k}f_i(x,y)+n_i(x,y)
gˉ(x,y)=k1i=1∑kgi(x,y)=k1i=1∑kfi(x,y)+ni(x,y)
对
g
ˉ
(
x
,
y
)
\bar{g}(x,y)
gˉ(x,y)取期望如下:
E
[
g
ˉ
(
x
,
y
)
]
=
E
[
1
k
∑
i
=
1
k
f
i
(
x
,
y
)
+
n
i
(
x
,
y
)
]
=
1
k
∑
i
=
1
k
E
[
f
i
(
x
,
y
)
]
+
E
[
n
i
(
x
,
y
)
]
E\left[\bar{g}(x,y)\right]=E\left[\frac{1}{k}\sum_{i=1}^{k}f_i(x,y)+n_i(x,y)\right]=\frac{1}{k}\sum_{i=1}^{k}E\left[f_i(x,y)\right]+E\left[n_i(x,y)\right]
E[gˉ(x,y)]=E[k1i=1∑kfi(x,y)+ni(x,y)]=k1i=1∑kE[fi(x,y)]+E[ni(x,y)]
其中假设噪声的期望为0,
f
i
(
x
,
y
)
f_i(x,y)
fi(x,y)为相似块,认为其期望相等,所以
E
[
g
ˉ
(
x
,
y
)
]
=
f
(
x
,
y
)
E\left[\bar{g}(x,y)\right]=f(x,y)
E[gˉ(x,y)]=f(x,y)
对
g
ˉ
(
x
,
y
)
\bar{g}(x,y)
gˉ(x,y)取方差如下:
D
[
g
ˉ
(
x
,
y
)
]
=
D
[
1
k
∑
i
=
1
k
f
i
(
x
,
y
)
+
n
i
(
x
,
y
)
]
=
1
k
2
D
[
∑
i
=
1
k
f
i
(
x
,
y
)
+
∑
i
=
1
k
n
i
(
x
,
y
)
]
=
1
k
2
D
[
∑
i
=
1
k
f
i
(
x
,
y
)
]
+
1
k
2
D
[
∑
i
=
1
k
n
i
(
x
,
y
)
]
D\left[\bar{g}(x,y)\right]=D\left[\frac{1}{k}\sum_{i=1}^{k}f_i(x,y)+n_i(x,y)\right]=\frac{1} {k^2}D\left[\sum_{i=1}^{k}f_i(x,y)+\sum_{i=1}^{k}n_i(x,y)\right]=\frac{1}{k^2}D\left[\sum_{i=1}^{k}f_i(x,y)\right]+\frac{1}{k^2}D\left[\sum_{i=1}^{k}n_i(x,y)\right]
D[gˉ(x,y)]=D[k1i=1∑kfi(x,y)+ni(x,y)]=k21D[i=1∑kfi(x,y)+i=1∑kni(x,y)]=k21D[i=1∑kfi(x,y)]+k21D[i=1∑kni(x,y)]
因为
D
[
∑
i
=
1
k
f
i
(
x
,
y
)
]
D\left[\sum_{i=1}^{k}f_i(x,y)\right]
D[∑i=1kfi(x,y)]=
D
[
k
f
(
x
,
y
)
]
=
k
2
D
[
f
(
x
,
y
)
]
=
k
2
σ
f
2
D\left[kf(x,y)\right]=k^2D\left[f(x,y)\right]=k^2\sigma_f^2
D[kf(x,y)]=k2D[f(x,y)]=k2σf2,
D
[
∑
i
=
1
k
n
i
(
x
,
y
)
]
=
σ
η
1
2
+
σ
η
2
2
+
⋯
+
σ
η
k
2
D\left[\sum_{i=1}^{k}n_i(x,y)\right]=\sigma_{\eta 1}^2+\sigma_{\eta 2}^2+\cdots + \sigma_{\eta k}^2
D[∑i=1kni(x,y)]=ση12+ση22+⋯+σηk2,所以
D
[
g
ˉ
(
x
,
y
)
]
=
σ
f
2
+
1
k
2
(
σ
η
1
2
+
σ
η
2
2
+
⋯
+
σ
η
k
2
)
D\left[\bar{g}(x,y)\right]=\sigma_f^2+\frac{1}{k^2}(\sigma_{\eta 1}^2+\sigma_{\eta 2}^2+\cdots + \sigma_{\eta k}^2)
D[gˉ(x,y)]=σf2+k21(ση12+ση22+⋯+σηk2)
又因为相似无噪声像素块的方差为0,所以最后的推导出的方差公式为:
σ
g
ˉ
2
=
k
k
2
σ
η
2
=
1
k
σ
η
2
\sigma_{\bar{g}}^2=\frac{k}{k^2}\sigma_{\eta}^2=\frac{1}{k}\sigma_{\eta}^2
σgˉ2=k2kση2=k1ση2
可以看到
g
ˉ
(
x
,
y
)
\bar{g}(x,y)
gˉ(x,y)的期望为
f
(
x
,
y
)
f(x,y)
f(x,y),方差为
1
k
σ
η
2
\frac{1}{k}\sigma_{\eta}^2
k1ση2。所以说,通过非局部均值滤波的方法可以进行图像去噪。
4.代码链接
github
参考链接
非均质滤波的原理
https://www.cnblogs.com/luo-peng/p/4785922.html
https://zhuanlan.zhihu.com/p/355267754