提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
从原图像中减去一幅钝化(平滑后的)图像,这个过程称为钝化掩蔽。
1. 原理说明
钝化掩蔽的步骤如下所示:
- 模糊原图像
- 从原图像减去模糊后的图像(产生的差称为模板)
- 将模板与原图像相加
令
f
‾
(
x
,
y
)
\overline{f}(x,y)
f(x,y) 表示模糊后的图像,公式形式的模板为
g
m
a
s
k
(
x
,
y
)
=
f
(
x
,
y
)
−
f
‾
(
x
,
y
)
g_{mask}(x,y)=f(x,y)-\overline{f}(x,y)
gmask(x,y)=f(x,y)−f(x,y)然后,将加权后的模板与原图像相加:
g
(
x
,
y
)
=
f
(
x
,
y
)
+
k
∗
g
m
a
s
k
(
x
,
y
)
g(x,y)=f(x,y)+k*g_{mask}(x,y)
g(x,y)=f(x,y)+k∗gmask(x,y)上式中的
k
k
k 是权值,当
k
=
1
k=1
k=1时,上式是钝化掩蔽,当
k
>
1
k>1
k>1 时,上式称为高提升滤波,当
k
<
1
k<1
k<1 时,可以减少钝化模板的贡献。
下图是钝化掩蔽机理的一维说明:
2. 示例分析
2.1 示例代码
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
def imageUnsharpMasking(image):
"""
图像的钝化掩蔽
:param image: 原图像
:return:
"""
# 先对原始图像进行高斯平滑处理
imgGauss = cv.GaussianBlur(image, (31, 31), 6)
# 计算掩蔽模板
imgMask = image - imgGauss
# 钝化掩蔽
imgSharp1 = image + 1 * imgMask
imgSharp2 = image + 2 * imgMask
imgSharp3 = image + 3 * imgMask
# cv.imshow("xx",imgSharp2)
# cv.waitKey(0)
return [image, imgGauss, imgMask, imgSharp1, imgSharp2, imgSharp3]
if __name__ == '__main__':
img = cv.imread('Image/Fig0505.png', 0)
imageLst = imageUnsharpMasking(img)
# 进行图像的锐化操作
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(10, 7))
titleList = ["原图", "高斯模糊", "掩蔽模板",
"钝化(k=1)", "钝化(k=2)", "钝化(k=3)"]
for i in range(6):
plt.subplot(2, 3, i + 1), plt.title(titleList[i]), plt.axis('off')
plt.imshow(imageLst[i], 'gray', vmin=0, vmax=255)
plt.tight_layout()
plt.savefig("Image/tmp.png")
plt.show()
2.2 示例效果
上图我们可以看出:
- 当 k = 1 k=1 k=1 时,图像要比原图像清晰多了。
- 当 k = 2 k=2 k=2 时,图像中的对比度和清晰度更高(如毛发和面部雀斑)。
- 当 k = 3 k=3 k=3 时,图像更加清晰,但是稍微有些显得不自然。