一、概述
平滑滤波,顾名思义就是对信号进行处理使之整体显得更加平滑,降低噪声影响,提高信号质量,它常见于数学信号处理和图像处理,一般意义上的数字信号多体现于一维数据,图像信号多体现于二维数据。
均值滤波、中值滤波、高斯滤波是三种常见的平滑滤波方法,其中均值滤波和高斯滤波是线性技术,中值滤波是非线性技术。它们实现的基本原理是基本一致的,指定一个滑动窗口,计算其中的均值、中值、卷积值输出到当前位置。
均值滤波、高斯滤波对高斯噪声表现较好,但对椒盐噪声表现较差;中值滤波则对椒盐噪声表现较好,对高斯噪声表现较差。
二、基本原理
均值滤波、中值滤波、高斯滤波的基本原理都是以一个滑动窗口,以指定的计算方式得到其中的值,将它输出到信号的当前位置,
均值滤波计算均值,中值滤波计算中值,高斯滤波计算卷积值。窗口大小L的设定一般为2k+1,每次计算窗口中心位置的值。
该种策略下,在边缘区域窗口输出的位置是无法覆盖到的,因此需要特定的方式进行处理。处理的方式通常有四种:不作处理、只计算窗口包含区域、外周填充0、外周填充邻近元素值或指定值。
1.均值滤波
(1)一维
对于信号(a1,a2,…,an),定义一个大小为L的窗口,计算窗口中元素的均值
v
m
e
a
n
=
1
L
∑
i
=
1
L
x
i
vmean=\frac{1}{L}\sum_{i=1}^{L}{x_i}
vmean=L1i=1∑Lxi
作为对应窗口
L
+
1
2
\frac{L+1}{2}
2L+1位置处的输出值。
(2)二维
对于一幅灰度图像
A
=
[
a
11
a
12
⋯
a
1
n
a
21
a
22
⋯
a
2
n
⋮
⋮
⋱
⋮
a
m
1
a
m
2
⋯
a
m
n
]
A=\begin{equation*} \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \end{equation*}
A=
a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amn
定义一个大小为L*L的窗口,计算窗口中元素的均值
v
m
e
a
n
=
1
L
2
∑
i
=
1
L
∑
j
=
1
L
p
i
j
vmean=\frac{1}{L^{2}}\sum_{i=1}^{L}{\sum_{j=1}^{L}{p_{ij}}}
vmean=L21i=1∑Lj=1∑Lpij
作为对应窗口
(
L
+
1
2
,
L
+
1
2
)
\left( \frac{L+1}{2},\frac{L+1}{2} \right)
(2L+1,2L+1) 位置处的输出值。
2.中值滤波
(1)一维
对于信号(a1,a2,…,an),定义大小为L的窗口,计算窗口中元素的中值。
- 升序(降序)排列为(r1,r2,…,rL),
- 取中间 L + 1 2 \frac{L+1}{2} 2L+1处的值,作为对应窗口 L + 1 2 \frac{L+1}{2} 2L+1 位置处的输出值。
(2)二维
对于一幅灰度图像
A
=
[
a
11
a
12
⋯
a
1
n
a
21
a
22
⋯
a
2
n
⋮
⋮
⋱
⋮
a
m
1
a
m
2
⋯
a
m
n
]
A=\begin{equation*} \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \end{equation*}
A=
a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amn
定义大小为L*L的窗口,计算窗口中元素的中值。
- 升序(降序)排列为(r1,r2,…,rL2),
- 取中间 L 2 + 1 2 \frac{L^2+1}{2} 2L2+1处的值,作为对应窗口 ( L + 1 2 , L + 1 2 ) \left( \frac{L+1}{2}, \frac{L+1}{2}\right) (2L+1,2L+1)位置处的输出值。
3.高斯滤波
高斯滤波类似于均值滤波和中值滤波,形式上和均值滤波是统一的。均值滤波计算的是元素的均值,也就是均数1/n的加权和。高斯滤波同样定义一个滑动窗口,这个窗口中对应于每个元素定义了一个权重参数,窗口的输出就是数据元素和这些权重参数的加权和,因为这个运算是形式化的卷积运算,因此这个窗口叫做卷积核。
(1)一维
对于信号(a1,a2,…,an),定义一个大小为L的卷积核
(
w
1
,
w
2
,
.
.
.
,
w
L
)
\left( w_1,w_2,...,w_L \right)
(w1,w2,...,wL)
与数据元素做卷积运算,得到值
v
g
a
u
s
=
∑
i
=
1
L
w
i
⋅
x
i
vgaus=\sum_{i=1}^{L}{w_i\cdot x_i}
vgaus=i=1∑Lwi⋅xi
作为对应窗口
L
+
1
2
\frac{L+1}{2}
2L+1位置处的输出值。
(2)二维
对于一幅灰度图像
A
=
[
a
11
a
12
⋯
a
1
n
a
21
a
22
⋯
a
2
n
⋮
⋮
⋱
⋮
a
m
1
a
m
2
⋯
a
m
n
]
A=\begin{equation*} \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \end{equation*}
A=
a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amn
定义一个大小为L*L的卷积核
[
w
11
⋯
w
1
L
⋮
⋱
⋮
w
L
1
⋯
w
L
L
]
\begin{equation*} \begin{bmatrix} w_{11} & \cdots & w_{1L} \\ \vdots & \ddots & \vdots \\ w_{L1} & \cdots & w_{LL} \end{bmatrix} \end{equation*}
w11⋮wL1⋯⋱⋯w1L⋮wLL
与数据元素做卷积运算,得到值
v
g
a
u
s
=
∑
i
=
1
L
∑
j
=
1
L
w
i
j
⋅
x
i
j
vgaus=\sum_{i=1}^{L}{\sum_{j=1}^{L}{w_{ij}\cdot x_{ij}}}
vgaus=i=1∑Lj=1∑Lwij⋅xij
作为对应窗口
(
L
+
1
2
,
L
+
1
2
)
\left( \frac{L+1}{2}, \frac{L+1}{2}\right)
(2L+1,2L+1)位置处的输出值。
4.边缘处理
滤波窗口处在数据边缘区域时,对于最外周的
L
−
1
2
\frac{L-1}{2}
2L−1宽度的那些元素,窗口输出的位置无法涵盖到它们,因此需要以一定的策略对该区域进行处理。常见的处理策略有以下几种:
(1)不作处理
对于边缘区域不作处理,计算时直接略过。
(2)只计算窗口包含区域
照常由窗口的中心点进行覆盖,计算时不计外周缺失的部分,只计算窗口包含的区域。
(3)外周填充0
照常由窗口的中心点进行覆盖,外周缺失的部分填充0。
(4)外周填充邻近元素值或其他指定值
照常由窗口的中心点进行覆盖,外周缺失的部分填充邻近元素值或其他指定的值。
三、示例
1.均值滤波
一维:
有信号段S=[3, 2, 4, 5, 13, 7, 9, 10, 1, 6],定义长度为3的窗口,进行均值滤波的平滑处理,边缘区域以填充0的方式操作。
首位置窗口的三个元素为[0,3,2],输出均值
0
+
3
+
2
3
≈
1.67
\frac{0+3+2}{3}\approx1.67
30+3+2≈1.67 ;
窗口滑至下一位置,三个元素为[3,2,4],输出均值
3
+
2
+
4
3
=
3
\frac{3+2+4}{3}=3
33+2+4=3;
窗口滑至下一位置,三个元素为[2,4,5],输出均值
2
+
4
+
5
3
≈
3.67
\frac{2+4+5}{3}\approx3.67
32+4+5≈3.67 ;
同样地,窗口依次输出值7.33、8.33、9.67、8.67、6.67、5.67,在最后一个窗口位置,三个元素为[1,6,0],输出均值2.33。
因此,输出的信号段为O=[1.67, 3, 3.67, 7.33, 8.33, 9.67, 8.67, 6.67, 5.67, 2.33]。
二维:
有图像矩阵
I
=
[
4
3
1
6
2
5
7
1
2
0
6
10
7
3
5
9
]
I=\begin{equation*} \begin{bmatrix} 4 & 3 & 1 & 6 \\ 2 & 5 & 7 & 1 \\ 2 & 0 & 6 & 10 \\ 7 & 3 & 5 & 9 \end{bmatrix} \end{equation*}
I=
42273503176561109
定义长度为3*3的窗口,进行均值滤波的平滑处理,边缘区域以填充0的方式操作。
首位置窗口内容为
[
0
0
0
0
4
3
0
2
5
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 4 & 3 \\ 0 & 2 & 5 \\ \end{bmatrix} \end{equation*}
000042035
,输出均值
1
9
(
0
+
0
+
0
+
0
+
0
+
4
+
3
+
2
+
5
)
≈
1.56
\frac{1}{9}\left( 0+0+0+0+0+4+3+2+5 \right)\approx1.56
91(0+0+0+0+0+4+3+2+5)≈1.56 ;
窗口滑至下一位置,内容为
[
0
0
0
4
3
1
2
5
7
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 4 & 3 & 1 \\ 2 & 5 & 7 \\ \end{bmatrix} \end{equation*}
042035017
,输出均值2.44;
窗口滑至下一位置,内容为
[
0
0
0
3
1
6
5
7
1
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 3 & 1 & 6 \\ 5 & 7 & 1 \\ \end{bmatrix} \end{equation*}
035017061
,输出均值2.56;
窗口滑至下一位置,内容为
[
0
0
0
0
1
6
0
7
1
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 7 & 1 \\ \end{bmatrix} \end{equation*}
000017061
,输出均值1.67;
同样地,窗口依次输出值1.78、3.33、4.33、3.44、2.11、4.11、5.11、4.22、1.33、2.56、3.67、3.33。
因此,输出的图像矩阵为
O
=
[
1.56
2.44
2.56
1.67
1.78
3.33
4.33
3.44
2.11
4.11
5.11
4.22
1.33
2.56
3.67
3.33
]
O=\begin{equation*} \begin{bmatrix} 1.56 & 2.44 & 2.56 &1.67 \\ 1.78 & 3.33 & 4.33 & 3.44 \\ 2.11 & 4.11 & 5.11 & 4.22 \\ 1.33 & 2.56 & 3.67 & 3.33 \end{bmatrix} \end{equation*}
O=
1.561.782.111.332.443.334.112.562.564.335.113.671.673.444.223.33
。
2.中值滤波
一维:
有信号段S=[3, 2, 4, 5, 13, 7, 9, 10, 1, 6],定义长度为3的窗口,进行中值滤波的平滑处理,边缘区域以填充0的方式操作。
首位置窗口的三个元素为[0,3,2],输出中值2;
窗口滑至下一位置,三个元素为[3,2,4],输出中值3;
窗口滑至下一位置,三个元素为[2,4,5],输出中值4;
同样地,窗口依次输出值5、7、9、9、9、6、1。
因此,输出的信号段为O=[2, 3, 4, 5, 7, 9, 9, 9, 6, 1]。
二维:
有图像矩阵
I
=
[
4
3
1
6
2
5
7
1
2
0
6
10
7
3
5
9
]
I=\begin{equation*} \begin{bmatrix} 4 & 3 & 1 & 6 \\ 2 & 5 & 7 & 1 \\ 2 & 0 & 6 & 10 \\ 7 & 3 & 5 & 9 \end{bmatrix} \end{equation*}
I=
42273503176561109
定义长度为3*3的窗口,进行中值滤波的平滑处理,边缘区域以填充0的方式操作。
首位置窗口内容为
[
0
0
0
0
4
3
0
2
5
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 4 & 3 \\ 0 & 2 & 5 \\ \end{bmatrix} \end{equation*}
000042035
,输出中值0;
窗口滑至下一位置,内容为
[
0
0
0
4
3
1
2
5
7
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 4 & 3 & 1 \\ 2 & 5 & 7 \\ \end{bmatrix} \end{equation*}
042035017
,输出中值2;
窗口滑至下一位置,内容为
[
0
0
0
3
1
6
5
7
1
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 3 & 1 & 6 \\ 5 & 7 & 1 \\ \end{bmatrix} \end{equation*}
035017061
,输出中值1;
窗口滑至下一位置,内容为
[
0
0
0
0
1
6
0
7
1
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 7 & 1 \\ \end{bmatrix} \end{equation*}
000017061
,输出中值0;
同样地,窗口依次输出值2、3、5、1、2、5、5、5、0、2、3、0。
因此,输出的图像矩阵为
O
=
[
0
2
1
0
2
3
5
1
2
5
5
5
0
2
3
0
]
O=\begin{equation*} \begin{bmatrix} 0 & 2 & 1 & 0 \\ 2 & 3 & 5 & 1 \\ 2 & 5 & 5 & 5 \\ 0 & 2 & 3 & 0 \end{bmatrix} \end{equation*}
O=
0220235215530150
。
3.高斯滤波
一维:
有信号段S=[3, 2, 4, 5, 13, 7, 9, 10, 1, 6],定义长度为3的卷积核[1, 0, 1],进行高斯滤波的平滑处理,边缘区域以填充0的方式操作。
首位置窗口的三个元素为[0,3,2],输出卷积值2;
窗口滑至下一位置,三个元素为[3,2,4],输出卷积值7;
窗口滑至下一位置,三个元素为[2,4,5],输出卷积值7;
同样地,窗口依次输出值17、12、22、17、10、16、1。
因此,输出的信号段为O=[2, 7, 7, 17, 12, 22, 17, 10, 16, 1]。
二维:
有图像矩阵
I
=
[
4
3
1
6
2
5
7
1
2
0
6
10
7
3
5
9
]
I=\begin{equation*} \begin{bmatrix} 4 & 3 & 1 & 6 \\ 2 & 5 & 7 & 1 \\ 2 & 0 & 6 & 10 \\ 7 & 3 & 5 & 9 \end{bmatrix} \end{equation*}
I=
42273503176561109
定义长度为3*3的卷积核
[
1
0
1
0
0
0
1
0
1
]
\begin{equation*} \begin{bmatrix} 1 & 0 & 1 \\ 0 & 0 & 0 \\ 1 & 0 & 1 \\ \end{bmatrix} \end{equation*}
101000101
,进行高斯滤波的平滑处理,边缘区域以填充0的方式操作。
首位置窗口内容为
[
0
0
0
0
4
3
0
2
5
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 4 & 3 \\ 0 & 2 & 5 \\ \end{bmatrix} \end{equation*}
000042035
,输出卷积值5;
窗口滑至下一位置,内容为
[
0
0
0
4
3
1
2
5
7
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 4 & 3 & 1 \\ 2 & 5 & 7 \\ \end{bmatrix} \end{equation*}
042035017
,输出卷积值9;
窗口滑至下一位置,内容为
[
0
0
0
3
1
6
5
7
1
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 3 & 1 & 6 \\ 5 & 7 & 1 \\ \end{bmatrix} \end{equation*}
035017061
,输出卷积值6;
窗口滑至下一位置,内容为
[
0
0
0
0
1
6
0
7
1
]
\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 7 & 1 \\ \end{bmatrix} \end{equation*}
000017061
,输出卷积值1;
同样地,窗口依次输出值3、13、19、7、8、21、18、12、0、8、10、6。
因此,输出的图像矩阵为
O
=
[
5
9
6
1
3
13
19
7
8
21
18
12
0
8
10
6
]
O=\begin{equation*} \begin{bmatrix} 5 & 9 & 6 & 1 \\ 3 & 13 & 19 & 7 \\ 8 & 21 & 18 & 12 \\ 0 & 8 & 10 & 6 \end{bmatrix} \end{equation*}
O=
5380913218619181017126
。
pdf下载:
https://download.csdn.net/download/Albert201605/88191979?spm=1001.2014.3001.5503
End.
参考:
https://blog.csdn.net/cjsh_123456/article/details/79261271