类似图像搜索解决方案

时间:2011-03-10 09:18:48

标签: image comparison

我的图像存储服务器出了很大问题。

上面有大约2,000,000张产品图片并且不断增加,但很多产品图片非常相似。例如:iPad照片有许多类似尺寸的120 * 120,118 * 120,131 * 125 ......等等,它们在我的网站上占用了大量不必要的磁盘空间和糟糕的用户体验(图库中的类似图像)。

这些图片已在数据库中编入索引,我可以在某些条件下找到它们,例如产品,类别等。我需要找到一种方法在数据库中标记这些相似的图像并将其删除。

我做了什么: 发现一个名为pHash的库可以计算出两个图像的相似度,我可以用它来逐个计算图像。但通过这种方式,需要花费大量时间才能找到这些图像。现在我不知道如何让这个过程更快。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

  • 使用pHash计算所有图像的感知哈希值(不是每种组合的交叉产品),
  • 然后对该哈希进行排序(同时保持对图像的引用),
  • 然后定义您定义为“图片等效”的感知哈希的临界值,
  • 然后用对您要保留的一张图片的引用替换对等效图片的引用。

答案 1 :(得分:3)

你是对的,一个天真的算法是O(n^2),因为你正在对所有n个大小的数据集进行成对比较。

有一种称为blocking的技术,其实现是canopy clustering,可以通过将比较窗口大小划分为一组可能相似的“块”来绕过成对比较。

您可以通过对特征向量进行提取和排序来对图像进行聚类(我不确定如何对图像进行处理)。

然后,定义一个比较窗口w,使得w< ñ。

然后应用一种称为sorted neighborhood method的技术,该技术在已排序的记录上按顺序移动固定大小w的窗口。然后,窗口内的每个图像与其“邻居”配对并包括在候选记录对列表中。

这基本上将比较复杂度降低到O(w * n),从而产生具有常数w的线性算法。

在执行比较后,您应该将传递闭包放在匹配对上。

您的结果对现在是similar图像。

注意,此算法为embarrassingly parallel