最近在做一些图像滤波的操作,在这把关于高斯滤波的一点总结帖在这把。首先就是高斯函数了,下图为高斯函数的图
高斯函数的形式为
高斯滤波
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
若使用3×3模板,则计算公式如下g(x,y)={f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1)+[f(x-1,y)+f(x,y-1)+f(x+1,y)+f(x,y+1)]*2+f(x,y)*4}/16;
其中,f(x,y)为图像中(x,y)点的灰度值,g(x,y)为该点经过高斯滤波后的值。
高斯分布
一维高斯分布的代码
x = -4:0.01:4;
alf=1;
weight = 1 /(sqrt(2*pi)*alf);
y1 = weight*exp(-((x-0).^2)/(2*alf^2));
y2 = 4*x;
subplot(121),plot(x,y1),title('一维高斯函数' );
高斯核
理论上,高斯分布在所有定义域上都有非负值,这就需要一个无限大的卷积核。实际上,仅需要取均值周围3倍标准差内的值,以外部份直接去掉即可。如下图为一个标准差为1.0的整数值高斯核。
关于滤波
滤波通常是用卷积或者相关来描述,而线性滤波一般是通过卷积来描述的。他们非常类似,但是还是会有不同。下面我们来根据相关和卷积计算过程来体会一下他们的具体区别:
卷积的计算步骤:
1)卷积核绕自己的核心元素顺时针旋转180度
2)移动卷积核的中心元素,使它位于输入图像待处理像素的正上方
3)在旋转后的卷积核中,将输入图像的像素值作为权重相乘
4)第三步各结果的和做为该输入像素对应的输出像素
相关的计算步骤:
1)移动相关核的中心元素,使它位于输入图像待处理像素的正上方
2)将输入图像的像素值作为权重,乘以相关核
3)将上面各步得到的结果相加做为输出
可以看出他们的主要区别在于计算卷积的时候,卷积核要先做旋转。而计算相关过程中不需要旋转相关核。
例如:magic(3) =[8 1 6;3 5 7;4 9 2],旋转180度后就成了[2 9 4;7 5 3;6 1 8]
MATLAB 使用预定义滤波的代码;
clear all;
I = imread('cameraman.tif');
subplot(2, 2, 1), imshow(I);
I2=imnoise(I,'gaussian',0.1,0.002); %加入高斯噪声
subplot(2, 2, 2), imshow(I2);
%对I高斯滤波
k = 7 ;%均值
n3 = 2;%方差
H=fspecial('gaussian',k,n3); %生成高斯序列
I3=imfilter(I,H); %用生成的高斯序列进行滤波
subplot(2, 2, 3), imshow(I3);
%对I2高斯滤波
k = 9 ;%均值
n3 = 1;%方差
H=fspecial('gaussian',k,n3); %生成高斯序列
I4=imfilter(I2,H); %用生成的高斯序列进行滤波
subplot(2, 2, 4), imshow(I4);
参考:
http://homepages.inf.ed.ac.uk/rbf/HIPR2/gsmooth.htm;
http://blog.csdn.net/yihaizhiyan/article/details/6613255;
http://blog.sina.com.cn/s/blog_afe2af380101blh0.html;
http://www.cnblogs.com/pegasus/archive/2011/05/20/2052031.html;
http://blog.csdn.net/l_inyi/article/details/8915116;