3

HOG記述子抽出で使用するために勾配方向を計算するとき、0-180または0-360の間の勾配方向を使用することを選択できます.Matlabを使用してそのような角度をどのように生成できますか? 私は次のコードを持っています:

Im=imread('cameraman.tif'); // reading the image
Im=double(Im);  // converting it to double
hx = [-1,0,1];  // the gradient kernel for x direction
hy = -hx;      // the gradient kernel for y direction
grad_x = imfilter(Im,hx);   //gradient image in x direction
grad_y = imfilter(Im,hy);   // gradient image in y direction

% angles in 0-180:
...
%angles in 0-360:
...
4

1 に答える 1

3

atan2通常、水平方向と垂直方向のグラデーション コンポーネントを指定して、-180 から 180 の間の角度を生成するために使用できます。つまり、符号付き角度です。ただし、0 から 360 までの角度または符号なしの角度が必要な場合は、生成された負の角度を検索し、atan2各角度に 360 を追加するだけです。これにより、間の角度を取得できます[0,360)。たとえば、-5 度の角度は、実際には符号なしで 355 度です。したがって:

angles = atan2(grad_y, grad_x); %// Signed
angles(angles < 0) = 2*pi + angles(angles < 0); %// Unsigned

ここatan2ではラジアンなので2*pi、360 度の代わりに追加します。ラジアンの代わりに度が必要な場合は、同等の度の呼び出しを使用します。atan2dしたがって、次のようになります。

angles = atan2d(grad_y, grad_x); %// Signed
angles(angles < 0) = 360 + angles(angles < 0); %// Unsigned

あなたのコメントに沿って、あなたは逆のこともしたいと思っています。基本的に、符号なしの角度が与えられた場合、どのようにして符号付きの角度に進むのでしょうか? 反対のことをするだけです。であるすべての角度を見つけて> 180から、この角度を取り、360 を減算します。

したがって:

ラジアン

angles(angles > pi) = angles(angles > pi) - (2*pi); 

angles(angles > 180) = angles(angles > 180) - 360;
于 2015-02-26T16:29:37.537 に答える