高斯滤波器属于线性滤波器;一般来说,使用大小为mn的滤波器对大小为MN的图像进行线性空间滤波,可由下式表示:
以3*3的的滤波器模板为例,这个公式的含义就是,将相同位置的元素相乘并相加
下面介绍w(s,t)的计算方法
首先来看看二维高斯分布的函数:
假设中心点的坐标是(0,0),那么距离它最近的8个点的坐标如下:
方差值的大小自行选取,假设取1.5,将(-1,-1)、(-1,0)等依次带入二维高斯分布函数计算得到
这9个点的权重总和等于0.4787,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵:
通过这个矩阵我们可以发现,距离中心点越近,权重值越大,这也跟二维高斯函数图像将相呼应
有了权重我们就可以带入第一个公式求像素值了。
上面我们有谈到方差大小sigma的选取,那么sigma大小对图像滤波有什么影响呢,在二维高斯函数图形中,sigma越小,分布越集中,
反映在滤波器中如下表所示:
下面使用不同sigma进行实验后的程序和结果图:
clear;clc
I=rgb2gray(imread('pic.jpg'));
g=imnoise(I,'gaussian',0.1,0.002); %加入高斯噪声
sigma1 = 0.2;
gausFilter1 = fspecial('gaussian', [3,3], sigma1);
Y1= imfilter(g, gausFilter1, 'replicate');
sigma2 = 0.6;
gausFilter2 = fspecial('gaussian', [3,3], sigma2);
Y2= imfilter(g, gausFilter2, 'replicate');
sigma3 = 1;
gausFilter3 = fspecial('gaussian', [3,3], sigma3);
Y3= imfilter(g, gausFilter3, 'replicate');
subplot(2,2,1),imshow(g),title('加入高斯噪声之后的图象'); %显示加入高斯噪声之后的图象
subplot(2,2,2),imshow(Y1),title('sigma1 = 0.2'); %显示滤波后的图象
subplot(2,2,3),imshow(Y2),title('sigma1 = 0.6'); %显示滤波后的图象
subplot(2,2,4),imshow(Y3),title('sigma1 = 1'); %显示滤波后的图象
参考博客:https://blog.csdn.net/shanchuan2012/article/details/51024550