LINUX.ORG.RU

Поиск одинаковых изображений

 


1

3

Всем привет. Есть сотня-другая jpeg-картинок 150x150, которые нужно сопоставить, и найти одинаковые.

Дело в том, что они не совсем одинаковые, где-то всё изображение смещено на какое-то количество пикселей в сторону, где-то есть просто белый пиксель посередине, в общем на всех картинках есть небольшое количество неприметных для глаза различий, поэтому по хэшу например их не сопоставить. Есть какая-нибудь готовая библиотека, на opencv, например, которая могла бы сопоставлять почти-одинаковые изображения?

Всем заранее спасибо.

Скорее всего, это делается через Фурье или какие-то другие интегральные преобразования

Crocodoom ★★★★★
()

SSIM/DSSIM, но вот если не ясно насколько пикселей смещены - то тогда не знаю, разве что поиск вектора движения на основе разности яркости

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Если бы я знал что картинка только смещена по пикселям куда-то, то можно было бы не париться, и брутфорсом подобрать, поскольку opencv я не знаю. :-) Но дело там не только в смещении.

mahalaka ★★
() автор топика
Последнее исправление: mahalaka (всего исправлений: 1)

Если тебе на один раз, то можно взять любой просмотрщик, который умеет в поиск похожих дубликатов. Xnviewmp, например, он вроде есть под онтопик.

anonymous
()

поэтому по хэшу например их не сопоставить

Самый простой, но хорошо работающий способ:

1. Масштабируем картинку в 8x8
2. Переводим в grayscale
3. Считаем среднее значение яркости и всё, что больше переводим в 1, меньше — в 0
4. Рассматриваем полученные данные как число 8x8 = 64 бит.

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

Ложные срабатывания будут, но не очень много.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Хм, можно попробовать, подумаю, спасибо.

mahalaka ★★
() автор топика
Ответ на: комментарий от pi11

The demo script find_similar_images illustrates how to find similar images in a directory.

Интересно, тоже заценю, спасибо.

mahalaka ★★
() автор топика

Есть какая-нибудь готовая библиотека, на opencv, например, которая могла бы сопоставлять почти-одинаковые изображения?

MATLAB/image Processing Toolbox/XCORR2: Вычисление двумерной взаимной корреляционной функции ©.

Но сначала полезно выполнить медианную фильтрацию для удаления отдельных сбойных пикселей. А ежели выполнить преобразование Фурье-Меллина, то будет инвариантность к смещению, вращению и масштабированию.

quickquest ★★★★★
()
Последнее исправление: quickquest (всего исправлений: 1)
Ответ на: комментарий от sergej

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

pi11 ★★★★★
()

для elasticsearch плагин есть

oxo
()
Ответ на: комментарий от mahalaka

Если не хочешь лезть в OpenCV, то можно брутфорсить через расстояние Левенштейна.

Aswed ★★★★★
()
Ответ на: комментарий от KRoN73

Какое изящное решение с хэшом. Возьму на вооружение.

Aswed ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.