高斯滤波器原理及其实现
来源:互联网 发布:淘宝怎么营销 编辑:程序博客网 时间:2024/05/29 11:05
高斯滤波器是空间滤波器的一种,学习高斯滤波器,需要空间滤波的知识作为先验知识(各种数字图像处理的书中都有介绍,冈萨雷斯的经典教材说的还是比较清楚的,建议看英文版,个人感觉比翻译过来的更容易理解)。
高斯滤波器是一种平滑线性滤波器,使用高斯滤波器对图像进行滤波,其效果是降低图像灰度的“尖锐”变化,也就是使图像“模糊”了。高斯滤波对于抑制服从正态分布的噪声效果非常好,其代价是使图像变得“模糊”。当然,有时对图像进行平滑滤波的目的就是让图像变得模糊。
高斯滤波的模板是用高斯公式计算出来的。下面是一维和二维高斯分布函数及其函数图像:
一维高斯分布函数: 二维高斯分布函数:
它们的图像分别为:
那么高斯滤波模板是怎么生成的呢?是通过二维高斯函数计算出来的。例如,我们假设一个高斯模板的长、宽均为5,方差为0.5,那么首先,我们要在模板上建立一个坐标系,其原点就是高斯模板的中心点,如下图:
然后每个模板的坐标就可以确定了:
每个格子对应的坐标,就是二维高斯分布中的(x,y)坐标的值。现在,我们可以计算出高斯模板上每个坐标位置的系数了。例如:
(-2,2)上的权值:W = ,把pi = 3.14, σ=0.5,x=-2,y=2带入上式,获得(-2,2)处的权值。
同理,可以计算 其他位置的权值。
最后获得一个5*5,标准差σ为0.5的高斯滤波器(经过归一化以后):
matlab中可以使用fspecial函数实现高斯滤波模板,使用方法为:YourFilter = fspecial('gaussian', [ 5 5], 0.5);
在matlab中可以查看fspecial的源代码,通过open fspecial打开。我之前自己写了一个matlab版的实现高斯模板的代码,通过与fspecial的源代码对比,有些不一样的地方,而且我的代码确实不如自带的快,所以在这里只贴源代码。
fspecial函数可以实现多种类型的滤波器,当第一个参数为"gaussian'时,实现的是高斯滤波器,源代码通过switch判断用户想得到哪种类型的滤波器,这里只把与高斯滤波器有关的代码贴出来,并放在一个函数中,我们把这个函数命名为gaussianFilter。函数的代码如下:
- function h = gaussianTemplate2( p2, p3 )
- %p2是模板的大小,以[m n]的形式定义
- %p3是标准差,即σ
- %h是输出的高斯模板
- %以下代码是从fspecial中贴出来的代码
- siz = (p2-1)/2; %siz为模板行与列各自最大的坐标值
- std = p3; %标准差幅值给std
- %通过meshgrid产生模板上所有位置的x和y的值,这样的好处是可以避免使用循环去
- %变换坐标值,提高程序运行的速度
- [x,y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1));
- %二维高斯分布公式中e的指数
- arg = -(x.*x + y.*y)/(2*std*std);
- %这里没有乘以1/2*pi*σ^2,也就是没有乘以e前面的系数,因为后面在作归一化的
- %时候,会把这个系数约去,所以在这里直接省去乘法运算,提高程序运行速度
- h = exp(arg);
- %这句话没有太理解,貌似只有在max(h(:))大于1的时候h才有可能小于eps*max(h(:))
- %个人理解应该是限制一下h中的权值,如果权值相对于h中的最大值特别小的话,可以
- %忽略不计,使之为零
- h(h<eps*max(h(:))) = 0;
- %归一化
- sumh = sum(h(:));
- if sumh ~= 0,
- h = h/sumh;
- end;
- end
原始图像 加入高斯噪声图像
使用5*5,方差为0.5的高斯滤波器滤波 使用5*5,方差为1.5的高斯滤波器滤波
使用11*11,方差为0.5的高斯滤波器滤波
- 高斯滤波器原理及其实现
- 高斯滤波器及其实现
- 双边滤波器原理及其matlab实现
- 高斯平滑滤波器opencv实现效果
- 使用递归高斯滤波器实现快速高斯模糊
- 使用递归高斯滤波器实现快速高斯模糊
- kalman 滤波器及其MATLAB实现
- 高斯滤波器
- 高斯滤波器
- 高斯滤波器
- 高斯滤波器
- 高斯滤波器
- 高斯滤波器
- 高斯滤波器
- 高斯滤波器
- 高斯平滑滤波器
- 高斯滤波器理解
- 高斯滤波器
- 1.删除一个无头单链表的非尾节点 2.从尾到头打印单链表
- placeholder属性使用
- 【Redis深入】Jedis的使用
- 富文本编辑器Quill的简单React封装
- android数据库操作(ContentProvider)
- 高斯滤波器原理及其实现
- 游戏中的实时水体模拟技术分享:波形叠加法与波动方程
- 手机号码判断
- ZOJ 3638 (集合组合、容斥定理)
- 学习笔记之js数组去重的方法三种
- 如何看懂这些图形学公式
- java中的23种设计模式
- 网站、手机验证码开发(手机注册验证)
- 连续最大积 hdu 4567