Иногда два файла изображений могут отличаться на уровне файлов, но человек считает их восприимчивыми одинаковыми. Учитывая, что теперь предположим, что у вас есть огромная база данных изображений, и вы хотите знать, будет ли человек думать, что какое-то изображение X присутствует в базе данных или нет. Если все изображения имели проницательный хэш/отпечаток пальца, то можно было бы хэш-изображение X, и было бы просто проверить, находится ли он в базе данных или нет.
Я знаю, что есть исследования вокруг этой проблемы, и существуют некоторые алгоритмы, но есть ли какой-либо инструмент, такой как инструмент командной строки UNIX или библиотека, которую я мог бы использовать для вычисления такого хеша без реализации какого-либо алгоритма с нуля?
edit: соответствующий код от 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: Предупреждение! ImageMagick $image object, похоже, содержит информацию о времени создания файла изображения, который был прочитан. Это означает, что blob, который вы получите, будет отличаться даже для одного и того же изображения, если он был получен в другое время. Чтобы убедиться, что отпечаток остается неизменным, используйте $image- > getImageSignature() в качестве последнего шага.