标签:
如何得到高斯滤波器的整数模板?这个问题困扰了我两天,上网搜索的代码,基本上都生成的小数,有的文档给写了3*3,5*5,7*7的整数形式,但是没有说是怎么得到的,应该说是我没有仔细看吧,现在恍然大悟,只要将左上角的元素化为1就可以了啊。我还以为用什么高级方法得出来的,晕死了。
要得到高斯滤波器的整数模板就要从这个公式入手,这个公式在三维坐标下的形式是这样的:
我们要的高斯滤波器的整数模板相当于这个三维图形在底面(将底面网格化,也就是离散化,计算机不能处理连续的东东)的投影,将曲面的高度换算成网格里面的值,这是我们要的模板了。
假设我们的模板放在矩阵M中,M的大小为(2k+1)*( 2k+1),那么M(i,j)的值为:
说明:这就是由连续公式得到的,只不过这里的M是一个矩阵,原点在矩阵的中间,所以有(i-k-1)以及(j-k-1)为的就是让原点到矩阵中间。
clear;
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);
end
end
A %显示小数形式
C=floor(A.*(1/A(1,1))); %左上角化为1(想了很久整数是怎么得出来的,只要这样就可以了,郁闷)
这个代码得到的是一个7*7,sigma=1高斯滤波器的小数和整数模板,如下:
小数:
整数:
当时想了很久怎样才能得到整数形式的模板,无意间从网上看了将左上角的元素化为1就可以了,我只能说自己的脑壳真是迟钝啊。
之所以放这几个模板,可以发现,sigma的取值对模板的影响很大,所以如何取sigma,这应该是个经验性的问题。
标签:
原文地址:http://blog.csdn.net/shanchuan2012/article/details/51024550