Gabor filter bank for gist features I was reading a paper about Gist features. I was interested about its code implementation which i found it here). Into LMgist.m there is a function called createGabor, this is the code:

function G = createGabor(or, n)
%
% G = createGabor(numberOfOrientationsPerScale, n);
%
% Precomputes filter transfer functions. All computations are done on the
% Fourier domain. 
%
% If you call this function without output arguments it will show the
% tiling of the Fourier domain.
%
% Input
%     numberOfOrientationsPerScale = vector that contains the number of
%                                orientations at each scale (from HF to BF)
%     n = imagesize = [nrows ncols] 
%
% output
%     G = transfer functions for a jet of gabor filters


Nscales = length(or);
Nfilters = sum(or);

if length(n) == 1
    n = [n(1) n(1)];
end

l=0;
for i=1:Nscales
    for j=1:or(i)
        l=l+1;
        param(l,:)=[.35 .3/(1.85^(i-1)) 16*or(i)^2/32^2 pi/(or(i))*(j-1)];
    end
end

% Frequencies:
%[fx, fy] = meshgrid(-n/2:n/2-1);
[fx, fy] = meshgrid(-n(2)/2:n(2)/2-1, -n(1)/2:n(1)/2-1);
fr = fftshift(sqrt(fx.^2+fy.^2));
t = fftshift(angle(fx+sqrt(-1)*fy));

% Transfer functions:
G=zeros([n(1) n(2) Nfilters]);
for i=1:Nfilters
    tr=t+param(i,4); 
    tr=tr+2*pi*(tr&lt;-pi)-2*pi*(tr&gt;pi);

    G(:,:,i)=exp(-10*param(i,1)*(fr/n(2)/param(i,2)-1).^2-2*param(i,3)*pi*tr.^2);
end


if nargout == 0
    figure
    for i=1:Nfilters
        contour(fx, fy, fftshift(G(:,:,i)),[1 .7 .6],'r');
        hold on
    end
    axis('on')
    axis('equal')
    axis([-n(2)/2 n(2)/2 -n(1)/2 n(1)/2])
    axis('ij')
    xlabel('f_x (cycles per image)')
    ylabel('f_y (cycles per image)')
    grid on
end


If you run this function with the input parameters or = [8 8 8 8] and n = 192 (as in the original implementation) it should create this image:


This image shows the contours of the gabor filters in the frequency domain for z = 0.6, z= 0.7.

Unfortunately this gabor filter implementation is different from what i've seen so far. My questions are:


Look at the matrix param, the second column definitely seems to be
the frequency scale, where fmax = 0.3 and c = 1.85 is the constant.
The fourth column definitely seems to be the orientation scale. The first column is a constant of value 0.35; the only reference i've found in that paper about 0.35 is this sentence (page 8, right column): 


  The model of Eq. (7) provides correct fitting for all the eight
  categories for frequencies below 0.35 cycles/pixel (as noise and
  aliasing corrupt higher spatial frequencies, see Fig. 4)


So what the first and third column represent? 
Which brings me to this line of code:
G(:,:,i)=exp(-10*param(i,1)*(fr/n(2)/param(i,2)-1).^2-2*param(i,3)* pi *tr.^2);
this implementation is very different from what i've seen so far, i
don't think i recognize the formulation. In particular the second
term of the exponential: 2*param(i,3)* pi *tr.^2 controls the
orientation scale and also the particular "stretch" of the gaussian
in the frequency domain as shown in the picture, which I think is
used to get a better filter overlap in the frequency domain. Can
somebody clear up this implementation?
Here is my understanding of these points. I apologize if my answer comes too late. I post it anyway in the hope it helps someone.


The 4 parameters in the param vector respectively controls the radial width, radial location, angular width, and angular location of the filter in the Fourier domain. In other words, the filter's response is a (separable) Gaussian function of the frequency modulus and orientation (that is, the polar coordinates). The parameters #2 and #4 gives the location of this Gaussian while parameters #1 and #3 gives its scale. However, I have no explanation regarding the "magic" values (maybe they were simply obtained by trial &amp; error).
These filters are not Gabor filters since their Fourier transforms are not Gaussian functions of the 2D frequencies. On the figure you showed, Gabor filters would result in ellipsoid curves instead of these drop-shaped curves. I guess the authors made this choice to have a better coverage of the spectral plane.