3

matlab で画像の勾配ベクトルの大きさと方向を比較するために、ヒストグラムの配列を作成する方法を見つけようとしています。私はグラデーションを見つけるためにsobelマスクを使用しています。これまでのところ、

sobel_x = [-1 -2 -1;0  0  0;1  2  1];
sobel_y = [-1  0  1;-2  0  2;-1  0  1];

gx = filter2(sobel_x,im,'same');
gy = filter2(sobel_y,im,'same');

次に、ヒストグラムを作成して他の画像と比較する方法を理解する必要があります。

4

1 に答える 1

6

計算されたgxおよびgy行列を取り、それらを長いベクトルとして扱い、サイズが 2 x ( gxまたはgyの要素数)の勾配ベクトルにグループ化できます。

% create the gradient vectors
    grad_vector(1,:) = gx(:);
    grad_vector(2,:) = gy(:);

次に、さまざまな方法で各勾配ベクトルの大きさと方向を見つけることができます。次に例を示します。

%find magnitude and direction of each gradient vector
    for i=1:size(grad_vector,2);
       magn(i) = norm(grad_vector(:,i));
       dir(i) = atand(grad_vector(2,i)/grad_vector(1,i));
    end

次に、結果をいくつかのビンに分割する方法を決定することで、ヒストグラムを作成できます。たとえば、方向を 4 つのビンに分割し、マグニチュードを 3 つに分割すると、次のようになります。

% find histograms, dividing into appropriate bins
    histdir = hist(dir,4);
    histmag = hist(magn,3);
于 2013-02-10T05:51:14.127 に答える