Получить дескриптор SIFT для указанной точки с помощью OpenCV

Я хочу получить функцию SIFT для указанных точек. Эти точки получаются вручную, а не с помощью KeyPoint Detector. Мой вопрос: я знаю только положение точек, но понятия не имею о значении size и angle. Как мне установить это значение?

Вот мой код:

int main()
{
    Mat img_object = imread("img/test.jpg", 0);

    SiftDescriptorExtractor extractor;
    Mat descriptors;
    std::vector<KeyPoint> keypoints;

    // set keypoint position and size: should I set 
    // size parameter to 32 for 32x32 patch?
    KeyPoint kp(50, 60, 32);
    keypoints.push_back(kp);

    extractor.compute( img_object, keypoints, descriptors );

    return 0;
}

Должен ли я установить параметр размера KeyPoint на 32 для патча 32x32. Является ли эта реализация разумной?


person tidy    schedule 04.12.2014    source источник


Ответы (1)


Обычно детекторы ключевых точек работают в локальной окрестности точки. Это поле size класса KeyPoint OpenCV. Поле angle является доминирующей ориентацией ключевой точки (может быть установлено значение -1, примечание).

Класс OpenCV KeyPoint

Еще одна ссылка здесь.

person a-Jays    schedule 04.12.2014
comment
А установка размера 32 означает: локальный патч 32x32 вокруг точки, верно? - person tidy; 05.12.2014
comment
Я бы сказал так, да. Но это совершенно бессмысленно, поскольку то, что вы отмечаете, - это просто точки, а не ключевые точки. Вопрос о том, для чего эти точки используются на следующем этапе алгоритма. - person a-Jays; 05.12.2014
comment
Спасибо за ответ! На лице эти точки являются ориентирами лица и будут использоваться для выравнивания лица. - person tidy; 06.12.2014
comment
Да, верно. Я знаком с такой техникой. Подумайте о том, чтобы пометить ответ как правильный, если он решит вашу проблему. - person a-Jays; 08.12.2014