先看看定义 假设模板大小为(2k+1)*(2k+1),则高斯模板(i,j)处的元素值应该为:
首先我们看一下用 fspecial生成的一个标准差为1.8,大小为3*3的高斯模板矩阵
>> fspecial('gaussian',3,1.8)
ans =
0.0997 0.1163 0.0997
0.1163 0.1358 0.1163
0.0997 0.1163 0.0997
然后我们看一下用matlab程序怎么生成的
首先建一个3*3的标准矩阵矩阵 [x,y]=meshgrid(-1:1,-1:1)
>> [x,y]=meshgrid(-1:1,-1:1)
x =
-1 0 1
-1 0 1
-1 0 1
y =
-1 -1 -1
0 0 0
1 1 1
然后执行
>> h=exp(-(x.*x+y.*y)./(2*1.8*1.8);) %有没有发现这里少了什么东西? 是吧少除了一个2*pi*deta*deta是吧
h =
0.7344 0.8570 0.7344
0.8570 1.0000 0.8570
0.7344 0.8570 0.7344
之后执行归一化你会发现::
>> h=h/sum(sum(h))
h =
0.0997 0.1163 0.0997
0.1163 0.1358 0.1163
0.0997 0.1163 0.0997
这里的h矩阵是不是跟之前用fspecial生成的是一样的。 不过我也不明白为什么这里不除2*pi*deta*deta
接着我来告诉大家为什么不除2*pi*deta*deta 吧,今天终于想通了 因为h/sun(sum(h))这个操作把2*pi*deta*deta 给约分掉了,所以除不除的效果是一样的
如下matlab仿真可以看出结果是一样的
>> M=exp(-(x.^2+y.^2)/(2*1.8^2))/(2*pi*1.8^2)
M =
0.0361 0.0421 0.0361
0.0421 0.0491 0.0421
0.0361 0.0421 0.0361
>> N=M/sum(sum(M))
N =
0.0997 0.1163 0.0997
0.1163 0.1358 0.1163
0.0997 0.1163 0.0997
因此这里要强调的是归一化操作~~~