高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。
通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
对应均值滤波和方框滤波来说,其邻域内每个像素的权重是相等的。而在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算邻域内各个像素值不同权重的和。
使用图2-3中的卷积核,针对第 5 行第 4 列位置上的像素值为 142 的像素点进行高斯滤波处理,计算方式为:
新值=(48*0.05+126*0.1+85*0.05)+(189*0.1+142*0.4+221*0.1)+(45*0.05+78*0.1+196*0.05)
=137
import cv2 import matplotlib.pylab as plt import matplotlib as mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体为黑体 mpl.rcParams['axes.unicode_minus'] = False # 正常显示负号 # 均值滤波 img = cv2.imread("lena.jpeg") # 解决彩色图像出现色差问题 b, g, r = cv2.split(img) # 分别提取B、G、R通道 img_new = cv2.merge([r, g, b]) # 重新组合为R、G、B blur = cv2.blur(img_new, (25, 25)) blur_med = cv2.medianBlur(img_new, 25) blur_gauss = cv2.blur(img_new, (25, 25), 0) # 显示图像 # plt.subplot(nrows, ncols, index) # 表示在当前画布的右上角创建一个1行3列的绘图区域,同时 选择在第 1 个位置绘制子图。 plt.subplot(1, 4, 1) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 plt.imshow(img_new) plt.title('原图') plt.subplot(1, 4, 2) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 # plt.imshow(blur, 'gray') plt.imshow(blur) plt.title('均值滤波') plt.subplot(1, 4, 3) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 plt.imshow(blur_med) plt.title('中值滤波') plt.subplot(1, 4, 4) plt.xticks([]), plt.yticks([]) # 隐藏x和y轴 plt.imshow(blur_gauss) plt.title('高斯滤波') plt.show()