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

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

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

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

FAST, GFTT, SIFT, SURF, MSER, STAR, ORB, BRISK, FREAK, BRIEF

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

Тогда есть помощники.

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

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

В принципе, кто-то может

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

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

4b9b3361

Ответ 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: классифицировать типы детекторов, экстракторов и ответчиков на основе float и uchar, как упомянуто, или какой-либо другой тип классификации?

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

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

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

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

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

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

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

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

Функциональные детекторы /Decriptor Extractors/Matches types

  • (FAST, SURF)/SURF/FlannBased

  • (FAST, SIFT)/SIFT/FlannBased

  • (FAST, ORB)/ORB/Bruteforce

  • (FAST, ORB)/BRIEF/Bruteforce

  • (FAST, SURF)/FREAK/Bruteforce

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

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

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