0

2D ガボール フィルターを実装しようとしていますが、このフィルターのいくつかのパラメーターがわかりません。たとえば、h(x, y, f, theta, sigma_x, sigma_y) = exp(-.5 * ( x_theta^2/sigma_x^2 + y_theta^2/sigma_y^2 のような 2D ガボール フィルターの一般的な形式を使用します) * cos(2*pi*f*x_theta)、つまり偶数対称ガボール フィレット。

問題は、sigma_x と sigma_y が何を意味するかということです。ほとんどの論文で提示されているのは、x と y に沿ったガウス エンベロープの「標準偏差」です。OK、これは私を数日間混乱させました。

Gabor に関するいくつかのコードを読みましたが、この 2 つのパラメーターはフィルターのサイズを直接決定しませんでした。それらは次のように処理されます

        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.

したがって、フィルターのサイズをどのように決定できるのでしょうか。このため、波長と帯域幅について他にもいくつか質問があります。(信号処理のバックグラウンドがないため)

上記の 2 番目のケースでは、波長を使用して kx または ky を乗算します。sigma_x または sigma_y を直接使用できないのはなぜですか? この波長は何を意味するのでしょうか? ガボールフィルターの大きさでしょうか。その帯域幅とはどういう意味ですか? ガボールフィルターの大きさでしょうか。

簡単なプログラムを実装しましたが、以下のように正しくないようです

   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;
4

0 に答える 0