成像过程中的”退化”,是指由于成像系统各种因素的影响,使得图像质量降低。
上图中f(x,y)表示一幅输入图像,g(x,y)是f(x,y)产生的一幅退化图像,H表示退化函数, η ( x , y ) \eta(x,y) η(x,y)表示外加噪声。
如果系统H是一个线性、位置不变性的过 程,退化图像可以表示为:
g ( x , y ) = h ( x , y ) ★ h ( x , y ) + η ( x , y ) g(x,y)=h(x,y)\bigstar h(x,y)+\eta (x,y) g(x,y)=h(x,y)★h(x,y)+η(x,y)
⇒ G ( u , v ) = H ( u , v ) F ( u , v ) + N ( u , v ) \Rightarrow G(u,v)=H(u,v)F(u,v)+N(u,v) ⇒G(u,v)=H(u,v)F(u,v)+N(u,v)
(空间域上的卷积等同于频率域上的乘积)其中h(x,y)表示退化函数的空间表示。
数字图像的噪声主要来源于图像的获取和传输过程。图像获取的数字化过程,如图像传感器的 质量和环境条件;图像传输过程中传输信道的噪声干扰,如 通过无线网络传输的图像会受到光或其它 大气因素的干扰。
高斯噪声的概率密度函数(PDF)由下式给出:
p ( z ) = 1 2 π σ e − ( z − z ‾ ) 2 / 2 σ 2 p(z)=\frac{1}{\sqrt{2\pi }\sigma }e^{-(z-\overline{z})^{2}/2\sigma ^{2}} p(z)=2πσ1e−(z−z)2/2σ2
z的值有70%落在 [ μ − σ , μ + σ ] [\mu -\sigma ,\mu +\sigma ] [μ−σ,μ+σ]范围内,有95%落在 [ μ − 2 σ , μ + 2 σ ] [\mu -2\sigma ,\mu +2\sigma ] [μ−2σ,μ+2σ]范围内。
瑞利噪声的PDF由下式给出:
p ( z ) = { 2 b ( z − a ) e − ( z − a ) 2 / b z ≥ a 0 z < a p(z)=\left\{\begin{matrix} \frac{2}{b}(z-a)e^{-(z-a)^{2}/b} & z\geq a\\ 0 & z< a \end{matrix}\right. p(z)={b2(z−a)e−(z−a)2/b0z≥az<a
μ = a + π b / 4 , σ 2 = b ( 4 − π ) 4 \mu =a+\sqrt{\pi b/4},\sigma ^{2}=\frac{b(4-\pi )}{4} μ=a+πb/4,σ2=4b(4−π)
距离原点的位移是a,函数曲线向右变形。
伽马噪声的PDF由下式给出:
p ( z ) = { a b z b − 1 ( b − 1 ) ! e − a z z ≥ a 0 z < a p(z)=\left\{\begin{matrix} \frac{a^{b}z^{b-1}}{(b-1)!}e^{-az}&z\geq a \\ 0 & z< a \end{matrix}\right. p(z)={(b−1)!abzb−1e−az0z≥az<a
μ = b a , σ 2 = b a 2 \mu =\frac{b}{a},\sigma ^{2}=\frac{b}{a^{2}} μ=ab,σ2=a2b
指数噪声的PDF由下式给出(a>0):
p ( z ) = { a e − a z z ≥ 0 0 z < 0 p(z)=\left\{\begin{matrix}ae^{-az} & z\geq 0\\ 0 & z< 0\end{matrix}\right. p(z)={ae−az0z≥0z<0
μ = 1 a , σ 2 = 1 a 2 \mu =\frac{1}{a},\sigma ^{2}=\frac{1}{a^{2}} μ=a1,σ2=a21
指数分布的PDF是当b=1时爱尔兰分布的特殊情况。
均匀分布噪声的PDF由下式给出:
p ( z ) = { 1 b − a a ≤ z ≤ b 0 其他 p(z)=\left\{\begin{matrix}\frac{1}{b-a} & a\leq z\leq b\\ 0 & 其他\end{matrix}\right. p(z)={b−a10a≤z≤b其他
μ = a + b 2 , σ 2 = ( b − a ) 2 12 \mu =\frac{a+b}{2},\sigma ^{2}=\frac{(b-a)^{2}}{12} μ=2a+b,σ2=12(b−a)2
脉冲噪声的PDF由下式给出:
p ( z ) = { P a z = a P b z = b 1 − P a − P b 其他 p(z)=\left\{\begin{matrix} P_{a} &z=a \\P_{b} &z=b \\ 1-P_{a}-P_{b} & 其他 \end{matrix}\right. p(z)=⎩ ⎨ ⎧PaPb1−Pa−Pbz=az=b其他
如果 P a P_{a} Pa或 P b P_{b} Pb为零,则脉冲噪声称为单极脉冲;如果 P a P_{a} Pa或 P b P_{b} Pb均不为零,则脉冲噪声称为双极脉冲噪声或椒盐噪声。
脉冲噪声可以为正,也可为负。标定以后,脉冲噪声总是数字化为最大值(纯黑或纯白)。通常,负脉冲以黑点(胡椒点)出现,正脉冲以白点(盐点)出现。
周期噪声是在图像获取中从电力或机电干扰中产生,周期噪声可以通过频率域滤波显著减少。
一些重要的概率密度函数曲线如下图所示:
下图为用于噪声模型的测试图,由简单、恒定的区域组成,仅仅有3个灰度级的变化。
对样本噪声图像添加高斯、瑞利、伽马、指数、均匀和椒盐噪声后的图像与直方图如下图所示。
结论:
1、上述噪声图像的直方图和它们的概率密度函数曲线对应相似。
2、添加各种噪声后的图像并没有显著不同,但它们的直方图具有明显的区别。
1、高斯噪声源于电子电路噪声和由低照明度或高温带来的传感器噪声。
2、瑞利噪声对分布在图像范围内特征化噪声有用。
3、伽马分布和指数分布用于激光成像噪声。
4、均匀密度分布作为模拟随机数产生器的基础。
5、脉冲噪声用于成像中的短暂停留中,如错误的开关操作。
当唯一退化是噪声时:
g ( x , y ) = f ( x , y ) + η ( x , y ) g(x,y)=f(x,y)+\eta (x,y) g(x,y)=f(x,y)+η(x,y)
⇒ G ( u , v ) = F ( u , v ) + N ( u , v ) \Rightarrow G(u,v)=F(u,v)+N(u,v) ⇒G(u,v)=F(u,v)+N(u,v)
噪声项未知,不能从g(x,y)或G(u,v)减去噪声,可以选择空间滤波方法进行图像复原。
f ^ ( x , y ) = 1 m n ∑ ( s , t ) ∈ S x y g ( s , t ) \widehat{f}(x,y)=\frac{1}{mn}\sum _{(s,t)\in S_{xy}}g(s,t) f (x,y)=mn1(s,t)∈Sxy∑g(s,t)
S x y S_{xy} Sxy表示中心在(x,y),尺寸为m×n的矩形窗口,平滑了一幅图像的局部变化,在模糊了结果的同时减少了噪声。
f ^ ( x , y ) = [ ∏ ( s , t ) ∈ S x y g ( s , t ) ] 1 m n \widehat{f}(x,y)=[\prod _{(s,t)\in S_{xy}}g(s,t)]^{\frac{1}{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 ) \widehat{f}(x,y)=\frac{mn}{\sum _{(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 \widehat{f}(x,y)=\frac{\sum _{(s,t)\in S_{xy}}g(s,t)^{Q+1}}{\sum _{(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符号。
f ^ ( x , y ) = m e d i a n ( s , t ) ∈ S x y g ( s , t ) \widehat{f}(x,y)=median_{(s,t)\in S_{xy}}g(s,t) f (x,y)=median(s,t)∈Sxyg(s,t)
在相同尺寸下,比起均值滤波器引起的模糊少,对单极或双极脉冲噪声非常有效。
最大值滤波器:
f ^ ( x , y ) = m a x ( s , t ) ∈ S x y g ( s , t ) \widehat{f}(x,y)=max_{(s,t)\in S_{xy}}g(s,t) f (x,y)=max(s,t)∈Sxyg(s,t)
用于发现图像中的最亮点,可以有效过滤“胡椒”噪声(因为“胡椒”噪声 是非常低的值)。
最小值滤波器:
f ^ ( x , y ) = m i n ( s , t ) ∈ S x y g ( s , t ) \widehat{f}(x,y)=min_{(s,t)\in S_{xy}}g(s,t) f (x,y)=min(s,t)∈Sxyg(s,t)
用于发现图像中的最暗点,可以有效过滤“盐”噪声(因为“盐”噪声是非 常高的值)。
f ^ ( x , y ) = 1 2 [ m a x ( s , t ) ∈ S x y g ( s , t ) + m i n ( s , t ) ∈ S x y g ( s , t ) ] \widehat{f}(x,y)=\frac{1}{2}[max_{(s,t)\in S_{xy}}g(s,t)+min_{(s,t)\in S_{xy}}g(s,t)] f (x,y)=21[max(s,t)∈Sxyg(s,t)+min(s,t)∈Sxyg(s,t)]
结合了顺序统计和求平均,对于高斯和均匀随机分布这类噪声有最好的效果。
f ^ ( x , y ) = 1 m n − d ∑ ( s , t ) ∈ S ( x y ) g r ( s , t ) \widehat{f}(x,y)=\frac{1}{mn-d}\sum _{(s,t)\in S_(xy)}g_{r}(s,t) f (x,y)=mn−d1(s,t)∈S(xy)∑gr(s,t)
在 S x y S_{xy} Sxy邻域内去掉 g ( s , t ) g(s,t) g(s,t)最高灰度值的d/2和最低灰度值的d/2。 g r ( s , t ) g_{r}(s,t) gr(s,t)代表剩余的mn-d个像素,当d=0,退变为算术均值滤波器;当d=(mn-1)/2,退变为中值滤波器;当d取其它值时,适用于包括多种噪声的情况下,例如高斯噪声和椒盐噪声混合的情况。
滤波器响应基于以下4个量:
1、g(x,y),表示噪声图像在点(x,y)上的值;
2、 σ n 2 \sigma _{n}^{2} σn2,g(x,y)的噪声方差;
3、 m L m_{L} mL,在 S x y S_{xy} Sxy上像素点的局部均值;
4、 σ L 2 \sigma _{L}^{2} σL2,在 S x y S_{xy} Sxy上像素点的局部方差。
滤波器的预期性能如下:
1、如果 σ n = 0 \sigma _{n}=0 σn=0,滤波器返回g(x,y)的值。因为在g(x,y)下零噪声的情况等同于f(x,y)。
2、如果局部方差 σ L 2 \sigma _{L}^{2} σL2与 σ n 2 \sigma _{n}^{2} σn2高相关,滤波器返回一个g(x,y)的近似值。
3、如果 σ L 2 = σ n 2 \sigma _{L}^{2}=\sigma _{n}^{2} σL2=σn2,滤波器返回区域 S x y S_{xy} Sxy上像素的算术均值。这样局部噪声用求平均 m L m_{L} mL来降低。
基于这些假设得到的 f ^ ( x , y ) \widehat{f}(x,y) f (x,y)的自适应表达式可以写成:
f ^ ( x , y ) = g ( x , y ) − σ η 2 σ L 2 [ g ( x , y ) − m L ] \widehat{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]
唯一需要知道或估计的未知量是噪声方差 σ n 2 \sigma _{n}^{2} σn2,其它参数可以从 S x y S_{xy} Sxy中的像素计算出来。
通过对比上图,从总体噪声减少情况来看,自适应滤波器所达到的效果与算术和几何均值滤波器的相似,然而使用自适应滤波后的图像更清晰,更尖锐。
传统中值滤波器只能处理空间密度不大的冲激噪声( p a p_{a} pa, p b p_{b} pb<0.2),而自适应中值滤波器可以处理具有更大概率的冲激噪声,可以在平滑非冲激噪声时保存细节,而传统中值滤波器无法做到。
考虑如下符号:
1、 z m i n = S x y z_{min}=S_{xy} zmin=Sxy中灰度级的最小值
2、 z m a x = S x y z_{max}=S_{xy} zmax=Sxy中灰度级的最大值
3、 z m e d = S x y z_{med}=S_{xy} zmed=Sxy中灰度级的中值
4、 z x y z_{xy} zxy=在坐标(x,y)上的灰度级
5、 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 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 1 = z x y − z m a x B_{1}=z_{xy}-z_{max} B1=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
算法主要目的:除去“椒盐”噪声(冲激噪声);平滑其它非冲激噪声;减少物体边界细化或粗化等失真。
通过对比上图,可以看出自适应滤波器在保持清晰度和细节方面做得更好。
# 自适应中值滤波
# count 为最大窗口数,original 为原图
def adaptiveMedianDeNoise(count, original):
# 初始窗口大小
startWindow = 3
# 卷积范围
c = int(count/2)
rows, cols = original.shape
newI = np.zeros(original.shape)
for i in range(c, rows - c):
for j in range(c, cols - c):
k = int(startWindow / 2)
median = np.median(original[i - k:i + k + 1, j - k:j + k + 1])
mi = np.min(original[i - k:i + k + 1, j - k:j + k + 1])
ma = np.max(original[i - k:i + k + 1, j - k:j + k + 1])
if mi < median < ma:
if mi < original[i, j] < ma:
newI[i, j] = original[i, j]
else:
newI[i, j] = median
else:
while True:
startWindow = startWindow + 2
k = int(startWindow / 2)
median = np.median(original[i - k:i + k + 1, j - k:j + k + 1])
mi = np.min(original[i - k:i + k + 1, j - k:j + k + 1])
ma = np.max(original[i - k:i + k + 1, j - k:j + k + 1])
if mi < median < ma or startWindow > count:
break
if mi < median < ma or startWindow > count:
if mi < original[i, j] < ma:
newI[i, j] = original[i, j]
else:
newI[i, j] = median
return newI
def medianDeNoise(original):
rows, cols = original.shape
ImageDenoise = np.zeros(original.shape)
for i in range(3, rows - 3):
for j in range(3, cols - 3):
ImageDenoise[i, j] = np.median(original[i - 3:i + 4, j - 3:j + 4])
return ImageDenoise
def show(f, s, a, b, c):
plt.subplot(a, b, c)
plt.imshow(f, "gray")
plt.axis('on')
plt.title(s)
def main():
original = plt.imread("lena.tiff", 0)
rows, cols = original.shape
original_noise = pepperNoise(100000, original)
adapMedianDeNoise = adaptiveMedianDeNoise(7, original_noise)
mediDeNoise = medianDeNoise(original_noise)
plt.figure()
show(original, "original", 2, 2, 1)
show(original_noise, "original_noise", 2, 2, 2)
show(adapMedianDeNoise, "adaptiveMedianDeNoise", 2, 2, 3)
show(mediDeNoise, "medianDeNoise", 2, 2, 4)
plt.show()
结果:
(参考博客链接:https://blog.csdn.net/ab136681/article/details/104264811/)
阻止一定频率范围内的信号通过而允许其它频率范围内的信号通过,消除或衰减傅里叶变换原点处的频段。
滤波器的透视图如下图所示:
允许一定频率范围内的信 号通过而阻止其它频率范围内的信号通过。
H B P ( u , v ) = 1 − H B R ( u , v ) H_{BP}(u,v)=1-H_{BR}(u,v) HBP(u,v)=1−HBR(u,v)
H B P ( u , v ) H_{BP}(u,v) HBP(u,v)表示带通滤波器, H B R ( u , v ) H_{BR}(u,v) HBR(u,v)表示相应的带阻滤波器。
阻止或通过事先定义的中心频率邻域内的频率。由于傅里叶变换是对称的,陷波滤波器必须以关于原点对称的形式出现。如果陷波滤波器位于原点处,则以它本身形式出现。
陷波滤波器的三维图如下图所示:
传递函数由下式给出:
H N P ( u , v ) = 1 − H N R ( u , v ) H_{NP}(u,v)=1-H_{NR}(u,v) HNP(u,v)=1−HNR(u,v)
式中, H N P ( U , V ) H_{NP}(U,V) HNP(U,V)是陷波滤波器的传递函数,这个陷波滤波器与传递函数为 H N R ( U , V ) H_{NR}(U,V) HNR(U,V)的陷波滤波器相对应。
g ( x , y ) = H [ f ( x , y ) ] + η ( x + y ) g(x,y)=H[f(x,y)]+\eta (x+y) g(x,y)=H[f(x,y)]+η(x+y)
假设 η ( x + y ) = 0 \eta (x+y)=0 η(x+y)=0,则 g ( x , y ) = H [ f ( x , y ) ] g(x,y)=H[f(x,y)] g(x,y)=H[f(x,y)],如果
H [ a f 1 ( x , y ) + f 2 ( x , y ) ] = a H [ f 1 ( x , y ) + b H [ f 2 ( x , y ) H[af_{1}(x,y)+f_{2}(x,y)]=aH[f_{1}(x,y)+bH[f_{2}(x,y) H[af1(x,y)+f2(x,y)]=aH[f1(x,y)+bH[f2(x,y)
则系统H是一个线性系统,其中a,b是标量, f 1 ( x , y ) f_{1}(x,y) f1(x,y)和 f 2 ( x , y ) f_{2}(x,y) f2(x,y)是两幅输入图像。
具有加性噪声的线性空间不变退化系统,可在空间域建模为退化函数与一幅图像的卷积,然后再加上噪声。基于卷积定理,在频率域中,同样的过程可表示为图像和退化函数的变换的乘积,然后再加上噪声的变换。
这种方法的优点是可以使用许多线性系统理论的工具来解决图像复原问题。与位置有关的非线性技术虽然更普遍,但它们会带来没有已知解的问题,或解决计算问题时非常困难。
图像复原需要针对图像的退化原因进行补偿,利用图像退化的逆过程去恢复原始图像,使复原后的图像尽可能的接近原图像。