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

Согласование шаблонов - поиск ссылочного объекта во втором изображении [OpenCV?]

У меня есть ссылочное ч/б изображение, которое содержит ссылочный объект (например, монета). Объект отмечен пользователем, то есть областью, представляющей интерес.

Теперь я хочу проанализировать другие изображения и найти положение и поворот этого объекта или подобных объектов. Объект произвольно помещается под камеру, но никогда не масштабируется, а угол обзора всегда равен 90 градусам.

Я оценил коммерческую библиотеку, которая делает именно то, что я хочу: Euresys EasyFind

Ниже вы можете найти примеры изображений под рукой. В текущей реализации используется функция обнаружения функций OpenCV и не работает безупречно.

Шаблон:

enter image description here

найдено совпадение для той же самой монеты:

enter image description here

Совпадение не получается для немного разных монет:

enter image description here

Обнаружение функции - это неправильный подход. Мне нужно как-то просто объект. Но если я это сделаю, функция обнаружения (Blur, Canny, CornerHarris) не работает вообще.

Любые советы для прочного подхода очень ценятся. Альтернативное предложение о свободе также было бы замечательным.

4b9b3361

Ответ 1

Поскольку вы пробовали целый ряд возможных методов, я бы попросил вас пройти следующие ссылки (возможно, вы прошли!!!)

ваше 3-е изображение, которое выходит из строя, имеет низкую контрастность, и немного сложно сочетаться с остальными двумя... Так что я сделал настройку контраста, и я получил следующее совпадение с детектором функций Orb и Orb Descriptor Extractor..I применяемая контрастная настройка ко всем изображениям перед обнаружением функции.

ИЗОБРАЖЕНИЕ 1 С ИЗОБРАЖЕНИЕМ 3

enter image description here

ИЗОБРАЖЕНИЕ 2 С ИЗОБРАЖЕНИЕМ 3

enter image description here

ИЗОБРАЖЕНИЕ 1 С ИЗОБРАЖЕНИЕМ 2 (ЭТА КОМБИНАЦИЯ РАБОТАЕТ ПОЛНОСТЬЮ СО ВСЕМИ ДЕТЕКТОРАМИ/ЭКСТРАКТОРНЫМИ ПАРАМИ)

enter image description here

Для сопоставления я использовал BruteForceMatcher<Hamming> matcher Хотя точки локализованной ориентации можно довольно хорошо догадаться. Нужно использовать более одного метода и сначала провести определение круга, чтобы ограничить обнаружение функции минимальным ROI. Плюс ориентация обнаруженных точек относительно центра круга дает новую информацию о ориентации легко. Что касается 1-й линии и 2-й линии, вы можете заметить, что SURF и BRIEF довольно устойчивы к изменению интенсивности света и размытости. Таким образом, вы можете попробовать сочетание SURF и BRIEF.

Ответ 2

Вопрос довольно широк, и есть много способов в зависимости от того, чего именно вы хотите достичь. Вы можете использовать Hough Transform для обнаружения монеты, потому что она круглая, хотя она может обнаруживать множество круглых элементов (так что это зависит от того, есть ли у вас другие подобные вещи).

В более общем плане вам необходимо использовать детектор функций (SURF, ORB, FAST, Shi-Tomassi), выполнить извлечение и сопоставление между опорным фреймом с монетой и фреймом, в котором вы его ищете. Затем вы можете использовать Преобразование Гомографии, чтобы убедиться, что найденные вами точки одинаковы, и, следовательно, вы нашли свою монету.

Взгляните на этот пример:

Особенности2D + Гомография для поиска известного объекта

Ответ 3

Как правило, следующие шаги могут повлиять на производительность системы:

  • Детектор и его конфигурация
  • Дескриптор и его конфигурация
  • Матчи и его конфигурация
  • Параметры RANSAC (или все, что вы используете)

Вы можете попробовать MSER (максимально стабильная экстремальная область) в качестве детектора. Известно, что этот детектор не находит столько ключевых точек, сколько других детекторов, таких как SIFT/SURF. Но они очень стабильны и уникальны. Но я бы попробовал другой дескриптор для сопоставления. Возможно FREAK (Быстрая Retina Keypoint).

Фильтрация с помощью алгоритма RANSAC должна выполняться, но вы всегда можете настроить, установив нужное вам расстояние. Если RANSAC не работает, попробуйте переключить порог по умолчанию, пока он не будет работать лучше.

Еще одна вещь, которую вы можете изменить, - это совпадение. FLANN очень хорош, но только приближает результаты и получает отличные результаты при поиске в высокоразмерных пространствах. Но если производительность вас не касается, попробуйте BruteForceMatcher с эвклидовым или махаланобским расстоянием.

[EDIT-1]: * Теперь я пытаюсь дать вам дополнительные возможности-помочь-ваши-предложения =) * Kampel et al. описывают в своей статье "Поиск на основе изображений и идентификацию древних монет" некоторые дополнительные подходы, чтобы дать игровой монете форму-дескриптор для улучшения описания элементов элементов.

