A veces dos archivos de imagen pueden ser diferentes en un nivel de archivo, pero un ser humano los consideraría perceptivamente idénticos. Dado que, ahora supongamos que tiene una gran base de datos de imágenes, y desea saber si un ser humano pensaría que alguna imagen X está presente en la base de datos o no. Si todas las imágenes tuvieran un hash perceptivo/huella dactilar, entonces se podría usar el hash de la imagen X y sería una cuestión simple de ver si está en la base de datos o no.Detectando si dos imágenes son visualmente idénticas
Sé que hay investigaciones sobre este tema, y existen algunos algoritmos, pero ¿hay alguna herramienta, como una herramienta de línea de comandos de UNIX o una biblioteca que pueda usar para calcular un hash sin implementar algún algoritmo desde cero?
edición: código relevante de findimagedupes, usando 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();
edición: Advertencia! El objeto imagen ImageMagick $ parece contener información sobre el tiempo de creación de un archivo de imagen que se leyó. Esto significa que el blob que obtenga será diferente incluso para la misma imagen, si se recuperó en un momento diferente. Para asegurarse de que la huella digital permanezca igual, use $ image-> getImageSignature() como último paso.
Este procedimiento suena extremadamente intensivo en el procesador. – endolith
* Esto significa que el blob que obtenga será diferente incluso para la misma imagen, si se recuperó en un momento diferente. * Esto no es cierto para la cadena '" $ blob "' (si está entre comillas dobles), que serán exactamente los mismos 32 bytes si los píxeles de la imagen son iguales. – pts