Странное значение октавы в алгоритме SIFT?

Я использую алгоритм просеивания в коде opencv, чтобы получить дескрипторы и ключевые точки из изображений. Мой код

    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>. После этого я хочу получить октаву каждой KeyPoint для более подробной информации. Но когда я записываю значение октавы каждой ключевой точки для одного изображения, это кажется настолько странным, что я хочу подтвердить, верны ли они.

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

Поэтому я хочу спросить, правильно ли рассчитывать значение Octave в алгоритме SIFT в opencv?

4

Решение

Только что наткнулся эта ссылка.

Кажется, что octave значение для ключевых точек SIFT должно быть «исправлено»:

keyPoint.octave = keyPoint.octave & 0xFF;
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]