Сложный поиск и удаление дубликатов изображений

В одном из контент-проектов встала задача оптимизировать базу изображений, убрав дубли.

Исходные параметры базы:

  • размер базы — 32 000 изображений, 38 Гб.
  • формы — JPG, PNG, TIFF, GIF.
  • характер дублей — полные дубли, изменённый цвет, яркость и контрастность, размеры и соотношение сторон, поворот.

Выбор приложений для поиска дублей

Рассматривал программы:

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

Запустить AllDub на MacOS можно с помощью программ виртуализации VMware Fusion, Parallels Desktop, Crossover for Mac или Wine.

Процесс

Шаг 1. Поиск полных дубликатов

Сначала удаляем полные дубли (одинаковая длина, ширина, ориентация и др.) изображений. Это позволит быстро удалить изображения, которые не нужно сравнивать. Для сравнения используем самый быстрый алгоритм dHash.

По результатам поиска найдено более 8000 групп полных дублей, но есть проблемы:

  • Поиск не различает цветные и черно-белые изображения. Это не зависит от выбранного алгоритма поиска.
  • Многокадровые изображения в формате GIF сравниваются по первому кадру. Это приводит к большому количеству ошибок, так как многие GIF-изображения начинаются с белого или чёрного кадра.

Если у вас такая же проблема, то сначала используйте побайтовое сравнение файлов. Оно только частично решает проблему, так как не позволяет найти дубли изображений с разным сжатием файлов.

После удаления полных дублей осталось 21790 изображений размером 31 Гб.

Шаг 2. Поиск похожих изображений

На этом шаге ищем неточные дубли изображений (разный размер, ориентация, разное сжатие и прочее). Для этого выбираем долгий алгоритм pHash и точность совспадения 91%.

Это позволяет нам найти ещё 455 групп похожих изображений (всего изображений — 990 штук).

Итог

Осталось 21000 файлов суммарным размером 30,5 Гб.

Что почитать по теме алгоритмов сравнения изображений

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