使用matlab应用Gabor方程创建Gabor滤波器

时间:2013-11-22 14:58:55

标签: image-processing computer-vision matlab

我试图创建一个Gabor过滤器。我们都知道这种滤波器比任何其他滤波器更复杂,因为它具有更复杂的特征,例如具有不同的尺度和方向。 Gabor滤波器的等式是:

enter image description here

为了创建具有特定比例和方向的Gabor滤波器,wikipedia为我们提供了一个简单的matlab代码:

sigma_x = sigma;
sigma_y = sigma/gamma;

nstds = 3;
xmax = max(abs(nstds*sigma_x*cos(theta)),abs(nstds*sigma_y*sin(theta)));
xmax = ceil(max(1,xmax));
ymax = max(abs(nstds*sigma_x*sin(theta)),abs(nstds*sigma_y*cos(theta)));
ymax = ceil(max(1,ymax));
xmin = -xmax; ymin = -ymax;
[x,y] = meshgrid(xmin:xmax,ymin:ymax);


x_theta=x*cos(theta)+y*sin(theta);
y_theta=-x*sin(theta)+y*cos(theta);

gb= exp(-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).*cos(2*pi/lambda*x_theta+psi);

我想知道这段代码是否正确。我注意到上面的代码并没有完全响应Gabor滤波器的等式。例如:在代码中,我们有:sigma_x=sigmasigma_y=sigma/gamma ...我们有gb=exp(-.5*(x_theta.....))。我不明白等式中的5是什么..

上面写的matlab代码是否正确地响应了Gabor滤波器的等式?我需要您的意见,如果可能的话,如果不正确则优化代码。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:7)

替换代码中的以下行:

gb= exp(-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).*cos(2*pi/lambda*x_theta+psi);

我在上面的matlab代码中用sin替换cos。

答案 1 :(得分:3)

您现在可以使用图像处理工具箱中的gabor功能创建Gabor滤镜库,然后使用imgaborfilt将其应用于图像。

答案 2 :(得分:1)

公式为exp( - (...)/(2 * sigma ^ 2))。不是吗? 所以1/2 = 0.5 = .5