1

次の単純な行を使用して、画像から SURF 記述子を抽出しています。

Ptr<DescriptorExtractor> descriptor = DescriptorExtractor::create("SURF");
    descriptor->compute(im1, kp, desc1);

ここで、変数 desc1.data を「監視」すると、0 から 255 の範囲の整数値が含まれています。

However, when I investigate the values using the code:

for (int j=0;j<desc1.cols; j++){
            float a=desc1.at<float>(0,j);

it contains values between -1 and 1. How is that possible? SURF shouldn't return integer values like SIFT?

4

1 に答える 1

1

OpenCV で何が起こるかはわかりませんが、この論文にある限り、これが SURF の機能です。SURF 記述子は、小さな画像パッチを 4x4 のサブ領域に分割し、各サブ領域のウェーブレット応答を巧妙な方法で計算します。基本的には、4 つのタプル記述子 < sum(dx), sum(dy), sum(|dx|), sum(|dy|)> であり、dx、dy は各サブ領域のウェーブレット応答です。記述子は、すべての応答を連結し、マグニチュードを正規化することによって構築されます。これにより、64 次元の記述子が得られます。正規化された sum(dx) と sum(dy) の値は -1 から 1 の間にあり、sum(|dx|) と sum(|dy|) は 0 から 1 の間にあることが説明から明らかです。 128 次元記述子、dx と |dx| の合計 dx >= 0 および dy < 0 に対して個別に計算され、64 次元記述子のサイズが 2 倍になります。

于 2013-10-30T00:52:44.487 に答える