SIFT算法中奇怪的八度值?

zhf*_*fkt 4 c++ opencv image-processing surf sift

我在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);
Run Code Online (Sandbox Code Playgroud)

在这里,我可以在向量<KeyPoint>中获取图像的关键点.之后,我想得到每个KeyPoint的Octave以获取更多细节.但是,当我为一个图像提供每个关键点八度值时,我想要它似乎很奇怪确认他们是否正确.

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
Run Code Online (Sandbox Code Playgroud)

如果我将SIFT算法改为SURF算法,那就没问题了.

0
0
0
0
0
0
1
0
0
0
0
1
1
1
0
1
1
1
0
0
1
0
Run Code Online (Sandbox Code Playgroud)

所以我想问一下在SIFT算法中Octave值的计算是否在opencv中是正确的?

Sha*_*hai 7

刚刚看到这个链接.

似乎octaveSIFT关键点的值需要"修补":

keyPoint.octave = keyPoint.octave & 0xFF;
Run Code Online (Sandbox Code Playgroud)