Как сделать свой собственный метод обнаружения функций в opencv?

Давайте посмотрим на этот базовый учебник под названием Features2D + Homography для поиска известного объекта. Он использует SurfFeatureDetector для обнаружения функций:

  SurfFeatureDetector detector( minHessian );
std::vector<KeyPoint> keypoints_object, keypoints_scene;
detector.detect( img_object, keypoints_object );
detector.detect( img_scene, keypoints_scene );

Тогда он использует SurfDescriptorExtractor вычислять дескрипторы (векторы признаков), используя обнаруженные признаки.

Мои вопросы:

  1. если я хочу создать свой собственный детектор признаков (например, с алгоритмами Трайковича или Харриса), какой дескриптор-экстрактор я должен использовать?
  2. это функции, которые были найдены в SurfFeatureDetector, просто общие точки или области точек?

****прибавление****

1) В этом примере использовался алгоритм обнаружения признаков Surf. Я сделал свой собственный алгоритм (Трайкович), и он отлично работает — все углы (особенности изображения) найдены. Затем я пытаюсь использовать SurfDescriptorExtractor, как это было в примере.
Проблема в том, что SurfDescriptorExtractor не хочет использовать мои обоснованные точки правильно (полученное изображение появляется с неправильными соединениями, это означает, что экстрактор не рассчитал векторы правильно).

2) Мне нужно сделать это точно, используя opencv, в этом все дело;

3) «Детектор признаков» — это алгоритм, который пытается найти ключевые точки (элементы или углы) на изображении, «экстрактор дескрипторов» — это алгоритм, который вычисляет векторы признаков для лучшего понимания положения и направления ключевой точки;

4) В заключение, в примере все ключевые точки связаны на обоих изображениях (как вы можете видеть на последнем рисунке урока) и затем выделены прямоугольником. Но когда я использую алгоритм Трайковича, они подключены неправильно, поэтому нет выделенного прямоугольника.

3

Решение

Хотя мы не можем точно определить проблему, не глядя на вашу реализацию и, возможно, даже проведя некоторые исследования, я могу указать вам направление решения: исходный код OpenCV, который вы можете сравнить с их реализацией.

Посмотрите на detectAndCompute() функция:

Обнаружение угла Харриса работает немного по-другому, как и его API:

0

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

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

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