对一个数进行高斯滤波(模糊)可以理解成将该数取附近矩形窗口所有值的加权平均值,距离处理数越近的点权重越大,距离处理点越远的点权重越小。因此如果取的矩形窗口越大,那么对处理点的模糊效果越强烈。
上图,对数值2进行高斯滤波(模糊),取该数附近3×3阶矩形窗口(左图)。如果待处理点2直接取周围点的平均值,就会变成1(右图)。在数值上,这是一种平滑化,在图形上,就相当于产生模糊效果,让中间点失去细节。
因为数值和图像都是连续的,越靠近待处理点的点关系越密切,越远离待处理点的点关系越疏远,像上图那样直接使用简单平均是不合理的。用加权平均更合理,即距离越近的点权重越大,距离越远的点权重越小。之所以把这种滤波方式叫做高斯滤波,是因为权重值是由高斯函数决定。
存在如下一组数据,现对4进行高斯滤波,选取4附近的1×3矩形窗口,即[3 4 2]进行加权求和。
[3 4 2 5 8 1 6]
假定4的坐标是0,那么它附近的矩形窗口的坐标是[-1 0 1]。 一维高斯分布函数可以决定一维数据周围点的权重值,假设=1,分别将坐标代入一维高斯分布函数得到权值矩阵[0.2419 0.3989 0.2419],这3个点的权值总和等于0.8827,如果要计算这3个点的加权平均,必须让他们的权重之和=1,因此权值矩阵还要分别除以0.8827,得到最终的权重矩阵[0.2740 0.4519 0.2740]。将每个点乘以对应的权值,将所有值相加(0.822+1.8076+0.548=3.1776)就是待处理值4的高斯模糊值。像4一样,对3 4 2 5 8 1 6每个数据都进行这样的操作,就是对这个数据进行了高斯滤波。
需要注意的是开头3和结尾6,要么不进行高斯滤波(常用),要么补零。
python中,一维高斯滤波器的函数:
gaussian_filter1d(input, sigma)
input:输入一维数据;sigma: 高斯函数里面的,越大滤波越厉害;返回一个和input形状一样的数据。
现对下图一中的4进行高斯滤波,选取4附近的3×3矩形窗口,对[[14 15 16],[24 25 26],[34 35 36]]进行加权求和。假定25的坐标是(0,0),那么它附近的矩形窗口的坐标是[[(-1,1) (0,1) (1,1)],[(-1,0) (0,0) (1,0)],[(-1,-1) (0,-1) (1,-1)]]。 二维高斯分布函数可以决定二维数据周围点的权重值,假设=1.5,分别将坐标代入一维高斯分布函数得到权值矩阵(图二),9个点的权值总和等于0.4787147,如果要计算这9个点加权平均,必须让他们的权重之和=1,故权值矩阵还要分别除以0.4787147,得到最终的权重矩阵(图三)。将每个点乘以对应的权值(图四),将所有值相加(24.9999)就是待处理值25的高斯模糊值。
python中,多维高斯滤波器的函数:
gaussian_filter(input, sigma)
input:输入矩阵;sigma: 高斯函数里面的,越大滤波越厉害;返回一个和input形状一样的数据。
参考:高斯滤波gaussian_filter()_wanghua609的博客-CSDN博客_gauss_filter