1.从正态分布说起
高斯滤波使用的是高斯函数,即我们熟悉的正态分布的概率密度函数:
f(x)=1σ2π−−√exp(−(x−μ)22σ2)
我们生成的高斯模板就是从这个公式来的。例如要生成一个大小为3,标准差为1的模板,则只需要代公式计算(此处均值 μ 为0,不为0将其平移即可): f(−1) 、 f(0) 、 f(1) 就可以得到模板的值了。
2.高斯滤波是如何实现的?
其实思想很简单,高斯分布的特点是在均值 μ 两边的概率都很大,离之越远的概率越小,所以高斯函数用在滤波上体现的思想就是:离某个点越近的点对其产生的影响越大,所以让其权重大,越远的产生的影响越小,让其权重越小。
举个例子,有如下一个序列,对其中的6进行操作,模板为[1,2,1]:
- 1
- 2
- 3
那么结果为: (5∗1+6∗2+3∗1)/(1+2+1)=5 ,对每个数据都进行这样的操作,就是所谓的高斯滤波了。
有一个问题,如果是开头和结尾怎么办?
一种做法是补0:
- 1
- 2
- 3
另一种做法就是不让模板超出信号的范围,此处采用后一种做法。
3.matlab代码
高斯滤波函数Gaussianfilter
:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
测试代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
如何使用?
新建2个m文件,一个命名为Gaussianfilter
,把第一段代码复制进去;另一个命名为testgauss
,把第二段代码复制进去,保存。在testgauss中点击运行
按钮,即可看到结果。
结果: