【OpenCV 完整例程】93. 噪声模型的直方图
3. 仅噪声存在的空间滤波图像复原
当一幅图像中唯一存在的退化是噪声时,退化模型简化为:
g
(
x
,
y
)
=
f
(
x
,
y
)
+
η
(
x
,
y
)
G
(
u
,
v
)
=
F
(
u
,
v
)
+
N
(
u
,
v
)
g(x,y) = f(x,y) + \eta(x,y) \\ G(u,v) = F(u,v) + N(u,v)
g(x,y)=f(x,y)+η(x,y)G(u,v)=F(u,v)+N(u,v)
当仅存在加性随机噪声时,可以采用空间滤波方法来估计原图像
f
(
x
,
y
)
f(x,y)
f(x,y),即对退化图像
g
(
x
,
y
)
g(x,y)
g(x,y) 去除噪声。
空间滤波方法在《7. 空间域图像滤波》中进行了详细介绍,本章简要讨论空间滤波的降噪性能。
3.1 算术平均滤波器(Arithmentic mean filter)
算术平均滤波器是最简单的均值滤波器,与空间域滤波中的盒式滤波器相同。
令 S x y Sxy Sxy 表示中心在点 ( x , y ) (x,y) (x,y) 、大小为 m ∗ n m*n m∗n 的矩形子窗口(邻域)的一组坐标,算术平均滤波器在由 S x y Sxy Sxy 定义的区域中,计算被污染图像 g ( x , y ) g(x,y) g(x,y) 的平均值。
复原的图像
f
^
\hat{f}
f^ 在点
(
x
,
y
)
(x,y)
(x,y) 的值,是使用
S
x
y
Sxy
Sxy 定义的邻域中的像素算出的算术平均值,即:
f
^
(
x
,
y
)
=
1
m
n
∑
(
r
,
c
)
∈
S
x
y
g
(
r
,
c
)
\hat{f}(x,y) = \frac{1}{mn} \sum _{(r,c) \in Sxy} g(r,c)
f^(x,y)=mn1(r,c)∈Sxy∑g(r,c)
这一操作可以通过一个大小为
m
∗
n
m*n
m∗n 的空间滤波器(核)来实现,核的所有系数都是
1
/
m
n
1/mn
1/mn。
均值滤波平滑图像中的局部变化,可以降低图像中的噪声,但会模糊图像。
例程 9.8:算术平均滤波器
# 9.8: 算术平均滤波器 (Arithmentic mean filter)
# 参见例程 1.70:图像的低通滤波 (盒式滤波器核)
img = cv2.imread("../images/Fig0507b.tif", 0) # flags=0 读取为灰度图像
kSize = (3,3)
kernalMean = np.ones(kSize, np.float32) / (kSize[0]*kSize[1]) # 生成归一化盒式核
imgConv1 = cv2.filter2D(img, -1, kernalMean) # cv2.filter2D 方法
kSize = (5,5)
imgConv3 = cv2.boxFilter(img, -1, kSize) # cv2.boxFilter 方法 (默认normalize=True)
plt.figure(figsize=(9, 6))
plt.subplot(131), plt.axis('off'), plt.title("Original")
plt.imshow(img, cmap='gray', vmin=0, vmax=255)
plt.subplot(132), plt.axis('off'), plt.title("filter2D(kSize=[3,3])")
plt.imshow(imgConv1, cmap='gray', vmin=0, vmax=255)
plt.subplot(133), plt.axis('off'), plt.title("boxFilter(kSize=[5,5])")
plt.imshow(imgConv3, cmap='gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()
(本节完)
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接
Copyright 2021 youcans, XUPT
Crated:2022-2-1