SiftDescriptorExtractor - PullRequest
       3

SiftDescriptorExtractor

5 голосов
/ 24 июля 2011

У меня есть 2 вопроса об opencv SiftDescriptorExtractor:

  1. Как мне преобразовать дескрипторы из cv::Mat в vector<float* > (i-я строка = i-й дескриптор)
  2. Как я могу определить размер (= размерность) дескриптора SIFT?

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

Ответы [ 2 ]

6 голосов
/ 28 сентября 2012

1-Преобразование:

vector<float*> descriptor;
for(int i; i = 0; i < keypoints.size())
{
    descriptor.push_back(&keypoints.at<float>(i));
}

2-размер SIFT:

Вы не можете, поскольку алгоритм SIFT определяетразмер блоков, бункеров и т. д. Что вы можете сделать?Вы можете кодировать свое собственное просеивание.Это сложная задача, но я призываю вас попробовать.

1 голос
/ 06 октября 2011
  1. Вы можете получить доступ к каждому элементу cv :: Mat и создать вектор самостоятельно. Это может быть полезно, если вы хотите узнать, как получить доступ к элементам cv :: Mat
  2. . Как я знаю, вы не можете сделать это с помощью SiftDescriptorExtractor, предоставляемого OpenCV.Но SIFT Реализация OpenCV взята из http://blogs.oregonstate.edu/hess/code/sift/ Так что вы можете изменить исходный код для изменения размера дескриптора.Изменяя константы размера бина дескриптора SIFT, вы можете изменить размер дескриптора.Если вы хотите больше, вы должны прочитать код.Код хорошо прокомментирован и основан на отличительной характеристике изображения Лоу 2004 года с масштабно-инвариантных ключевых точек.
...