识别相似图像的好方法?[已关闭]

我在PHP中开发了一个简单而快速的算法来比较图像的相似性。

它快速(对于800x600图像,每秒约40张)和未优化的搜索算法可以在22分钟内通过3,000张图像,将每个图像与其他图像进行比较(3 / 秒)。

基本概述是获取图像,将其重新缩放到8x8,然后将这些像素转换为HSV。然后,色相,饱和度和值被截断为4位,并成为一个大的十六进制字符串。

比较图像基本上是沿着两个字符串进行的,然后添加它发现的差异。如果总数低于 64,则为同一图像。不同的图像通常在600 - 800左右。低于20,非常相似。

我可以使用的此模型是否有任何改进?我还没有看过不同的分量(色调,饱和度和值)与比较的相关性。色调可能很重要,但其他人呢?

为了加快搜索速度,我可能会将每个部分的4位分成两半,并将最重要的位放在第一位,这样如果它们没有通过检查,那么根本不需要检查lsb。我不知道一种有效的方法来存储这样的位,但仍然允许它们被轻松搜索和比较。

我一直在使用3,000张照片(大多数是独特的)的数据集,并且没有任何误报。它完全不受调整大小的影响,并且相当耐亮度和对比度变化。


答案 1

您要使用的是:

  1. 特征提取
  2. 散列法
  3. 本地感知的开花散列。

  1. 大多数人使用SIFT功能,尽管我对非规模不变功能有更好的体验。基本上,您使用边缘检测器来查找感兴趣的点,然后将图像补丁集中在这些点周围。这样,您还可以检测子图像。

  2. 您实现的是一个哈希方法。有很多可以尝试的,但你的应该可以正常工作:)

  3. 使其快速的关键步骤是散列您的哈希值。将值转换为一元表示形式,然后采用位的随机子集作为新的哈希。使用20-50个随机样本执行此操作,您将获得20-50个哈希表。如果任何功能与这 50 个哈希表中的 2 个或更多匹配,则该功能将与已存储的功能非常相似。这允许您转换 abs(x-y)

希望它有帮助,如果你想尝试我自己开发的图像相似性搜索,请给我发邮件给spratpix的hajo


答案 2

推荐