Я понимаю, как работают FAST, SIFT, SURF, но не могу понять, какие из вышеперечисленных являются только детекторами, а какие - экстракторами.
В основном, из этого списка детекторов / экстракторов функций (ссылка на статьи: FAST, GFTT, SIFT, SURF, MSER, STAR, ORB, BRISK, FREAK, КОРОТКО), некоторые из em - это только детекторы признаков (FAST, GFTT), другие - как детекторы признаков, так и экстракторы дескрипторов (SIFT, SURF, ORB, FREAK).
Если я правильно помню, BRIEF - это всего лишь средство извлечения дескриптора, поэтому ему нужны функции, обнаруженные каким-либо другим алгоритмом, например FAST или ORB.
Чтобы быть уверенным в том, что есть что, вам нужно либо просмотреть статью, связанную с алгоритмом, либо просмотреть документацию opencv, чтобы увидеть, что было реализовано для класса FeatureDetector
, а что - для класса DescriptorExtractor
.
Q1: классифицируйте типы детекторов, экстракторов и сопоставителей на основе float и uchar, как уже упоминалось, или какого-либо другого типа классификации?
Q2: объясните разницу между классификацией float и uchar или какой классификацией используется?
Что касается вопросов 1 и 2, чтобы классифицировать их как float и uchar, ссылка, которую вы уже разместили, является лучшим справочным материалом, который я знаю, может быть, кто-нибудь сможет ее заполнить.
Q3: упомяните, как инициализировать (закодировать) различные типы детекторов, экстракторов и сопоставителей?
Отвечая на вопрос 3, OpenCV сделал код для использования различных типов совершенно одинаковым - в основном вам нужно выбрать один детектор функций. Основная разница заключается в выборе типа сопоставителя, и вы уже упомянули 3 из них, которые есть в OpenCV. Лучше всего прочитать документацию, образцы кода и связанные вопросы о переполнении стека. Кроме того, некоторые сообщения в блогах являются отличным источником информации, например, эти серии тестов для определения функций, проведенные Евгением Хведчени (Блог больше недоступен, поэтому мне пришлось создать необработанную текстовую копию из его кеша Google).
Сопоставители используются, чтобы определить, похож ли дескриптор на другой дескриптор из списка. Вы можете сравнить свой дескриптор запроса со всеми другими дескрипторами из списка (BruteForce) или использовать лучшую эвристику (FlannBased, knnMatch). Проблема в том, что эвристика работает не для всех типов дескрипторов. Например, реализация FlannBased раньше работала только с дескрипторами float
, но не с uchar
(но, начиная с версии 2.4.0, FlannBased с индексом LSH может применяться к дескрипторам uchar).
Цитата из этого сообщения в блоге App-Solut о DescriptorMatcher
типах:
DescriptorMatcher имеет разновидности «FlannBased», «BruteForceMatcher», «BruteForce-L1» и «BruteForce-HammingLUT». Средство сопоставления «FlannBased» использует внутреннюю библиотеку flann (быстрая библиотека для приблизительных ближайших соседей) для выполнения более быстрого, но приблизительного сопоставления. Версии «BruteForce- *» выполняют исчерпывающий поиск в словаре, чтобы найти наиболее близкое соответствие функции изображения слову в словаре.
Вот некоторые из наиболее популярных комбинаций:
Детекторы признаков / экстракторы дескрипторов / типы сопоставлений
(FAST, SURF) / SURF / FlannBased
(БЫСТРЫЙ, SIFT) / SIFT / FlannBased
(БЫСТРО, ORB) / ORB / Bruteforce
(БЫСТРО, ШАР) / КРАТКОЕ / Брутфорс
(БЫСТРО, ВЕРСИЯ) / FREAK / Bruteforce
Вы также могли заметить, что есть несколько адаптеров (динамические, пирамидальные, сеточные) для детекторов функций. Сообщение в блоге App-Solut действительно хорошо описывает их использование:
(...) и есть также пара адаптеров, которые можно использовать для изменения поведения детекторов ключевых точек. Например, адаптер Dynamic
, который регулирует порог обнаружения для конкретного типа детектора до тех пор, пока на изображении не будет найдено достаточное количество ключевых точек, или адаптер Pyramid
, который строит пирамиду Гаусса для обнаружения точек на нескольких масштабах. Адаптер Pyramid
полезен для дескрипторов функций, которые не зависят от масштаба.
Дополнительная литература:
person
Rui Marques
schedule
16.02.2013