Ответ 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
полезен для дескрипторов функций, которые не являются инвариантами по шкале.
Дальнейшее чтение:
-
Это сообщение в блоге Yu Lu дает очень хорошее краткое описание SIFT, FAST, SURF, BRIEF, ORB, BRISK и FREAK.
-
Эти серии сообщений Гила Леви также содержат подробные резюме для нескольких из этих алгоритмов (BRIEF, ORB, BRISK и FREAK).