高斯函数

来源:互联网 发布:淘宝网首页中年女装 编辑:程序博客网 时间:2024/06/05 10:48

高斯函数的应用广泛,这里讲述其在平滑图像时的用法。

1、高斯曲线绘制

绘制曲线参考公式:

Z=12πσ2exp([(Xu)2+(Yu)2]2σ2)

X,Y表示网格的大小;

%高斯曲线的绘制-2016-11-04-Sundayclc;clear all;gridSize=40;%网格大小X=0:gridSize-1;Y=0:gridSize-1;sigma2=20;%方差u=20;%均值Z = zeros(gridSize, gridSize);for row = 1:gridSize    for col = 1:gridSize        numerator(row, col) = (X(row) - u)^2 + (Y(col) - u)^2;%高斯函数内部分子计算    endendZ = exp(-numerator/(2*sigma2))/(2*pi * sigma2);%高斯函数的值,曲面的高度surf(X, Y, Z);title('Guassian') 



Figure 1. 图像边界分类

我们得到上述三维图形的底面(网格会将底面网格化,离散化)的投影,然后将曲面的高度换算成网格里面的值,就是我们要的模板。
假设我们的模板放在矩阵M中,M的大小为(2k+1)*( 2k+1),那么M(i,j)的值为:
M(i,j)=12πσ2exp([(ik1)2+(jk1)2]2σ2)

%高斯平滑-2016-11-04clc;clear all;I = imread('lena.tiff');%test2 I=rgb2gray(I);Img = double(I);k=1;              %模板长度的一半row = 2*k+1;      %模板长度col = 2*k+1;sigma2=1;         %方差for i=1 : row    for j=1 : col        fenzi=double((i-k-1)^2+(j-k-1)^2);        A(i,j)=exp(-fenzi/(2*sigma2))/(2*pi*sigma2);    endendImg1 = imfilter(I,A,'conv');  imshow(Img1),title('高斯滤波,3X3,sigma=1')  



Figure 1. 原灰度图像



Figure 1. 3x3模板不同的sigma2值得到的模板M对图像影响


Figure 1. sigma2=1时不同的模板大小得到的模板M对图像的影响。

补充1:从上面的实验可以看到sigma2越小,钟型越窄,图像越亮;模板的大小对于本实验几乎没有什么影响。(这个实验与图像平滑的关系是什么?)
补充1:在参考文献1中,描述到如何将小数的模板整型化,但是在实际实验中发现在3x3模板中,sigma2=3与sigma2=9具有相同的整型模板,所以对此看法存在怀疑。
%将小数模板整型化语句 
C=floor(A.*(1/A(1,1)));

补充3:高斯模板的size和sigma之间的关系(这里举例在opencv上的关系,在其他系统中对应关系存在差异)
Sigma=0.3((size1)0.51)+0.8

size=6Sigma+1

参考:
1、http://blog.csdn.net/shanchuan2012/article/details/51024550《如何得到高斯滤波器的整数模板》

1 0
原创粉丝点击