含义:高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其它像素值经过加权平均后得到。
作用:高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。
高斯噪声:首先,噪声在图像当中常表现为引起较强视觉效果的孤立像素点或像素块。简单来说,噪声的出现会给图像带来干扰,让图像变得不清楚。高斯噪声就是它的概率密度函数服从高斯分布(即正态分布)的一类噪声。如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。高斯白噪声的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。
注:σ的大小决定了高斯函数的宽度。
高斯核计算
理论上,高斯分布在所有定义域上都有非负值,这就需要一个无限大的卷积核。实际上,仅需要取均值周围3倍标准差内[]的值,以外部份直接去掉即可。高斯滤波的重要两步就是先找到高斯模板然后再进行卷积,高斯模板(mask)在有的地方也称作掩膜或者是高斯核。具体案例如下:
假定中心点的坐标是(0,0),那么取距离它最近的8个点坐标,为了计算,需要设定σ的值。假定σ=1.5,则模糊半径为1( size = 3 * 3 )的高斯模板就算如下:
这个时候我们还要确保这9个点加起来为1,这个是高斯模板的特性,这9个点的权重总和等于0.4787147,因此上面9个值还要分别除以0.4787147,得到最终的高斯模板。
高斯滤波计算
假设现有9个像素点,灰度值(0-255)的高斯滤波计算如下:
将这9个值加起来,就是中心点的高斯滤波的值。对所有点重复这个过程,就得到了高斯模糊后的图像。
代码注释:
#高斯函数
void GaussianBlur(InputArray src, //输入图像
OutputArray dst, //输出图像
Size ksize, //内核的大小
double sigmaX, //高斯核函数在X方向的标准偏差
double sigmaY=0, //高斯核函数在Y方向的标准偏差
intborderType=BORDER_DEFAULT )
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc,char** argv) {
//载入原图
Mat image = imread("Gaussian.jpg");
//创建窗口
namedWindow("高斯滤波【原图】");
namedWindow("高斯滤波【效果图】");
//进行滤波操作
Mat out;
GaussianBlur(image,out,Size(3,3),0,0);
//显示
imshow("高斯滤波【原图】", image);
imshow("高斯滤波【效果图】", out);
waitKey(0);
return(0);
}