Для чего используется хеширование изображений? - PullRequest
36 голосов
/ 16 июня 2009

Я иногда слышу этот термин и мне интересно, для чего он используется?

Ответы [ 5 ]

38 голосов
/ 17 июля 2016

Хеширование - это функция, которая применяется к произвольным данным и создает данные фиксированного размера (в основном очень маленького размера). Существует много разных типов хэшей, но если мы говорим о хэшировании изображений, он используется либо для:

  • очень быстро находить дубликаты. Практически любая хеш-функция будет работать. Вместо поиска по всему изображению вы будете искать хеш изображения.
  • поиск похожих изображений, которые я объясню позже

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

  • изменение размера
  • вращение
  • немного другая цветовая гамма
  • другой формат
  • незначительный шум, водяные знаки и артефакты

Даже если вы найдете изображение, которое будет отличаться только на один байт, если вы примените к нему хеш-функцию, результат может быть очень разным (для хешей, таких как MD5, SHA это наиболее наверное будет совсем по другому).

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

Наиболее известные алгоритмы:

  • а-хэш . Среднее хеширование - это самый простой алгоритм, который использует только несколько преобразований. Масштабируйте изображение, преобразуйте его в оттенки серого, вычислите среднее значение и оцифруйте в градациях серого на основе среднего значения. Теперь преобразуйте двоичное изображение в целое число. Алгоритм настолько прост, что его можно реализовать за час.
  • р-хаш . В перцептуальном хеше используется аналогичный подход, но вместо усреднения используется дискретное косинусное преобразование (популярное преобразование в обработке сигналов).
  • * * d тысячи сорок девять-хэш . Разностный хэш использует тот же подход, что и a-хеш, но вместо использования информации о средних значениях он использует градиенты (разницу между соседними пикселями).
  • ш-хаш . Очень похоже на p-хэш, но вместо DCT используется вейвлет-преобразование .

Кстати, если вы используете python, все эти хеши уже реализованы в этой библиотеке .

36 голосов
/ 08 апреля 2010

При обычном хешировании файла хешируются отдельные биты данных файла, хеширование изображения работает на несколько более высоком уровне. Разница заключается в том, что при хешировании изображений, если два изображения выглядят практически одинаково, но имеют другой формат или разрешение (или незначительное искажение, возможно, из-за сжатия), они должны хешировать одно и то же число. Несмотря на то, что фактические биты их данных совершенно разные, если они выглядят практически идентичными человеку, они хешируют одно и то же.

Одним из приложений этого является поиск. TinEye.com позволяет загрузить изображение и найти его в Интернете. Как и Google, у него есть веб-сканер, который сканирует веб-страницы и ищет изображения. Затем он хеширует эти изображения и сохраняет хэш и URL в базе данных. Когда вы загружаете изображение, оно просто вычисляет хеш и извлекает все URL, ссылающиеся на этот хеш в базе данных. Примеры использования TinEye включают в себя поиск версий изображений с более высоким разрешением или поиск чьего-либо общедоступного facebook / myspace / etc. профиль из их изображения (при условии, что эти профили используют одну и ту же фотографию.

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

Существует множество других возможностей, включая проверку подлинности изображения и поиск похожих кадров в видео (как уже упоминалось кем-то еще).

3 голосов
/ 16 июня 2009
Хеширование

в целом - это полезный способ сокращения огромного количества данных до короткого числа (ish), которое можно использовать для идентификации этого изображения.

Иногда они предназначены просто для того, чтобы обеспечить удобный способ идентификации файла без вмешательства человека, особенно в присутствии нескольких параллельных авторов, на которых нельзя положиться, чтобы увеличить какой-либо главный счетчик (JPG001 JPG002) без наложения .

Иногда хэши предназначены для того, чтобы их не подделать, так что я могу сказать - если хеш-изображение, которое ВЫ генерируете, совпадает с тем, которое я создал при отправке вам изображения, тогда вы можете быть уверены, что оно от меня (и не настроено) злодеем). Однако не все хеши могут дать такую ​​гарантию, так как каждые несколько лет популярный такой «криптографический» хеш имеет роковые недостатки.

1 голос
/ 16 июня 2009

На практике хеширование изображений популярно для поиска похожих изображений в последовательности кадров или видео или для вставки водяного знака с различными изображениями, как это делают многие киностудии (почти обращаясь к Fight Club в жутком смысле! ).

0 голосов
/ 16 июня 2009

Умм .... Быстро сравнить изображения (в широком смысле, картинки или любые другие двоичные файлы), не сравнивая весь файл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...