Хороший способ идентифицировать похожие изображения? - PullRequest
18 голосов
/ 15 мая 2010

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

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

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

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 31 января 2011

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

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

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

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

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

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

10 голосов
/ 15 мая 2010
1 голос
/ 15 мая 2010

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

...