高斯滤波原理及实现

您所在的位置:网站首页 点云高斯滤波原理 高斯滤波原理及实现

高斯滤波原理及实现

2024-03-11 03:43| 来源: 网络整理| 查看: 265

https://blog.csdn.net/linqianbi/article/details/78635941

高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1;而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小。所以,高斯滤波器相比于均值滤波器对图像个模糊程度较小。

什么是高斯滤波器 既然名称为高斯滤波器,那么其和高斯分布(正态分布)是有一定的关系的。一个二维的高斯函数如下:

其中为点坐标,在图像处理中可认为是整数;是标准差。要想得到一个高斯滤波器的模板,可以对高斯函数进行离散化,得到的高斯函数值作为模板的系数。例如:要产生一个的高斯滤波器模板,以模板的中心位置为坐标原点进行取样。模板在各个位置的坐标,如下所示(x轴水平向右,y轴竖直向下)

这样,将各个位置的坐标带入到高斯函数中,得到的值就是模板的系数。 对于窗口模板的大小为 ,模板中各个元素值的计算公式如下:

这样计算出来的模板有两种形式:小数和整数。 小数形式的模板,就是直接计算得到的值,没有经过任何的处理; 整数形式的,则需要进行归一化处理,将模板左上角的值归一化为1,下面会具体介绍。使用整数的模板时,需要在模板的前面加一个系数,系数为也就是模板系数和的倒数。

二维高斯模板的生成:  

double **getTwoGuassionArray(int size, double sigma) { double sum = 0.0; int kerR = size / 2; double **arr = new double*[size]; for (int i = 0; i < size; i++) { arr[i] = new double[size]; } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { arr[i][j] = exp(-((i-kerR)*(i-kerR) + (j-kerR)*(j-kerR)) / (2 * sigma*sigma)); sum += arr[i][j]; } } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { arr[i][j] /= sum; cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3