php中的图像比较

时间:2016-01-05 07:59:29

标签: php image-processing image-comparison

我的方案如下: 我必须在数据库中保存1000个图像,然后我必须将新图像与数据库图像进行比较(匹配应该是70%或更多),以便从php中的数据库中获得最佳匹配图像。

是否有任何算法或方法可以快速比较更好的结果......

提前致谢:)

3 个答案:

答案 0 :(得分:4)

我建议您使用Perceptual Hash或类似的 - 主要是出于性能原因。实质上,您为数据库中插入它时的每个图像ONCE创建一个数字或哈希值,并将该哈希值保留在数据库中。然后,当您要插入新图像时,计算其哈希值并将其与所有其他图像的PRE-CALCULATED哈希进行比较,这样您就不必将现有图像的所有兆字节像素从磁盘中拖出来进行比较它们。

最佳pHASH是尺度不变的,图像格式不变。以下是Neal Krawetz博士的一篇文章...... Perceptual Hashing

ImageMagick也可以进行Perceptual Hashing并可以从PHP调用 - 请参阅here

答案 1 :(得分:1)

这完全取决于您希望算法的智能程度。

例如,以下是一些问题:

裁剪图像与未裁剪图像 添加了文本的图像与没有添加的文本 镜像图像 我见过的最简单,最简单的算法就是对每张图片执行以下步骤:

缩小到一些小的东西,比如64x64或32x32,忽略宽高比,使用组合缩放算法而不是最近的像素 缩放颜色范围,使最暗的颜色为黑色,最亮的颜色为白色 旋转并翻转图像,使最左边的颜色位于左上方,然后右上角是下一个较暗,左下角则是较暗(当然尽可能) 编辑组合缩放算法是指将10个像素缩小到1时将使用一个函数来实现它,该函数采用所有这10个像素的颜色并将它们合并为一个。可以使用平均值,平均值或更复杂的算法(如双三次样条)来完成。

然后计算两幅图像之间逐像素的平均距离。

要在数据库中查找可能的匹配项,请将像素颜色存储为数据库中的单个列,索引其中一组(但不是全部,除非您使用非常小的图像),并执行使用每个像素值的范围,即。每个图像,其中小图像中的像素在您想要查找的图像的-5到+5之间。

这很容易实现,并且运行起来相当快,但当然不会处理大多数高级差异。为此,您需要更高级的算法。

答案 2 :(得分:1)

试试这堂课。它支持从图像中获取哈希字符串以存储在数据库中,并在以后与新图像进行比较:
https://github.com/nvthaovn/CompareImage

虽然不是最佳代码,但速度非常快且准确。我的数据库中有20000张图片。