【OpenCV 完整例程】96. 谐波平均滤波器
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) 去除噪声。
3.3 谐波平均滤波器(Harmonic mean filter)
谐波平均滤波器的复原图像
f
^
\hat{f}
f^ 由下式给出:
f
^
(
x
,
y
)
=
m
n
∑
(
r
,
c
)
∈
S
x
y
1
/
g
(
r
,
c
)
\hat{f}(x,y) = \frac{mn}{\sum _{(r,c) \in Sxy} 1/{g(r,c)}}
f^(x,y)=∑(r,c)∈Sxy1/g(r,c)mn
谐波平均滤波器既能处理盐粒噪声(白色噪点),又能处理类似于高斯噪声的其他噪声,但不能处理胡椒噪声(黑色噪点)。
例程 9.10:谐波平均滤波器
# 9.10: 谐波平均滤波器 (Harmonic mean filter)
img = cv2.imread("../images/Fig0507b.tif", 0) # flags=0 读取为灰度图像
img_h = img.shape[0]
img_w = img.shape[1]
# 算术平均滤波 (Arithmentic mean filter)
kSize = (3, 3)
kernalMean = np.ones(kSize, np.float32) / (kSize[0]*kSize[1]) # 生成归一化盒式核
imgAriMean = cv2.filter2D(img, -1, kernalMean)
# 谐波平均滤波器 (Harmonic mean filter)
m, n = 3, 3
order = m * n
kernalMean = np.ones((m,n), np.float32) # 生成盒式核
hPad = int((m-1) / 2)
wPad = int((n-1) / 2)
imgPad = np.pad(img.copy(), ((hPad, m-hPad-1), (wPad, n-wPad-1)), mode="edge")
epsilon = 1e-8
imgHarMean = img.copy()
for i in range(hPad, img_h + hPad):
for j in range(wPad, img_w + wPad):
sumTemp = np.sum(1.0 / (imgPad[i-hPad:i+hPad+1, j-wPad:j+wPad+1] + epsilon))
imgHarMean[i-hPad][j-wPad] = order / sumTemp
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("Arithmentic mean filter")
plt.imshow(imgAriMean, cmap='gray', vmin=0, vmax=255)
plt.subplot(133), plt.axis('off'), plt.title("Harmonic mean filter")
plt.imshow(imgHarMean, cmap='gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()
(本节完)
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接
Copyright 2021 youcans, XUPT
Crated:2022-2-1