SIFT 算法中奇怪的 Octave 值?

2024-01-14

我在 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 算法,那就可以了并且看起来是正确的。

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值的计算是否正确?


刚刚遇到这个链接 https://groups.google.com/forum/#!topic/javacv/E9xngMMwVW4.

似乎是octaveSIFT 关键点的值需要“修补”:

keyPoint.octave = keyPoint.octave & 0xFF;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SIFT 算法中奇怪的 Octave 值? 的相关文章

随机推荐