Хороший способ идентифицировать похожие изображения?

Я разработал простой и быстрый алгоритм в PHP для сравнения изображений на предмет сходства.

Его быстрый (~40 в секунду для 800x600 изображений) хэш-код и неоптимизированный алгоритм поиска могут проходить 3000 изображений за 22 минуты, сравнивая каждое из них с другими (3/ сек).

Основной обзор: вы получаете изображение, масштабируете его до 8x8 и затем конвертируете эти пиксели для HSV. Оттенок, насыщенность и значение затем усекаются до 4 битов, и он становится одной большой шестнадцатеричной строкой.

Сравнение изображений в основном идет по двум строкам, а затем добавляет найденные различия. Если общее число меньше 64, то это же изображение. Разные изображения обычно около 600 - 800. Ниже 20 и очень похожи.

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

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

Я использовал набор данных из 3000 фотографий (в основном уникальных), и никаких ложных срабатываний не было. Он полностью невосприимчив к изменениям размера и довольно устойчив к изменениям яркости и контрастности.

3 ответа

Решение

То, что вы хотите использовать, это:

  1. Извлечение функций
  2. хеширования
  3. Локально известно хэширование Блума.

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

  2. То, что вы реализовали, является методом хэширования. Есть тонны, чтобы попробовать, но ваш должен работать нормально:)

  3. Важный шаг к быстрому выполнению хэширования Вы конвертируете свои значения в унарное представление и затем берете случайное подмножество битов в качестве нового хэша. Сделайте это с 20-50 случайными выборками, и вы получите 20-50 хеш-таблиц. Если какая-либо функция соответствует двум или более из этих 50 хеш-таблиц, эта функция будет очень похожа на ту, которую вы уже сохранили. Это позволяет конвертировать абс (ху)

Надеюсь, это поможет, если вы хотите попробовать мой собственный поиск похожих изображений, напишите мне на хаджо на spratpix

Вы найдете огромное количество литературы по этому вопросу. Просто перейдите в Google Scholar или IEEE Xplore для поиска статей. У меня был некоторый контакт с полем, когда я делал проект по распознаванию формы (в значительной степени нечувствительный к шуму, поворотам и изменениям размеров) в колледже - вот статья.

Другие вопросы по тегам