Иногда два файла изображения могут отличаться на уровне файла, но человек посчитал бы их одинаково воспринимаемыми. Учитывая это, теперь предположим, что у вас есть огромная база данных изображений, и вы хотите знать, думает ли человек, что какое-то изображение X присутствует в базе данных или нет. Если бы все изображения имели проницательный хэш / отпечаток пальца, то можно было бы хэшировать изображение X, и было бы просто узнать, находится ли оно в базе данных или нет.
Я знаю, что вокруг этой проблемы есть исследования, и существуют некоторые алгоритмы, но есть ли какой-нибудь инструмент, такой как инструмент командной строки UNIX или библиотека, которую я мог бы использовать для вычисления такого хэша без реализации какого-либо алгоритма с нуля?
редактировать: соответствующий код из findimagedupes, используя ImageMagick
try $image->Sample("160x160!");
try $image->Modulate(saturation=>-100);
try $image->Blur(radius=>3,sigma=>99);
try $image->Normalize();
try $image->Equalize();
try $image->Sample("16x16");
try $image->Threshold();
try $image->Set(magick=>'mono');
($blob) = $image->ImageToBlob();
edit: Warning! Объект ImageMagick $ image, похоже, содержит информацию о времени создания файла изображения, который был прочитан. Это означает, что полученный вами двоичный объект будет отличаться даже для одного и того же изображения, если он был найден в другое время. Чтобы убедиться, что отпечаток остается прежним, используйте $ image-> getImageSignature () в качестве последнего шага.