php - 识别相似图像的好方法?

标签 php image gd computer-vision content-based-retrieval

<分区>

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

它的散列速度很快(对于 800x600 图像每秒约 40 张),并且未经优化的搜索算法可以在 22 分钟内完成 3,000 张图像的比较(3 张/秒)。

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

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

我可以使用这个模型有什么改进吗? 我还没有研究不同成分(色调、饱和度和明度)与比较的相关性。色调可能很重要,但其他呢?

为了加快搜索速度,我可能会将每个部分的 4 位分成两半,并将最高有效位放在前面,这样如果它们未通过检查,则根本不需要检查 lsb。我不知道有什么有效的方法来存储这样的位,但仍然可以轻松地搜索和比较它们。

我一直在使用包含 3,000 张照片(大部分是独一无二的)的数据集,没有出现任何误报。它完全不受调整大小的影响,并且对亮度和对比度变化有相当的抵抗力。

最佳答案

你要使用的是:

  1. 特征提取
  2. 散列
  3. 本地感知的布隆哈希。

  1. 大多数人都使用 SIFT 功能,尽管我在非尺度不变功能方面有过更好的体验。基本上,您使用边缘检测器来找到有趣的点,然后将图像 block 围绕这些点居中。这样您还可以检测子图像。

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

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

希望对您有所帮助,如果您想尝试我自己开发的图像相似度搜索,请在 hajo 给我发邮件 spratpix

关于php - 识别相似图像的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838775/

相关文章:

php - 找不到类 'HttpResponse'

php - Jquery 我想要在每次点击时一次又一次地产生相同的效果

php - GD 和 php 5.3 中的字距调整问题

php - 不工作要求

php - 如何按月+年分组?

HTML : play a video inside an image

html - 如何将标题 h2 中的图像链接垂直对齐到底部?

html - 我的图片在 HTML 中没有正确对齐

php - 使用 imagettftext(),PHP 右对齐图像中的文本

php - 我可以用 php 7.2 安装 GD 库吗?