高斯滤波器原理及其实现
高斯滤波器是空间滤波器的一种,学习高斯滤波器,需要空间滤波的知识作为先验知识(各种数字图像处理的书中都有介绍,冈萨雷斯的经典教材说的还是比较清楚的,建议看英文版,个人感觉比翻译过来的更容易理解)。
高斯滤波器是一种平滑线性滤波器,使用高斯滤波器对图像进行滤波,其效果是降低图像灰度的“尖锐”变化,也就是使图像“模糊”了。高斯滤波对于抑制服从正态分布的噪声效果非常好,其代价是使图像变得“模糊”。当然,有时对图像进行平滑滤波的目的就是让图像变得模糊。
高斯滤波的模板是用高斯公式计算出来的。下面是一维和二维高斯分布函数及其函数图像:
一维高斯分布函数: 二维高斯分布函数:
它们的图像分别为:
那么高斯滤波模板是怎么生成的呢?是通过二维高斯函数计算出来的。例如,我们假设一个高斯模板的长、宽均为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
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
获得高斯模板后,使用imfilter函数对图像进行滤波,即可获得高斯滤波效果。下面我们使用不同的高斯滤波器,对同一幅图像进行滤波,滤波的结果如下所示:
原始图像 加入高斯噪声图像
使用5*5,方差为0.5的高斯滤波器滤波 使用5*5,方差为1.5的高斯滤波器滤波
使用11*11,方差为0.5的高斯滤波器滤波
高斯滤波器原理及其实现相关推荐
- 【图像处理:频率域平滑与锐化】理想滤波器,巴特沃思滤波器,高斯滤波器
[频率域平滑.锐化滤波器]理想滤波器,巴特沃思滤波器,高斯滤波器 一.背景知识 二.理想滤波器原理及实现 1.理想低通滤波器 2.理想低通滤波器的实现: 3.理想高通滤波器: 三.巴特沃思滤波器原理及 ...
- python一维平滑滤波_高斯滤波器的原理及其实现过程(附模板代码)
本文主要介绍了高斯滤波器的原理及其实现过程高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像.其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出.其窗口模板的系数和均值滤波器不同 ...
- 高斯滤波器(Gaussian Filter) python实现及部分原理说明(opencv)
上传图片 # read the image img = cv2.imread("img/11.jpeg")# Print out the type of image data an ...
- 【Matlab 图像】滤波器原理使用及测试效果
滤波器使用及测试效果 滤波器1:低通滤波 原理 代码 效果 滤波器2:高斯平滑 原理 代码 效果 滤波器3:自适应中值滤波 原理 代码 效果 滤波器4:维纳滤波 原理 代码 效果 滤波器5:最大值滤波 ...
- OpenCV高斯滤波器详解及代码实现
高斯滤波(Gauss Filter)是线性滤波中的一种.在OpenCV图像滤波处理中,高斯滤波用于平滑图像,或者说是图像模糊处理,因此高斯滤波是低通的.其广泛的应用在图像处理的减噪过程中,尤其是被高斯 ...
- Python机器视觉--OpenCV进阶(核心)--常用低通滤波器(方盒滤波器,均值滤波器,高斯滤波器,中值滤波器,双边滤波器)
1.常用低通滤波器介绍 1.1低通滤波器与高通滤波器的区别: 1.低通滤波主要用于噪点的消除或者是用于图像的降噪 2.高通滤波器主要于图像边缘的寻找 1.2 方盒滤波 boxFilter(src, d ...
- 单片机高斯滤波器 c语言,高斯滤波器在实时系统中的快速实现
详细讨论了高斯滤波器在单片机系统中的快速实现方法,并给出了对于MCS-51系列单片机的具体实现程序,介绍的方法在实时控制.信号检测与处理方面有很大的实用价值.本文引用地址:http://www.eep ...
- python高斯滤波和降噪_高斯滤波原理及python实现
高斯滤波器时一种线性平滑滤波器,主要适用处理高斯噪声,所以在了解高斯滤波之前,我们首先熟悉一下高斯噪声.噪声在图像中表现的通常是引起视觉效果的孤立像素点和像素块,简单说噪声点就是会给图像带来干扰,让图 ...
- ITK:带有离散高斯滤波器的平滑图像
ITK:带有离散高斯滤波器的平滑图像 内容提要 C++实现代码 内容提要 使用离散高斯滤波器对图像进行平滑处理. C++实现代码 #include "itkImage.h" #in ...
- 【Matlab】扩展卡尔曼滤波器原理及仿真(初学者入门专用)
文章目录 0.引言及友情链接 1.场景预设 2.扩展卡尔曼滤波器 3.仿真及效果 0.引言及友情链接 \qquad卡尔曼滤波器(Kalman Filter, KF)是传感器融合(Sensor Fusi ...
最新文章
- Swift中NSRange和Range的转换
- SP1026 FAVDICE - Favorite Dice
- squid反向代理(实现缓存)加速web
- 为什么待办事项清单不管用
- 新工科背景下的计算机类专业人才培养探讨
- 子恩域名授权系统2.0全解
- 华为视频会议系统常见问题及解决方法
- Visual Studio配置(4):项目属性页-VC++目录
- EXCEL 常用的宏代码大全
- lingo求优化模型
- Apache Tomcat选择哪个版本好?
- QQ空间扫码登录协议 Java
- 大数据Spark框架概述
- 三角形中重心、内心、外心、垂心向量计算公式
- 安装打印机提示未能添加服务器,打印机未能链接到服务器
- java黄金分割点游戏_黄金点游戏(单机版)
- electron-vue中调用系统屏幕键盘(linux与windows)
- ios怎么更新测试软件,苹果iOS13 beta3测试版升级教程 iOS13 beta3更新方法
- 淘宝新店运营怎么选品?API接口助您高效选品
- 微信小程序实现押金管理(支付押金、申请退还押金、押金明细)
热门文章
- unity3d 常用代码
- java 知网 语义 相似度,基于知网的词汇语义相似度计算-hownet!.doc
- StrongShop跨境电商系统源码 | 支持多语言多货币
- 【190111】VC+Access工程信息管理系统源代码
- .NET 调整图片尺寸(Resize)各种方法
- [C/C++]如何在ARM环境下进行开发
- CCF推荐的A类、B类、C类中文科技期刊
- c语言编fft算法程序,用C语言实现FFT算法
- Vb如何设计编程计算机,vb程序设计论文
- CentOS安装锐捷认证客户端