2

みなさん、こんにちは >> 皆様お元気でお過ごしでしょうか

画像の位相値の計算についてお聞きしたかったのですが、Gabor ウェーブレットを次のように使用したことがわかります。

k = ( Kmax / ( f ^ v ) ) * exp( 1i * u * pi / 8 );% Wave Vector

kn2 = ( abs( k ) ) ^ 2;

GW = zeros ( R , C );

for m = -R/2 + 1 : R/2

       for n = -C/2 + 1 : C/2 

        GW(m+R/2,n+C/2) = ( kn2 / Delt2 ) * exp( -0.5 * kn2 * ( m ^ 2 + n ^ 2 ) / Delt2) * ( exp( 1i * ( real( k ) * m + imag ( k ) * n ) ) - exp ( -0.5 * Delt2 ) );

    end
end
I=imread('a.pgm');

Myimage=conv2(I,double(GW),'same');

次に、画像とフィルターをさまざまな方向とスケールで呼び出し、位相を P に格納し、それを rang 4 i で量子化したいと考えました。

close all;
clear all;
clc;

% Parameter Setting

R = 32;
C = 32;
Kmax = pi;
f = sqrt( 2 );
Delt = 2 * pi;
Delt2 = Delt * Delt;

% Show the Gabor Wavelets

for v=1:7 %v = 1 : 7
    for u = 1:5 % u= 1: 5

        [GW,Myimage]= GaborWavelet ( R, C, Kmax, f, u, v, Delt2 ); % Create the Gabor wavelets
       figure;
        subplot( 5, 8, v * 7 + u ),imshow ( real( GW ) ,[]); % Show the real part of Gabor wavelets

    end
   figure ;
    subplot( 1, 5, v + 1 ),imshow ( abs( GW ),[]); % Show the magnitude of Gabor wavelets
end


%clear I;
R=real(GW);

I=imag(GW);

M=abs(Myimage);

P=atan(imag(Myimage)/real(Myimage)); <<<< is this even right ??


%P=atan(I/R);

save P P;

[xx,yy] = size (P);

DATA =zeros(size(P));

for i=1:48
    for j=1:48
        for zz=1:3
           if (360* zz/4) <= abs(P(i,j))&& abs(P(i,j))<(360*(zz+1)/4) 
                 DATA(i,j)=zz ; end;


        end;
    end;
end;
save DATA DATA ;

しかし、データは次のように非常に小さいです: -1.49279186693682 1.50990968797986 -1.39225915272978 0.966151874072431

0 の量子化された値につながります >> どこで間違っていましたか

4

1 に答える 1

0

値はラジアンで与えられ、度で期待されるため、値が小さく見えると思います。複素数の大きさと角度の取得については、http://www.mathworks.fr/fr/help/matlab/ref/angle.htmlをご覧ください。

私は引用します:

「複素数 Z の場合、大きさ R と位相角シータは次の式で与えられます。

R = abs(Z)

シータ = 角度(Z)"

ZはあなたのGWです。

お役に立てれば!

于 2012-11-26T09:23:44.683 に答える