我在PHP中开发了一种简单快速的算法来比较图像的相似性。
快速(800x600图像每秒约40个)散列和未经优化的搜索算法可以在22分钟内完成3,000张图像,将每张图像与其他图像进行比较(3 /秒)。
基本概述是获取图像,将其重新缩放至8x8,然后将这些像素转换为HSV。然后,Hue,Saturation和Value被截断为4位,它变成一个大的十六进制字符串。
比较图像基本上沿着两个字符串走,然后添加它找到的差异。如果总数低于64,那么它的图像相同。不同的图像通常在600 - 800左右。低于20且非常相似。
我可以使用这个型号有什么改进吗? 我还没有看到不同组件(色调,饱和度和值)与比较的相关性。顺化可能非常重要,但其他人呢?
为了加快搜索速度,我可能将每个部分的4位分成两半,并将最重要的位先放入,这样如果它们检查失败,则根本不需要检查lsb。我不知道一种有效的方法来存储这样的位,但仍然可以轻松地搜索和比较它们。
我一直在使用3000张照片的数据集(大多数是独一无二的)并没有任何误报。它完全不受调整大小的影响,并且能够抵抗亮度和对比度变化。
答案 0 :(得分:10)
答案 1 :(得分:10)
您想要使用的是:
大多数人使用 SIFT 功能,虽然我有更好的体验,不是规模不变的。基本上,您使用边缘检测器来查找有趣的点,然后将图像块放在这些点周围。这样你也可以检测子图像。
您实现的是哈希方法。有很多可以尝试,但你的工作应该很好:)
快速制作它的关键步骤是哈希哈希。您将值转换为一元表示,然后将位的随机子集作为新哈希。使用20-50个随机样本执行此操作,您将获得20-50个哈希表。如果任何功能与这50个哈希表中的2个或更多匹配,则该功能将与您已存储的功能非常相似。这允许您转换abs(x-y)
希望有所帮助,如果您想尝试我自己开发的图像相似性搜索,请在spratpix
向我发送邮件。答案 2 :(得分:1)
你会发现有关这个主题的大量文献。只需转到Google Scholar或IEEE Xplore即可搜索文章。当我在大学进行形状识别项目(对噪音,旋转和调整大小不敏感)时,我与某些领域有过接触 - here is the article。