本书京东 优惠购书链接 https://item.jd.com/14098452.html
本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html
图像滤波是指在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制,是常用的图像处理方法。
空间滤波也称空间域滤波,滤波器规定了邻域形状与邻域像素的处理方法。线性滤波通过图像与滤波器核进行卷积计算,非线性滤波则包含了绝对值、置零和统计等非线性运算,通过逻辑运算实现图像滤波。
本章内容概要
高斯滤波器(Gaussian Filter)是以高斯核函数为权函数的滤波器,在信号和图像处理领域的应用非常广泛。
高斯核函数的数学描述如下。
w ( s , t ) = G ( s , t ) = 1 2 π σ 2 e ? r 2 / 2 σ 2 w(s,t) = G(s,t) =\frac{1}{2\pi\sigma^2} e^{-r^2/2\sigma^2} w(s,t)=G(s,t)=2πσ21?e?r2/2σ2
式中, σ \sigma σ 是高斯核的标准差(尺度因子);r 表示任意点到中心点的距离。
高斯卷积核有很多重要的性质。
(1) 高斯卷积核是圆对称(各向同性)的,中心点的权重最大,离中心点越远,权重越小。
(2) 高斯卷积核是可分离卷积核,可以通过水平卷积核和垂直卷积核实现对图像的卷积。
(3) 高斯卷积核的有效尺寸为
(
6
σ
+
1
)
(
6
σ
+
1
)
(6\sigma+1) (6\sigma+1)
(6σ+1)(6σ+1) ,尺寸越大,平滑程度越高。
OpenCV中的函数cv.GaussianBlur用于实现高斯低通滤波,函数cv.getGaussianKernel用于计算一维高斯滤波器的系数。
函数原型
cv.GaussianBlur(src, ksize, sigmaX[, dst, sigmaY, borderType]) → dst
cv.getGaussianKernel(ksize, sigma[, ktype]) → retval
参数说明
注意问题
本例程介绍高斯滤波器的使用。
# 【1003】空间滤波之高斯低通滤波器
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
if __name__ == '__main__':
img = cv.imread("../images/Fig1001.png", flags=0) # 读取灰度图像
# (1) 计算高斯核
kernX = cv.getGaussianKernel(5, 0) # 一维高斯核
kernel = kernX * kernX.T # 二维高斯核
print("1D kernel of Gaussian:{}".format(kernX.shape))
print(kernX.T.round(4))
print("2D kernel of Gaussian:{}".format(kernel.shape))
print(kernel.round(4))
# (2) 高斯低通滤波核
ksize = (11, 11) # 高斯滤波器核的尺寸
GaussBlur11 = cv.GaussianBlur(img, ksize, 0) # sigma 由 ksize 计算
ksize = (43, 43)
GaussBlur43 = cv.GaussianBlur(img, ksize, 0)
plt.figure(figsize=(9, 3.2))
plt.subplot(131), plt.axis('off'), plt.title("1. Original")
plt.imshow(img, cmap='gray', vmin=0, vmax=255)
plt.subplot(132), plt.axis('off'), plt.title("2. GaussianFilter (k=11)")
plt.imshow(GaussBlur11, cmap='gray', vmin=0, vmax=255)
plt.subplot(133), plt.axis('off'), plt.title("3. GaussianFilter (k=43)")
plt.imshow(GaussBlur43, cmap='gray', vmin=0, vmax=255)
plt.tight_layout()
plt.show()
运行结果:
1D kernel of Gaussian:(5, 1)
[[0.0625 0.25 0.375 0.25 0.0625]]
2D kernel of Gaussian:(5, 5)
[[0.0039 0.0156 0.0234 0.0156 0.0039]
[0.0156 0.0625 0.0938 0.0625 0.0156]
[0.0234 0.0938 0.1406 0.0938 0.0234]
[0.0156 0.0625 0.0938 0.0625 0.0156]
[0.0039 0.0156 0.0234 0.0156 0.0039]]
程序说明:
(1) 函数cv.getGaussianKernel能返回一维高斯滤波器的系数,可以由此计算并得到二维高斯滤波器的系数。
(2) 运行结果,高斯低通滤波器的滤波图像如图10-3所示。图10-3(2)和图10-3(3)所示为使用不同滤波器尺寸的平滑图像。高斯核的标准差sigma越大,高斯滤波器核的尺寸ksize越大,滤波图像越模糊。
图10-3 高斯低通滤波器的滤波图像
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/135370696)
Copyright 2024 youcans, XUPT
Crated:2024-01-03
《数字图像处理-OpenCV/Python》 独家连载专栏 : https://blog.csdn.net/youcans/category_12418787.html