Классификация детекторов, экстракторов и сопоставителей

Я новичок в opencv и пытаюсь реализовать сопоставление изображений между двумя изображениями. Для этого я пытаюсь понять разницу между дескрипторами функций, экстракторами дескрипторов и сопоставителями дескрипторов. Я натолкнулся на множество терминов и попытался прочитать о них на веб-сайте документации opencv, но я просто не могу обдумать эти концепции. Я понял принципиальную разницу здесь. Разница между обнаружением признаков и извлечением дескриптора

Но я натолкнулся на следующие термины при изучении этой темы:

БЫСТРО, GFTT, SIFT, SURF, MSER, STAR, ORB, BRISK, FREAK, BRIEF

Я понимаю, как работают FAST, SIFT, SURF, но не могу понять, какие из вышеперечисленных являются только детекторами, а какие - экстракторами.

Тогда есть матчеры.

FlannBased, BruteForce, knnMatch и, возможно, некоторые другие.

После некоторого прочтения я понял, что определенные сопоставители могут использоваться только с определенными экстракторами, как описано здесь. Как работает детектор функций OpenCV ORB? Приведенная классификация довольно ясна, но это только для нескольких экстракторов, и я не понимаю разницу между float и uchar.

Так что в принципе, может кто-нибудь, пожалуйста

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

Я знаю, что это требует много, но я буду очень благодарен. Спасибо.

1 ответ

Решение

Я понимаю, как работают FAST, SIFT, SURF, но не могу понять, какие из вышеперечисленных являются только детекторами, а какие - экстракторами.

По сути, из этого списка детекторов / экстракторов функций (ссылка на статьи: FAST, GFTT, SIFT, SURF, MSER, STAR, ORB, BRISK, FREAK, BRIEF) некоторые из них являются только детекторами функций (FAST, GFTT), другие как детекторы функций, так и экстракторы дескрипторов (SIFT, SURF, ORB, FREAK).

Если я правильно помню, BRIEF - только экстрактор дескриптора, поэтому ему нужны функции, обнаруживаемые каким-либо другим алгоритмом, таким как FAST или ORB.

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

Q1: классифицировать типы детекторов, экстракторов и устройств сопоставления на основе числа с плавающей запятой и учара, как уже упоминалось, или какой-либо другой тип классификации?

Q2: объясните разницу между классификацией типа float и uchar или какой из них используется?

Что касается вопросов 1 и 2, чтобы классифицировать их как float и uchar, ссылка, которую вы уже разместили, является лучшей ссылкой, которую я знаю, возможно, кто-то сможет завершить ее.

Q3: упомянуть, как инициализировать (кодировать) различные типы детекторов, экстракторов и сопоставителей?

Отвечая на вопрос 3, OpenCV заставил код использовать разные типы одинаково - в основном вам нужно выбрать один детектор функций. Большая часть различий заключается в выборе типа соответствия, и вы уже упомянули три из них, которые есть в OpenCV. Лучше всего прочитать документацию, примеры кода и связанные с ними вопросы переполнения стека. Кроме того, некоторые сообщения в блоге являются отличным источником информации, как, например, эти серии тестов детектора функций Евгения Хведчения (блог больше не доступен, поэтому мне пришлось создать необработанную текстовую копию из его кеша Google).

Сопоставители используются для определения, похож ли дескриптор на другой дескриптор из списка. Вы можете либо сравнить свой дескриптор запроса со всеми другими дескрипторами из списка (BruteForce), либо использовать лучшую эвристику (FlannBased, knnMatch). Проблема в том, что эвристика не работает для всех типов дескрипторов. Например, реализация FlannBased раньше работала только с float дескрипторы, но не с uchar (Но начиная с версии 2.4.0 FlannBase с индексом LSH может применяться к дескрипторам uchar).

Цитируя это сообщение в блоге App-Solut о DescriptorMatcher типы:

DescriptorMatcher поставляется в вариантах "FlannBased", "BruteForceMatcher", "BruteForce-L1" и "BruteForce-HammingLUT". Средство сопоставления "FlannBased" использует библиотеку flann (быстрая библиотека для приблизительных ближайших соседей) для быстрого, но приблизительного сопоставления. Версии "BruteForce-*" исчерпывающе выполняют поиск в словаре, чтобы найти наиболее близкое соответствие функции изображения со словом в словаре.

Некоторые из наиболее популярных комбинаций:

Детекторы функций / экстракторы дескрипторов / типы соответствия

  • (БЫСТРО, СЕРФ) / SURF / FlannBased

  • (БЫСТРО, SIFT) / SIFT / FlannBased

  • (БЫСТРО, ORB) / ORB / Bruteforce

  • (БЫСТРО, ORB) / КРАТКОЕ / Брутфорс

  • (БЫСТРО, ПОВЕРХНОСТЬ) / FREAK / Bruteforce

Вы могли также заметить, что есть несколько адаптеров (Dynamic, Pyramid, Grid) для детекторов функций. Сообщение в блоге App-Solut очень хорошо обобщает их использование:

(...) и есть также пара адаптеров, которые можно использовать для изменения поведения детекторов ключевых точек. Например, Dynamic адаптер, который регулирует порог обнаружения для конкретного типа детектора до тех пор, пока на изображении не будет найдено достаточное количество ключевых точек Pyramid Адаптер, который строит гауссову пирамиду для обнаружения точек в нескольких масштабах. Pyramid Адаптер полезен для дескрипторов объектов, которые не являются инвариантами масштаба.

Дальнейшее чтение:

Другие вопросы по тегам