2016-01-05 23 views
1

我的场景如下: 我必须在数据库中保存1000张图像,然后必须将新图像与数据库图像进行比较(匹配应该是70%或更多)以获得最佳效果在php中匹配来自数据库的图像。在php中的图像比较

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

感谢提前:)

+0

让我们看看你到目前为止尝试过 –

回答

1

试试这个课程。它支持从图像获取哈希字符串中的数据库来存储和使用新的图像后比较:
https://github.com/nvthaovn/CompareImage

这是非常快速和准确的,虽然不是最优的代码。我的数据库中有20000张照片。

+0

感谢它为我工作:) – VRK

1

这完全取决于你想如何聪明的算法是。

例如,这里有一些问题:

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

缩放到某个小的值,如64x64或32x32,忽略长宽比,使用组合缩放算法而不是最近像素 缩放颜色范围,以使最暗的黑色和最亮白色 旋转和翻转的图像,所以t最左边的颜色是左上角,然后右上角是下一个更深,左下角是下一个更深(当然尽可能) 编辑一个组合缩放算法是一个当缩放10个像素下降到一个将执行它使用一个函数,将所有这10个像素的颜色合并为一个。可以用像平均值,平均值或更复杂的算法(如双三次样条)来完成。

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

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

这很容易实现,运行速度相当快,但当然不会处理最高级的差异。为此你需要更先进的算法。

+0

感谢您的答案将尝试实施..你有任何链接或代码,所以我可以参考它.. – VRK

2

我建议你使用感知哈希或类似的 - 主要是为了表现的原因。本质上,您可以在插入数据库的位置为数据库中的每个图像创建单个数字或散列,并将该散列保留在数据库中。然后,当您获取插入的新图像时,计算其哈希值并将其与所有其他图像的PRE-CALCULATED哈希值进行比较,以便您不必从磁盘拖动现有图像的所有兆字节像素以进行比较他们。

最好的pHASH是尺度不变和图像格式不变的。这是Neal Krawetz博士的一篇文章...... Perceptual Hashing

ImageMagick还可以做感知散列并可从PHP调用 - 请参阅here