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

4
我将尝试创建一个 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个回答

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。


抱歉,我编辑了我的问题,应该是cos而不是sin :) 顺便感谢你的回答 :) ,但为什么是exp(-.5 ...,为什么是5? - Christina
为什么sigma_x = sigma,而sigma_y = sigma/gamma;代码是否响应正确方程式? - Christina
1/2=0.5,而a/c +b/c可以写成 (a+b)/2,反之亦然。 因此,(x^2+gamma^2y^2)/2sigma^2可写为 0.5 * ((x^2/sigma^2) + (y^2*gama^2/sigma^2))。 - User1551892
在代码中:y_theta.^2/sigma_y^2,如果你替换sigma/gamma,那么它将是相同的(y_theta.^2*gamma^2)/sigma^2。你可以在纸上尝试一下。 - User1551892
非常抱歉我的问题 :( ,我真的非常感谢您并非常欣赏您的回答!,我会接受您的答案,但不幸的是我只有10个声望,所以我不能为您投票。顺便说一下,您可以为我投票,然后我将拥有超过15个声望,然后我就能为您投票 :) 再次感谢您!! - Christina
显示剩余2条评论

3

您现在可以使用图像处理工具箱中的 gabor 函数创建 Gabor 滤波器组,并使用 imgaborfilt 将其应用到图像上。


啊哈,太棒了!现在他们让它变得如此简单。 - Christina

1

这个公式是 exp(-(...) / (2*sigma^2) ),对吧? 所以1/2 = 0.5 = .5。


谢谢你的回答 :-) - Christina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接