4

画像から記述子とキーポイントを取得するためにopencvコードでsiftアルゴリズムを使用しています.私のコードは

    Ptr<IplImage> image;
    vector<KeyPoint> keypoints;
    OutputArray des;

    Feature2D *descriptor_type = new SIFT()
    Mat image_mat(image);
    (*descriptor_type)(image_mat,noArray(),keypoints,des,false);

ここで、画像のキーポイントをベクトル < KeyPoint > で取得できます。その後、詳細について各キーポイントのオクターブを取得したいのですが、1 つの画像の各キーポイントのオクターブ値を計算すると、とても奇妙に思えます。それらが正しいかどうかを確認します。

for(int i=0;i<keypoints.size();i++)
{
     cout<< (keypoints[i].octave) <<endl;
}

9765375
9765375
2621951
8323583
13763071
6488575
12845567
721407
3604991
12321279
9568767
7406079
8585727
4653567
7799295
7799295
5112319
10486271
9961983
6226431
1245951

SIFT アルゴリズムを SURF アルゴリズムに変更すると、問題なく、正しいように見えます。

0
0
0
0
0
0
1
0
0
0
0
1
1
1
0
1
1
1
0
0
1
0

SIFT アルゴリズムの Octave 値の計算が opencv で正しいかどうかを質問したいのですが?

4

1 に答える 1

7

このリンクにたどり着きました。

octaveSIFT キーポイントの値は、「パッチを適用」する必要があるようです。

keyPoint.octave = keyPoint.octave & 0xFF;
于 2013-05-12T14:51:32.930 に答える