高斯滤波及高斯卷积核C++实现
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,在图像处理的降噪、平滑中应用较多,特别是对抑制或消除服从正态分布的噪声非常有效。
高斯滤波的过程其实就是对整幅图像进行加权平均操作的过程。滤波后图像上每一个像素的灰度值大小,由其本身和邻域内的其他像素共同决定。具体实现是:用一个大小为(2*N+1)的模板(或称卷积核、掩模)依次扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度替代模板中心像素点的灰度值。
一维、二维高斯分布
一维高斯函数表述为:
对应图形:
二维高斯函数表述为:
对应图形:
一些重要特性说明:
1. 一维二维高斯函数中μ是服从正态分布的随机变量的均值,称为期望或均值影响正态分布的位置,实际的图像处理应用中一般取μ=0;σ是标准差,σ^2是随机变量的方差,σ定义了正态分布数据的离散程度,σ越大,数据分布越分散,σ越小,数据分布越集中。
在图形或滤波效果上表现为:σ越大,曲线越扁平,高斯滤波器的频带就越宽,平滑程度就越好,σ越小,曲线越瘦高,高斯滤波的频带就越窄,平滑程度也越弱;
2. 二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向;
3. 高斯函数是单值函数。这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的。这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真;
4. 相同条件下,高斯卷积核的尺寸越大,图像的平滑效果越好,表现为图像越模糊,同时图像细节丢失的越多;尺寸越小,平滑效果越弱,图像细节丢失越少;
以下对比一下不同大小标准差σ(Sigma)对图像平滑的影响:
原图:
卷积核尺寸5*5,σ=0.1:
卷积核尺寸5*5,σ=1:
对比可以看到,Sigma(σ)越大,平滑效果越明显。
C++对高斯卷积核参数求解:
#include "iostream"
#include "math.h"using namespace std;
using namespace cv; //******************高斯卷积核生成函数*************************
//第一个参数gaus是一个指向含有3个double类型数组的指针;
//第二个参数size是高斯卷积核的尺寸大小;
//第三个参数sigma是卷积核的标准差
//*************************************************************
void GetGaussianKernel(double **gaus, const int size,const double sigma);int main(int argc,char *argv[])
{int size=5; //定义卷积核大小double **gaus=new double *[size];for(int i=0;i<size;i++){gaus[i]=new double[size]; //动态生成矩阵}cout<<"尺寸 = 3*3,Sigma = 1,高斯卷积核参数为:"<<endl;GetGaussianKernel(gaus,3,1); //生成3*3 大小高斯卷积核,Sigma=1; cout<<"尺寸 = 5*5,Sigma = 10,高斯卷积核参数为:"<<endl;GetGaussianKernel(gaus,5,10); //生成5*5 大小高斯卷积核,Sigma=1; system("pause");return 0;
}//******************高斯卷积核生成函数*************************
void GetGaussianKernel(double **gaus, const int size,const double sigma)
{const double PI=4.0*atan(1.0); //圆周率π赋值int center=size/2;double sum=0;for(int i=0;i<size;i++){for(int j=0;j<size;j++){gaus[i][j]=(1/(2*PI*sigma*sigma))*exp(-((i-center)*(i-center)+(j-center)*(j-center))/(2*sigma*sigma));sum+=gaus[i][j];}}for(int i=0;i<size;i++){for(int j=0;j<size;j++){gaus[i][j]/=sum;cout<<gaus[i][j]<<" ";}cout<<endl<<endl;}return ;
}
求得的高斯卷积核参数存放在一个大小为N*N的数组内:
高斯滤波及高斯卷积核C++实现相关推荐
- 带噪图像的高斯滤波MATLAB,图像处理___高斯滤波与高斯噪声
噪声 1.噪声表现形式 噪声在图像上常表现为一引起较强视觉效果的孤立像素点或像素块.一般,噪声信号与要研究的对象不相关,它以无用的信息形式出现,扰乱图像的可观测信息.通俗的说就是噪声让图像不清楚. 2 ...
- SIFT四部曲之——高斯滤波
版权声明:本文为博主原创文章,未经博主允许不得转载.博客不用于商业活动,博主对博客的使用,拥有最终解释权 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢 ...
- 高斯滤波的理解与学习
高斯滤波的理解与学习 微信公众号:幼儿园的学霸 目录 文章目录 高斯滤波的理解与学习 目录 前言 高斯函数 一维高斯函数 二维高斯函数 高斯滤波过程 高斯核求解 利用高斯核滤波 高斯滤波步骤 高斯滤波 ...
- 图像处理:高斯滤波算法
目录 前言 概念介绍 基本原理 卷积核的大小 卷积核的形状和权重比 卷积核的归一化 结论 Opencv实现高斯滤波 Python手写实现高斯滤波 参考文章 前言 在此之前,我曾在此篇中推导过图像处理: ...
- 二、图像阈值处理及平滑操作(均值滤波、方框滤波、高斯滤波、中值滤波)
content: 人生仍需多点绿... 具体的原理:请参考:https://www.jianshu.com/p/b453c0f24b29 参考2:https://yq.aliyun.com/artic ...
- 【图像处理】之高斯滤波:原理、代码实现和优化加速
文章目录 声明 概念 高斯滤波性质 高斯模糊原理 高斯函数 高斯核(高斯模板) 高斯滤波计算 边界处理 优化:高斯函数分离特性 代码实现 参考资料 声明 本文整合了网上内容,引用出处见文末参考链接,如 ...
- 高斯滤波、双边滤波、邻域滤波、非局部均值滤波(NL-means) 笔记
1.高斯滤波以及高斯噪声 高斯滤波作为一种平滑线性滤波器,可以抑制图像的"尖锐"变化,对于抑制服从正态分布的噪声效果非常好,但同时会损失大量的边缘信息.学习高斯滤波首先要了解高斯核 ...
- 【OpenCV 4开发详解】高斯滤波
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
- python一维平滑滤波_高斯滤波器的原理及其实现过程(附模板代码)
本文主要介绍了高斯滤波器的原理及其实现过程高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像.其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出.其窗口模板的系数和均值滤波器不同 ...
最新文章
- C++求n个字符的长度为m的组合
- 一种基于游戏引擎的AR模式探讨(下)
- 10月碎碎念-谈谈『自我放弃』
- java 转码%2f%_JS和JAVA中常用的编码转码函数
- 在VirtualBox里复制VDI文件[转]
- 深度强化学习-Policy Gradient基本实现
- 一段不错的话透过公车的玻璃窗突然看见你
- 11.频域里的卷积——介绍,傅里叶变换和卷积,快速傅里叶变换(FFT)_1
- mongodb4简明笔记
- 一些值得注意的算法题——哈希表
- PE格式第七讲,重定位表
- kafka启动后闪退
- 微信小程序内嵌网页的一些(最佳)实践
- c#之有参和无参构造函数,扩展方法
- STC单片机开发板介绍以及使用(51单片机介绍)
- win7计算机时间同步出错,win7系统电脑时间同步出错的解决方法
- css特效一:文字覆盖图像悬停效果
- 技术变化太快,程序员咋办? 从Adobe Flash想到那些年我幸运躲过的MFC和塞班
- SaaS行业的六大安全问题
- react的ref三种使用方式,获取元素内容