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

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

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

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

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

Тогда есть совпадения.

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

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

В общем, может кто-нибудь, пожалуйста

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

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


person hriddle    schedule 11.02.2013    source источник
comment
Дело не в том, чтобы просить много или нет, проблема в том, что вы пытаетесь узнать об этой конкретной теме с помощью API. Вместо этого вы должны указать на документы, в которых описываются методы, потому что библиотека может делать с документами все, что пожелает, и полученный вызов функции может не воспроизводить все, что может делать метод. Вы без причины ограничиваете себя OpenCV. После того, как вы удалите это ограничение, выберите конкретное сомнение.   -  person mmgp    schedule 11.02.2013
comment
Я действительно хотел следовать упомянутому вами подходу, но из-за определенных условий я был вынужден работать над сшиванием изображений с жесткими временными ограничениями. По этой причине я пытаюсь найти помощь в понимании некоторых концепций, которые пока находятся вне моего понимания. Я все еще активно читаю несколько статей и алгоритмов, но такая помощь, безусловно, ускорит процесс.   -  person hriddle    schedule 11.02.2013


Ответы (1)


Я понимаю, как работают 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
comment
+1 - Красиво. Было бы здорово, если бы вы могли добавить несколько хороших, простых для понимания ссылок и учебных материалов по этим вопросам. - person Abid Rahman K; 17.02.2013
comment
Спасибо. Думаю, это было своего рода тем, чего я хотел. Я немного прочитал с момента публикации вопроса, и этот ответ определенно помог мне заполнить некоторые пробелы в понимании. Спасибо. - person hriddle; 18.02.2013
comment
FREAK не является детектором функций, говорится в вашем первом абзаце. - person happy_marmoset; 07.12.2013
comment
Вот почему написаны детекторы / экстракторы признаков (как в экстракторах дескрипторов). - person Rui Marques; 07.12.2013
comment
Спасибо за подробное резюме и квоту моего сообщения в блоге :) - person Yu Lu; 16.04.2014
comment
Спасибо, что процитировали мой пост в блоге :) - person GilLevi; 03.06.2014
comment
Огромное спасибо. Могу ли я иметь от тебя ребенка? Ты мой герой! - person Papzord; 29.01.2015
comment
@YuLu Похоже, твоя ссылка не работает, можешь исправить? - person Rick Smith; 16.04.2015