Другой проблемой может быть RANSAC, который является очень ограничительным подходом к устранению выбросов. Метод Mat findHomography(InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray() ) имеет дополнительные параметры (нажмите эту ссылку). Вы можете использовать все точки, RANSAC или надежный метод с наименьшей средой.

Или вы пытаетесь сделать надежный расчет, какое расстояние может быть хорошим порогом для получения хороших совпадений. Стандартный учебник использует в два раза минимальное найденное расстояние, которое является началом, но не очень надежным, потому что оно зависит от расстояния от текущих совпадений.

Существует несколько других дескрипторов/детекторов, которые не включены в стандартный OpenCV. Линдбергер описывает в своей статье "Поиск лучшего функционального детектора-дескриптора", который MSER работает с DAISY-дескриптором. Или вы можете попробовать AGAST или BRISK. Один большой недостаток заключается в том, что все они не включены в стандартный дистрибутив OpenCV. Есть несколько реализаций, но вы должны их интегрировать, что может означать большую работу.

Ответ 4

Применение детектора ключевой точки на входах без какой-либо предварительной обработки - очень плохой способ найти соответствующие интересные совпадающие точки.

Учитывая ваши образы, математическая морфология предоставляет хорошие инструменты для предварительной обработки и, надеюсь, получить более качественные соответствия на более позднем этапе. Один из этих инструментов называется морфологической реконструкцией, а его обобщение называется Levelings, которое объединяет и расширяет плоские зоны на основе маркерного изображения. Как вы можете видеть, ваше изображение очень шумно в том смысле, что везде есть долины (эти темные точки), поэтому вы хотите подавить большую часть этого. Внедрение выравниваний не сложно, но поскольку я не знаю о доступных инструментах (на самом деле существует большая структура, разработанная в основном во Франции, которая, как я считаю, содержит ее, но я не помню названия), давайте придерживаться более стандартная морфологическая реконструкция. У нас также нет маркерного изображения, но это легко построить: подогреть ваш образ с помощью некоторого структурирующего элемента и применить морфологическую реконструкцию, которая называется геодезическим открытием некоторыми авторами. Это подавит некоторые из ваших шумных долин.

На этом этапе ваше изображение может быть полезно использовать с некоторым детектором ключевых точек, но я бы предложил его бинаризировать, поскольку то, что вы хотите совместить, не имеет отношения к оттенкам серого. Типичный автоматический метод для этого дается Otsu, но есть другие, такие как метод Капура, который подходит для минимизации энтропии гистограммы. Я не использовал Otsu просто потому, что это очень распространено, для некоторой новинки Stackoverflow я пошел на этот другой метод: P (да, очень плохая причина). Наконец, после бинаризации вы можете продолжить обработку изображения. Здесь может быть достаточно одного морфологического закрытия, так как вы хотите удалить некоторые оставшиеся точки шума (которые не обязательно отключены от компонентов, поэтому удаление компонентов потенциально является плохим выбором сейчас).

Чтобы это было коротко, вот геодезическое открытие и окончательная предварительная обработка (используя вышеприведенные пункты) для вашего первого изображения:

enter image description hereenter image description here

И вот окончательный результат для ваших двух других изображений (применяя точно такой же процесс, без постоянной модификации или что-то еще):

enter image description hereenter image description here

Если я сейчас продолжу и сопоставляю их с использованием типичного метода SURF, я получаю в основном совершенные матчи, делающие другую проблему (ориентирующую по отношению к другой) очень легко решить. Я не включаю результаты для совпадений, которые я получаю (если кто-то не хочет сравнивать результаты), потому что я считаю, что теперь вы должны получить тот же результат с помощью OpenCV или любой другой правильной реализации.

Если это имеет значение, вот единственная строка в Mathematica для достижения предварительной обработки, рассмотренной выше:

g = Closing[Binarize[GeodesicOpening[f, DiskMatrix[5]], Method -> "Entropy"], 1]

где f - это входное изображение в оттенках серого, а g - результирующее двоичное изображение.

Ответ 5

Я считаю, что лучше всего для вас будет какая-то версия поиска грубой силы, похожая на cvMatchTemplate. Все поисковые запросы, основанные на экстракции, довольно чувствительны к шуму; если у вас есть какая-то априорная причина знать, что некоторые типы функций будут заметны во всех представляющих интерес изображениях (например: кружки обводки/овалы для монет), то извлечение объектов вряд ли даст вам хорошую производительность. Проблема совпадения грубой силы заключается в том, что она чувствительна к масштабам и вращению. Возможно, вы можете взглянуть на литературу для сравнения без масштаба и/или грубой силы возможных масштабов и поворотов. Для примера изображения, которое вы дали, он действительно будет хорошо соответствовать себе, если он будет повернут на несколько градусов и масштабируется на несколько процентов; вам "нужно" всего несколько сотен вызовов cvMatchTemplate, чтобы найти повернутую масштабированную версию.