在图像处理中,对图像的滤波是非常常见的一种运算,我们耳熟能详的高斯滤波,双边滤波,导向滤波,而所有的这些滤波其实都是基于局部的一种线性运算。
我们知道,几乎所有的滤波或者局部运算都可以表示成如下的这种形式:
y
i
=
1
z
∑
j
∈
Ω
i
w
j
y
j
y_{i} = \frac{1}{z} \sum_{j \in \Omega_{i}} w_{j} y_{j}
y i = z 1 j ∈ Ω i ∑ w j y j
其中,
z
=
∑
w
j
z = \sum w_{j}
z = ∑ w j ,是一个归一化系数,上面这个表达式,也就意味着图像中,像素
i
i
i 的值
y
i
y_i
y i 等于其邻域
y
j
y_j
y j 的一个线性组合,
w
j
w_{j}
w j 表示的就是邻域像素
y
j
y_{j}
y j 的权重,这个表达式是一系列滤波器的基础。
对于高斯滤波来说,其
w
j
w_{j}
w j 就是相对位置的一个关系:
w
j
=
−
1
2
π
σ
e
−
(
x
i
−
x
j
)
2
2
σ
2
w_{j} = -\frac{1}{\sqrt{2 \pi} \sigma} e^{-\frac{(x_{i} - x_{j})^2}{2\sigma^{2}}}
w j = − 2 π
σ 1 e − 2 σ 2 ( x i − x j ) 2
为了简化,一般可以假设
σ
=
1
\sigma = 1
σ = 1 ,
x
i
,
x
j
x_{i}, x_{j}
x i , x j 可以看成是像素
i
,
j
i, j
i , j 在图像中的坐标,因为高速滤波其实考虑的是像素的相对位置,所以告诉滤波器的权重一般都是固定的,设置好滤波器的尺度,以及
σ
\sigma
σ ,滤波器可以很快的得到,利用卷积运算,就可以得到一个高斯模糊的运算。除了高斯滤波,还有一个平均滤波,
w
j
=
1
N
w_{j} = \frac{1}{N}
w j = N 1
这种滤波器,表示邻域像素的权重是一样的。
除了高斯滤波,还有一个双边滤波器,双边滤波器,在高斯滤波器的基础上,引入了像素值的考量,
w
j
=
e
x
p
(
−
(
x
i
−
x
j
)
2
2
σ
d
2
)
e
x
p
(
−
(
y
i
−
y
j
)
2
2
σ
r
2
)
w_{j} = exp \left({-\frac{(x_{i} - x_{j})^2}{2\sigma_{d}^{2}}} \right) exp \left({-\frac{(y_{i} - y_{j})^2}{2\sigma_{r}^{2}}} \right)
w j = e x p ( − 2 σ d 2 ( x i − x j ) 2 ) e x p ( − 2 σ r 2 ( y i − y j ) 2 )
双边滤波,既考虑了像素的位置关系,也考虑像素值的关系,所以在每个邻域上,其权重值
w
j
w_{j}
w j 是不一样的。
除了高斯滤波,双边滤波之外,还有一种 non-local mean 的滤波,与前面两种滤波方式相比,non-local mean 的滤波器的权重计算,考虑的不是像素与像素之间的相似度,而是像素
i
i
i 的邻域
V
i
V_{i}
V i 和像素
j
j
j 的邻域
V
j
V_{j}
V j 之间的相似度,利用像素的邻域来计算权重:
w
j
=
e
x
p
(
−
(
V
i
−
V
j
)
2
2
σ
2
)
w_{j} = exp \left({-\frac{(V_{i} - V_{j})^2}{2\sigma^{2}}} \right)
w j = e x p ( − 2 σ 2 ( V i − V j ) 2 )
(
V
i
−
V
j
)
2
=
1
d
2
∑
l
∈
[
−
d
,
d
]
(
y
i
+
l
−
y
j
+
l
)
2
(V_{i} - V_{j})^2 = \frac{1}{d^{2}} \sum_{l \in [-d, d]} (y_{i+l} - y_{j+l})^2
( V i − V j ) 2 = d 2 1 l ∈ [ − d , d ] ∑ ( y i + l − y j + l ) 2
d
d
d 表示邻域
V
V
V 的半径,
d
2
d^2
d 2 也就是邻域的像素个数,邻域
V
i
V_{i}
V i 和
V
j
V_{j}
V j 的相似度,也就是邻域里对应像素的欧式距离,这里我们看到,理论上来说,
j
j
j 可以是全图范围内的任何一个像素点,不过在实际计算的时候,一般会设置一个搜索范围,也就是在像素
i
i
i 的附近,搜索半径为
D
D
D , 所以一般来说,这个 non-local mean 的计算量是比较大的。
最后介绍一下表面模糊,这个在磨皮算法中经常会遇到,表面模糊也是要利用邻域的像素值,根据如下的表达式,计算每个邻域像素的权重:
w
j
=
1
−
∣
y
i
−
y
j
∣
2.5
T
w_{j} = 1 - \frac{|y_{i} - y_j{}|}{2.5T}
w j = 1 − 2 . 5 T ∣ y i − y j ∣
上面的
T
T
T 表示一个经验阈值。
T
T
T 越大,模糊的程度越高。
从上面的表达式可以看出,除了高斯模糊的权重与像素值无关之外,其他几种模糊形式的权重都和像素值有关,所以高斯模糊可以利用卷积快速地运算得到,而其他几种模糊形式都相对来说要慢很多,比较耗时。
转载:
https://blog.csdn.net/shinian1987/article/details/89891827