本节为opencv数字图像处理(10):图像复原与重建的第一小节,常见的噪声以及空间滤波器噪声消除方法,主要包括:图像/退化复原模型,六种常见噪声模型(高斯、瑞利、爱尔兰、指数、均匀、脉冲噪声)并且使用空间滤波器对退化图像进行复原(也即消除噪声),包括算数均值、几何均值、谐波与逆谐波均值、中值、最值、中点、修正的阿尔法均值以及两种自适应滤波器(自适应局部降低噪声滤波器和自适应中值滤波器)。
1. 图像退化/复原模型
书中将退化过程建模为一个退化函数和一个加性噪声项,对输入图像 f ( x , y ) f(x,y) f(x,y)进行处理,产生退化图像 g ( x , y ) g(x,y) g(x,y),给定 g ( x , y ) g(x,y) g(x,y)和关于退化函数 H H H以及加性噪声项 η ( x , y ) \eta( x,y) η(x,y)的知识,图像复原的目的就是获得原始图像的一个估计 f ^ ( x , y ) \hat f(x,y) f^(x,y)
如果
H
H
H是一个线性的位置不变的过程,那么空间域的退化图像可由下式给出:
根据卷积定理,可以写成等价的频率域表示:
基于上述过程,图像退化/复原建模如下:
2. 噪声模型
2.1. 重要的噪声概率密度函数
高斯噪声/正态噪声
高斯随机变量
z
z
z的PDF由下式给出:
其中,
z
z
z表示灰度值,
z
ˉ
\bar z
zˉ表示
z
z
z的均值,
σ
\sigma
σ表示
z
z
z的标准差,高斯函数的曲线如下图所示,当
z
z
z服从上式分布时,其值有约70%落在范围
[
(
z
ˉ
−
σ
)
,
(
z
ˉ
+
σ
)
]
[(\bar z-\sigma),(\bar z+\sigma)]
[(zˉ−σ),(zˉ+σ)]内,大约95%落在
[
(
z
ˉ
−
2
σ
)
,
(
z
ˉ
+
2
σ
)
]
[(\bar z-2\sigma),(\bar z+2\sigma)]
[(zˉ−2σ),(zˉ+2σ)]内。
瑞利噪声
瑞利噪声的PDF由下式给出:
概率密度的均值
z
ˉ
=
a
+
π
b
/
4
\bar z=a+\sqrt{\pi b/4}
zˉ=a+πb/4,方差
σ
2
=
b
(
4
−
π
)
4
\sigma^2=\frac{b(4-\pi)}{4}
σ2=4b(4−π),瑞利密度的曲线如下所示:
瑞利曲线距原点的位移和密度的基本形状向右变形,瑞利密度对于近似歪斜的直方图十分适用。
爱尔兰/伽马噪声
爱尔兰噪声的PDF由下式给出:
其中,参数
a
>
0
,
b
a>0,b
a>0,b为正整数,概率密度的均值为
z
ˉ
=
b
a
\bar z=\frac ba
zˉ=ab,方差为
σ
2
=
b
a
2
\sigma^2=\frac b{a^2}
σ2=a2b,伽马分布密度曲线如下所式。【虽然一般称上式为伽马噪声,但严格来说只有分母为伽马函数
Γ
(
b
)
\Gamma(b)
Γ(b)时才正确,上式的密度称为爱尔兰密度更合适】
指数噪声
指数噪声的PDF由下式给出:
其中
a
>
0
a>0
a>0,均值为
z
ˉ
=
1
a
\bar z=\frac 1 a
zˉ=a1,方差
σ
2
=
1
a
2
\sigma^2=\frac 1 {a^2}
σ2=a21,下图是该密度函数的曲线:
均匀噪声
均匀噪声的PDF由下式给出:
均值
z
ˉ
=
a
+
b
2
\bar z=\frac{a+b}2
zˉ=2a+b,方差
σ
2
=
(
b
−
a
)
2
12
\sigma^2=\frac{(b-a)^2}{12}
σ2=12(b−a)2,均匀密度的曲线如下:
脉冲/椒盐噪声
双极脉冲噪声的PDF如下:
如果
b
>
a
b>a
b>a则灰度级
b
b
b在图像中显示为一个两点,反之灰度级
a
a
a在图像中显示为一个暗点,若
P
a
P_a
Pa或
P
b
P_b
Pb为零,则脉冲噪声称为单极脉冲。如果
P
a
P_a
Pa和
P
b
P_b
Pb都不可能为零,尤其是当他们近似相等时,则脉冲噪声值将类似于在图像上随机分布的椒盐颗粒。密度曲线如下所示:
总结
上述噪声的PDF为实践中建立宽带噪声污染状态的模型提供了有用的工具,比如在一幅图像中,高斯噪声来源于诸如电子电路噪声以及由低照明度或高温带来的传感器噪声,瑞利密度有助于深度成像中表征噪声,指数密度和伽马密度在激光成像中有用。脉冲噪声在快速过渡的情况下产生,如成像期间发生的错误开关操作。均匀密度作为仿真中使用的许多随机数生成器的基础是非常有用的。
下图所示是图像添加了各种噪声之后的图像与直方图对比,除了椒盐噪声之外的五幅图像表观上看起来之后亮度的差别(直方图上确实有提现)。【椒盐噪声是唯一一种引起退化的视觉上可区分的噪声类型】
2.2. 周期噪声
一幅图像中的图像噪声是图像获取期间由电力或机电干扰产生的,是一种空间相关噪声,可通过频率域滤波显著减少。
典型地,周期噪声的参数可以通过检测图像的福利也服来进行估计,因为周期噪声趋向于产生频率尖峰,有的通过视觉就可以检测到。另一种是由图像推断噪声分量的周期性(非常简单的情况下可行)
通常噪声的PDF的参数可以从传感器的说明中的值,如果成像系统可用,我们可以获取一组平坦环境的图像,即光学传感器下对一个光照均匀的纯色灰度板成像,根据图像的直方图估计噪声类型。
3. 图像复原-空间滤波
当一幅图像唯一存在的退化是噪声时,有 g ( x ) = f ( x , y ) + η ( x , y ) g(x)=f(x,y)+\eta(x,y) g(x)=f(x,y)+η(x,y)和 G ( u , v ) = F ( u , v ) + N ( u , v ) G(u,v)=F(u,v)+N(u,v) G(u,v)=F(u,v)+N(u,v),因为噪声项未知,所以简单减去不可行。当仅存在加性噪声时,可以选择空间滤波方法。
3.1 均值滤波器
算数均值滤波器
令
S
x
y
S_{xy}
Sxy表示中心在点
(
x
,
y
)
(x,y)
(x,y)处大小为
m
×
n
m\times n
m×n的矩形子图像窗口的一组坐标,算数均值滤波器在
S
x
y
S_{xy}
Sxy定易得区域计算被污染图像
g
(
x
,
y
)
g(x,y)
g(x,y)的平均值,在
(
x
,
y
)
(x,y)
(x,y)处复原图像
f
^
\hat f
f^的值就是这个算数均值:
f
^
(
x
,
y
)
=
1
m
n
Σ
s
,
t
∈
S
x
y
g
(
s
,
t
)
\hat f(x,y)=\frac1{mn}\Sigma_{s,t\in S_{xy}} g(s,t)
f^(x,y)=mn1Σs,t∈Sxyg(s,t)
这个操作可以通过一个大小为
m
×
n
m\times n
m×n的空间滤波器来实现,其所有系数均为值得
1
/
m
n
1/mn
1/mn。均值滤波平滑一幅图像中的局部变化,模糊了结果降低了噪声。
几何均值滤波器
表达式如下:
f
^
(
x
,
y
)
=
[
∏
s
,
t
∈
S
x
y
g
(
s
,
t
)
]
1
m
n
\hat f(x,y)=\left[\prod_{s,t\in S_{xy}}g(s,t)\right]^{\frac1{mn}}
f^(x,y)=⎣⎡s,t∈Sxy∏g(s,t)⎦⎤mn1
噪声降低效果类似,但是丢失的图像细节更少。
谐波均值滤波器
表达式如下:
f
^
(
x
,
y
)
=
m
n
Σ
s
,
t
∈
S
x
y
1
g
(
s
,
t
)
\hat f(x,y)=\frac{mn}{\Sigma_{s,t\in S_{xy}}\frac{1}{g(s,t)}}
f^(x,y)=Σs,t∈Sxyg(s,t)1mn
谐波均值滤波对盐粒噪声效果较好,但不适用于胡椒噪声。它善于处理项高斯噪声那样的其他噪声。
逆谐波均值滤波器
表达式如下:
f
^
(
x
,
y
)
=
Σ
s
,
t
∈
S
x
y
g
(
s
,
t
)
Q
+
1
Σ
s
,
t
∈
S
x
y
g
(
s
,
t
)
Q
\hat f(x,y)=\frac{\Sigma_{s,t\in S_{xy}}g(s,t)^{Q+1}}{\Sigma_{s,t\in S_{xy}}g(s,t)^Q}
f^(x,y)=Σs,t∈Sxyg(s,t)QΣs,t∈Sxyg(s,t)Q+1
Q称为滤波器的阶数,适合减少甚至消除椒盐噪声的影响。当Q为正数,消除胡椒噪声,当Q为负数,消除盐粒噪声。【不能同时】。当Q=0,即算术均值滤波器;当Q=-1,谐波均值滤波器。
小结
总的来看,算数均值和集合均值更适合处理高斯或均匀随机噪声,逆谐波均值适合处理脉冲噪声,但是它必须知道噪声是暗噪声还是亮噪声,以便选择Q的符号。
3.2 统计排序滤波器
中值滤波器
表达式:
f
^
(
x
,
y
)
=
m
e
d
i
a
n
s
,
t
∈
S
x
y
{
g
(
s
,
t
)
}
\hat f(x,y)=median_{s,t\in S_{xy}}\{g(s,t)\}
f^(x,y)=medians,t∈Sxy{g(s,t)}
中值滤波器引起的模糊更小,存在单极或双极脉冲噪声的情况下尤为有效。
最值滤波器
最大值滤波器:
f
^
(
x
,
y
)
=
m
a
x
s
,
t
∈
S
x
y
{
g
(
s
,
t
)
}
\hat f(x,y)=max_{s,t\in S_{xy}}\{g(s,t)\}
f^(x,y)=maxs,t∈Sxy{g(s,t)}
这种滤波器对图像中的最亮点非常有用,可以消除胡椒噪声。
最小值滤波器:
f
^
(
x
,
y
)
=
m
i
n
s
,
t
∈
S
x
y
{
g
(
s
,
t
)
}
\hat f(x,y)=min_{s,t\in S_{xy}}\{g(s,t)\}
f^(x,y)=mins,t∈Sxy{g(s,t)}
这种滤波器对图像中的最暗殿非常有用,可以消除盐粒噪声。
中点滤波器
表达式:
f
^
(
x
,
y
)
=
1
2
[
m
i
n
s
,
t
∈
S
x
y
+
m
a
x
s
,
t
∈
S
x
y
]
\hat f(x,y)=\frac12\left[min_{s,t\in S_{xy}}+max_{s,t\in S_{xy}}\right]
f^(x,y)=21[mins,t∈Sxy+maxs,t∈Sxy]
它对于随机分布的噪声比如高斯或者均匀噪声效果最好。
修正的阿尔法均值滤波器
在
S
x
y
S_{xy}
Sxy邻域中去掉灰度排序序列中的前d/2和后d/2,令
g
r
(
s
,
t
)
g_r(s,t)
gr(s,t)表示剩下的
m
n
−
d
mn-d
mn−d个像素,由剩余像素的平均值形成的滤波器,表达式如下:
f
^
(
x
,
y
)
=
1
m
n
−
d
Σ
s
,
t
∈
S
x
y
g
r
(
s
,
t
)
\hat f(x,y)=\frac1{mn-d}\Sigma_{s,t\in S_{xy}} g_r(s,t)
f^(x,y)=mn−d1Σs,t∈Sxygr(s,t)
当d=0,算数均值滤波器;当d=mn-1,中值滤波器。当d取其他值,该滤波器在包含多种噪声的情况下效果较好,比如高斯噪声和椒盐噪声混合时。
3.3 自适应滤波器
这里退化图像仍然是简单的原始图像加噪声,依然没有考虑其他类型的退化。
自适应局部降低噪声滤波器
滤波器作用于局部区域 S x y S_{xy} Sxy,在该区域中心任意一点(x,y)上的响应基于四个量:1) g ( x , y ) g(x,y) g(x,y),带噪图像在点 ( x , y ) (x,y) (x,y)处的值;2) σ η 2 \sigma_{\eta}^2 ση2,污染 f ( x , y ) f(x,y) f(x,y)形成 g ( x , y ) g(x,y) g(x,y)的噪声的方差;3) m L , S x y m_L,S_{xy} mL,Sxy中像素的局部均值;4) σ L 2 \sigma_L^2 σL2, S x y S_{xy} Sxy中像素的局部方差 ,并且我们希望滤波器能够:
- 如果 σ η 2 = 0 \sigma_{\eta}^2=0 ση2=0,则返回 g ( x , y ) g(x,y) g(x,y)[零噪声]
- 如果 σ L 2 \sigma_L^2 σL2与 σ η 2 \sigma_{\eta}^2 ση2高度相关,则返回 g ( x , y ) g(x,y) g(x,y)一个近似值。典型地,高局部方差和边缘相关,应保护这些边缘。
- 如果两个方差相等,则返回 S x y S_{xy} Sxy中像素的算数平均。这种情况发生在局部区域与整个图像有相同特性时,并且局部噪声将通过简单的求平均来降低。
基于此,表达式:
f
^
(
x
,
y
)
=
g
(
x
,
y
)
−
σ
η
2
σ
L
2
[
g
(
x
,
y
)
,
m
L
]
\hat f(x,y)=g(x,y)-\frac{\sigma_{\eta}^2}{\sigma_L^2}[g(x,y),m_L]
f^(x,y)=g(x,y)−σL2ση2[g(x,y),mL]
这里需要知道或估计
σ
η
2
\sigma_{\eta}^2
ση2的值,上式中隐含
σ
L
2
≥
σ
η
2
\sigma_L^2\geq\sigma_{\eta}^2
σL2≥ση2,这虽然合理(模型中的噪声是加性的和位置独立的),但也可能有特殊情况,因此,这里若违反了不等式,应将这一比率设为1,这造成了滤波器的非线性。当然也可以允许负数灰度的出现最后进行标定,但是会损失图像的动态范围。
自适应中值滤波器
中值滤波器只要脉冲噪声的空间密度不大,性能就会很好;自适应中值滤波器可以处理具有更大概率的脉冲噪声,它的优点在于平滑非脉冲噪声时试图保留细节。
考虑如下符号:
- z m i n = S x y z_{min}=S_{xy} zmin=Sxy中最小灰度值
- z m a x = S x y z_{max}=S_{xy} zmax=Sxy中最大灰度值
- z m e d = S x y z_{med}=S_{xy} zmed=Sxy中灰度中值
- z x y = z_{xy}= zxy=坐标 ( x , y ) (x,y) (x,y)处的灰度值
- S m a x = S x y S_{max}=S_{xy} Smax=Sxy所允许的最大尺寸
自适应中值滤波需要两个进程:
进程A:
- A 1 = z m e d − z m i n A_1=z_{med}-z_{min} A1=zmed−zmin
- A 2 = z m e d − z m a x A_2=z_{med}-z_{max} A2=zmed−zmax
- 若 A 1 > 0 A_1>0 A1>0且 A 2 < 0 A_2<0 A2<0,则转到进程B
- 否则增大窗口尺寸
- 如果窗口尺寸 ≤ S m a x \leq S_{max} ≤Smax,则重复进程A
- 否则输出 z m e d z_{med} zmed
进程B:
- B 1 = z x y − z m i n B_1=z_{xy}-z_{min} B1=zxy−zmin
- B 2 = z x y − z m a x B_2=z_{xy}-z_{max} B2=zxy−zmax
- 如果 B 1 > 0 B_1>0 B1>0且 B 2 < 0 B_2<0 B2<0,则输出 z x y z_{xy} zxy
- 否则输出 z m e d z_{med} zmed
该算法有三个目的:去除椒盐/脉冲噪声,平滑其他非脉冲噪声,减少物体边界细化/粗化等失真。
进程A的目的是确定中值滤波器的输出 z m e d z_{med} zmed是否是一个脉冲(黑或白),如果 z m i n < z m e d < z m a x z_{min}< z_{med}< z_{max} zmin<zmed<zmax ,则不可能是脉冲,这样转到B,看窗口的中心点是否是脉冲,若满足进程中条件说明中心点也不是脉冲,这种情况下算法输出 z x y z_{xy} zxy,而若进程中两个条件同时,说明像素值是一个极端值,输出 z m e d z_{med} zmed
如果进程A确实找到了一个脉冲,它会扩大窗口尺寸知道到达最大尺寸,此时不能保证该值不是脉冲。
欢迎扫描二维码关注微信公众号 深度学习与数学 [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]