SIFT算法中的奇异倍频值

Strange Octave value in SIFT algorithm?

本文关键字:算法 SIFT      更新时间:2023-10-16

我在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);

在这里我可以得到向量<之后,我想得到每个关键点的八度音程的更多细节,但当我计算每个关键点的八度音程值为一个图像,它似乎很奇怪,我想确认他们是否正确。>

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算法,它将是OK的,看起来是正确的。

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

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

刚好看到这个链接。

似乎需要对SIFT关键点的octave值进行"修补":

keyPoint.octave = keyPoint.octave & 0xFF;