Поиск дублирующихся изображений с использованием алгоритма SIFT / SURF

Вопрос или проблема

У меня есть большое количество фотографий, которые я храню в различных поддиректориях на Windows 8. Я хочу найти все дублирующиеся изображения, которые могут быть изменены по размеру, обрезаны, повернуты или с добавленной рамкой.

Обычная проверка по хешу MD5 не подходит, так как мне нужно обнаруживать изменения.

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

Кроме чего-то, что мне пришлось бы написать самому, существует ли программа, позволяющая мне сравнивать изображение с каталогом, полным изображений, используя алгоритмы SIFT / SURF, описанные выше?

Вы можете найти приложение, использующее SURF и более современные алгоритмы CBIR, здесь, написанное на C#. Большая часть доступна по лицензии GPL v3, но существуют некоторые ограничения в отношении использования SURF (не исчерпывающе, просто чтобы упомянуть, что некоторые дескрипторы могут быть защищены, когда речь идет о коммерческом использовании). Подробные объяснения, как было разработано приложение, доступны здесь. Если вы знакомы с CBIR, нет необходимости читать первые блог-посты автора (части 1, 2 и 3). В противном случае, все посты настоятельно рекомендуются. По моему опыту, есть несколько “продвинутых” дескрипторов и детекторов (и не только SIFT и SURF), вы должны попробовать несколько из них и определить, который из них имеет больший смысл для вашего набора изображений.

Ответ или решение

Обнаружение дубликатов изображений с использованием алгоритмов SIFT и SURF

Вы столкнулись с задачей поиска дублирующихся изображений из большой базы данных, где фотографии могут быть изменены по размеру, обрезаны, повернуты или иметь добавленные границы. Обычные методы, такие как MD5-хеширование, здесь не подходят, так как они не учитывают зрительные изменения в изображениях. В этом контексте алгоритмы, такие как SIFT (Scale-Invariant Feature Transform) и SURF (Speeded-Up Robust Features), предлагают решения, позволяющие обнаруживать дубликаты даже при изменениях изображения. Рассмотрим, как это можно сделать более подробно.

Использование алгоритмов SIFT и SURF для поиска дубликатов

  1. Описание работы алгоритмов:

    • SIFT: этот алгоритм определяет ключевые точки в изображениях и генерирует их дескрипторы на основе градиентов локальных изображений. Он инвариантен к масштабированию, вращению и частично инвариантен к изменениям освещения и перспективы.
    • SURF: ускоренная версия SIFT, SURF также определяет и описывает ключевые точки, но делает это быстрее благодаря использованию интегральных изображений и апроксимации гессиановой матрицы.
  2. Процесс поиска дубликатов:

    • Создание базы данных ключевых точек: Нужно обработать все изображения и извлечь ключевые точки с каскадом алгоритмов SIFT или SURF. Эти данные сохраняются в базе данных для последующего сравнения.
    • Поиск дублирующих изображений: Когда появляется новое изображение, извлекаются его ключевые точки. Далее, эти точки сравниваются с уже существующими записями в базе данных. Сходства выявляются на основе количества совпадающих ключевых точек при помощи методов, таких как фланво-казальное сопоставление или использование KD-деревьев для ускорения поиска.
  3. Реализация:

    • Если самостоятельно реализовывать подход, необходимо использовать библиотеки, такие как OpenCV, которая предоставляет реализованные функции SIFT и SURF.
    • Существуют готовые решения, такие как проект на GitHub (указанный в описании задачи), который предоставляет инструментарий на языке C#. Этот проект применяет не только SURF, но и новейшие подходы к контекстно-зависимому извлечению изображений (CBIR).

Заключение

Использование алгоритмов SIFT и SURF для поиска дубликатов изображений — это мощный метод, способный справляться с изменениями в изображениях, такими как поворот, масштабирование и добавление границ. Несмотря на необходимость в понимании тонкостей работы алгоритмов и их ограничениях в коммерческом использовании, предоставленное программное решение на GitHub может стать отличной отправной точкой для реализации вашей системы поиска дубликатов изображений.

Надеюсь, это профессиональное и ориентированное на решение объяснение поможет вам разобраться в использовании SIFT и SURF для поиска дубликатов изображений.

Оцените материал
Добавить комментарий

Капча загружается...