Подтвердить что ты не робот

Как работает детектор функций ORC OpenCV?

Я хочу реализовать алгоритм выравнивания на основе функций, используя детектор функции ORB и экстрактор.
До сих пор я извлекал функции, используя ORB класс из OpenCV ORB orb;
 orb(gray_image,Mat(),features.keypoints,features.descriptors);
и соответствовали им с помощью функции knnMatch из openCV matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2); После этого я пытаюсь найти гомографию с помощью функции findHomography, но для функции требуется не менее 4 совпадений между функциями изображения, а на большинстве изображений, которые я тестировал, я получил меньше 4.

Кто-нибудь использовал эту функцию? Есть ли какая-либо документация об этом или о классе ORB из OpenCV (значение параметров конструктора ORB)?

P.S. Это мой первый вопрос. и я не могу разместить более двух ссылок. Для документации opencv используйте this.

4b9b3361

Ответ 1

UPDATE: теперь он находится в документации OpenCV, здесь: http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html#orb

Подробное описание алгоритма найдено здесь: http://www.willowgarage.com/sites/default/files/orb_final.pdf


Он не упоминается в документации OpenCV, но на самом деле OpenCV имеет:

Два типа дескрипторов:

  • дескрипторы float:
    • SIFT
    • SURF
  • дескрипторы uchar:
    • ОРБ
    • КРАТКИЙ

И соответствующие совпадения:

  • для дескрипторов float:
    • FlannBased
    • BruteForce<L2<float> >
    • BruteForce<SL2<float> >//поскольку 2.3.1
    • BruteForce<L1<float> >
  • для дескрипторов uchar:
    • BruteForce<Hamming>
    • BruteForce<HammingLUT>
    • FlannBased с индексом LSH//с 2.4.0

Поэтому вам нужно изменить свой код, чтобы использовать, например, BruteForce<Hamming> matcher для дескрипторов ORB. Можно использовать расстояние L2 или L1 для сопоставления дескрипторов uchar, но результаты будут неверными и findHomography возвращает неудовлетворительные результаты.