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

Обнаружение местоположения изображения на большом изображении

Как вы определяете местоположение изображения на большом изображении? У меня есть немодифицированная копия изображения. Затем это изображение изменяется на произвольное разрешение и помещается случайным образом в гораздо большем размере, которое имеет произвольный размер. На полученном изображении других преобразований не проводится. Код Python был бы идеальным, и для него, вероятно, потребуется libgd. Если вы знаете хороший подход к этой проблеме, вы получите +1.

4b9b3361

Ответ 1

Быстрое и грязное решение, и это просто скользящее окно над целевым изображением и вычисление некоторой степени сходства в каждом месте, а затем выбор местоположения с наивысшим сходством. Затем вы сравниваете сходство с порогом, если оценка выше порога, вы заключаете, что изображение есть и что местоположение; если оценка ниже порогового значения, тогда изображения там нет.

В качестве меры подобия вы можете использовать нормированную корреляцию или сумму квадратов различий (также как норма L2). Как отмечали люди, это не будет касаться изменений масштаба. Таким образом, вы также повторно масштабируете свое исходное изображение несколько раз и повторяете процесс выше с каждой масштабированной версией. В зависимости от размера вашего входного изображения и диапазона возможных масштабов это может быть достаточно хорошим, и его легко реализовать.

Правильное решение - использовать аффинные инварианты. Попробуйте найти "широкополосное стереофоническое совпадение", люди рассматривали эту проблему в этом контексте. Используемые методы обычно выглядят примерно так:

Предварительная обработка исходного изображения

  • Запустите "детектор процентных точек". Это найдет несколько точек на изображении, которые легко локализуются, например. углы. Есть много детекторов, детектор, называемый "harris-affine", хорошо работает и довольно популярен (возможно, существуют варианты реализации). Другой вариант - использовать детектор Difference-of-Gaussians (DoG), он был разработан для SIFT и хорошо работает.
  • В каждой точке интереса извлеките небольшое суб-изображение (например, 30x30 пикселей).
  • Для каждого суб-изображения вычислите "дескриптор", некоторое представление содержимого изображения в этом окне. Опять же, существует множество дескрипторов. Следует обратить внимание на то, насколько хорошо описатель описывает контент изображения (вы хотите, чтобы два дескриптора совпадали, только если они похожи) и как он инвариантен (вы хотите, чтобы он был одинаковым даже после масштабирования). В вашем случае я бы рекомендовал использовать SIFT. Он не так инвариантен, как некоторые другие дескрипторы, но может хорошо справляться со шкалой, и в вашем случае изменяется масштаб шкалы.

В конце этого этапа у вас будет набор дескрипторов.

Тестирование (с новым тестовым изображением).

  • Сначала вы запускаете тот же детектор точки интереса, что и в шаге 1, и получаете набор точек интереса. Вы вычисляете один и тот же дескриптор для каждой точки, как указано выше. Теперь у вас есть набор дескрипторов для целевого изображения.
  • Затем вы найдете совпадения. В идеале для каждого дескриптора из вашего исходного изображения в целевом изображении будет довольно похожий дескриптор. (Так как целевое изображение больше, то также будут "оставшиеся" дескрипторы, то есть точки, которые не соответствуют чему-либо в исходном изображении.) Поэтому, если достаточное количество исходных дескрипторов совпадает с достаточным сходством, то вы знаете, что цель там. Более того, поскольку дескрипторы специфичны для местоположения, вы также узнаете, где в целевом изображении исходное изображение.

Ответ 2

Вероятно, вы хотите cross-correlation. (Автокорреляция коррелирует сигнал с самим собой, перекрестная корреляция коррелирует два разных сигнала.)

Какая корреляция для вас, просто проверяя точные соответствия, заключается в том, что она расскажет вам, где лучшие совпадения, и насколько они хороши. Отражающая сторона - это то, что для двухмерного изображения это что-то вроде O (N ^ 3), и это не тот простой алгоритм. Но это волшебство, как только вы его заработаете.

EDIT: Aargh, вы указали произвольный размер. Это приведет к нарушению любого алгоритма, основанного на корреляции. Извините, теперь вы вне моего опыта, и SO не позволит мне удалить этот ответ.