有时两个图像文件在文件级别上可能不同,但人们会认为它们在感知上是相同的。鉴于此,现在假设您有一个庞大的图像数据库,并且您想知道人类是否会认为数据库中存在某些图像 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();
编辑:警告!ImageMagick $image 对象似乎包含有关读取的图像文件的创建时间的信息。这意味着即使对于同一图像,如果在不同时间检索到的 blob,您获得的 blob 也会有所不同。为确保指纹保持不变,请使用 $image->getImageSignature() 作为最后一步。