我在 PHP 中开发了一种简单快速的算法来比较图像的相似性。
它的散列速度很快(对于 800x600 图像,每秒约 40 张),未经优化的搜索算法可以在 22 分钟内浏览 3,000 张图像,将每张图像与其他图像进行比较(3/秒)。
基本概述是您获取图像,将其重新缩放为 8x8,然后将这些像素转换为 HSV。然后将色调、饱和度和值截断为 4 位,并变成一个大的十六进制字符串。
比较图像基本上是沿着两个字符串走,然后添加它发现的差异。如果总数低于 64,则它是相同的图像。不同的图像通常在 600 - 800 左右。低于 20 并且极其相似。
我可以使用这个模型有什么改进吗?我还没有查看不同组件(色调、饱和度和值)与比较的相关性。色调可能很重要,但其他的呢?
为了加快搜索速度,我可能会将每个部分的 4 位分成两半,并将最高有效位放在首位,因此如果它们未通过检查,则根本不需要检查 lsb。我不知道一种有效的方法来存储这样的位,但仍然可以轻松地搜索和比较它们。
我一直在使用包含 3,000 张照片(大部分是唯一的)的数据集,并且没有出现任何误报。它完全不受调整大小的影响,并且对亮度和对比度变化具有相当的抵抗力。