询问有关GAbor过滤器参数的问题

时间:2013-06-24 09:28:35

标签: filter

我正在尝试实现2D Gabor滤镜,但我不了解此滤镜的几个参数。例如,我使用2D Gabor滤镜的一般形式 h(x,y,f,theta,sigma_x,sigma_y)= exp( - .5 *(x_theta ^ 2 / sigma_x ^ 2 + y_theta ^ 2 / sigma_y ^ 2)* cos(2 * pi * f * x_theta), 即一个均匀对称的Gabor文件。

问题是sigma_x和sigma_y是什么意思? 在大多数论文中,所呈现的只是沿x和y的高斯包络的“标准偏差”。好吧,这让我困惑了几天。

我读了几个关于Gabor的代码,这两个参数没有直接决定滤波器的大小。它们要么作为

进行处理
        if (isnan(SigmaX)==1) | isempty(SigmaX),
      SigmaX = (3*sqrt(2*log(2)))/(2*pi*CtrFreq);
    end
    if (isnan(SigmaY)==1) | isempty(SigmaY),
      SigmaY=sqrt(2*log(2))/(2*pi*tan(pi/8)*CtrFreq);
    end

xlim=round(nstd*(SigmaX*abs(cos(Angle))+SigmaY*abs(sin(Angle))));
ylim=round(nstd*(SigmaY*abs(cos(Angle))+SigmaX*abs(sin(Angle))));

在这种情况下,nstd被认为是脉冲响应的长度。不知道。

sigmax = wavelength*kx;
sigmay = wavelength*ky.

因此,我只是想知道如何确定过滤器的大小。 因此,我还有其他几个关于波长和带宽的问题。 (因为我没有任何信号处理背景)

对于我在上面提供的第二种情况,它使用波长乘以kx或ky。 为什么我们不能直接使用sigma_x或sigma_y? 这波长是什么意思?这是Gabor过滤器的大小吗? 带宽是什么意思?它是Gabor过滤器的大小吗?

我实现了一个简单的程序,但似乎不正确,如下所示

   function [GR, GI, G] = yGabora(f, sigma_x, sigma_y, theta)

the = theta * pi/180;        % Angular to degree.


% Rotation matrix
Rot = [ cos(the) sin(the);
       -sin(the) cos(the)];  

% Calculate gabor filter
for x=-sigma_u:1:sigma_u
    for y=-sigma_v:1:sigma_v

        % Calculate rotated position of Gaussian function
        tmpRet = Rot*[x, y]';
        xt = tmpRet(1);
        yt = tmpRet(2);

        h_even(x+sigma_u+1, y+sigma_v+1) = exp(-0.5* (xt^2/(sigma_u^2) + yt^2/(sigma_v^2))) * cos(2*pi*f*xt);
        h_odd(x+sigma_u+1, y+sigma_v+1)  = exp(-0.5* (xt^2/(sigma_u^2) + yt^2/(sigma_v^2))) * sin(2*pi*f*xt);

    end
end 

% Generate a complex unit.
j = sqrt(-1);

% Real part of G
GR = h_even;

% Imaginary part of G
GI = h_odd.*j;

% Gabor filter
G = GR + GI;

0 个答案:

没有答案