视觉相似性搜索算法

时间:2009-06-12 17:04:10

标签: algorithm search image-processing search-engine similarity

我正在尝试构建像http://labs.ideeinc.com/multicolr这样的实用程序, 但我不知道他们使用的是哪种算法,有人知道吗?

3 个答案:

答案 0 :(得分:5)

他们所做的只是匹配直方图。

因此,为您的图像构建直方图。按图像大小标准化直方图。 直方图是具有与颜色一样多的元素的向量。你不需要32,24,甚至可能不是16位的准确度,这只会减慢你的速度。出于性能原因,我将直方图映射到4,8和10-12位。

  • 在所有4位直方图和样本颜色之间进行模糊least distance compare
  • 然后取该组并进行8位直方图比较。
  • 然后可以将10或12位直方图与剩余的组进行比较。这将是性能最高的搜索,因为您要将总集与非常少量的计算进行比较,以找到一个小子集。
  • 然后,您将处理具有更多计算等的小子集。

真正的大诀窍是找到匹配类似直方图的最佳算法。

  • 从距离计算开始。在3个方面,我认为是:

    SQRT((x1-x2)^ 2 +(y1-y2)^ 2 +(z1-z2)^ 2)

我是从记忆中做到的,所以请仔细检查以确保。

  • 出于您的目的,您将拥有超过3个维度,因此您将拥有更多字词。 4位直方图有16个项,8位有256个项,等等。请记住,这种数学运算很慢,所以实际上不要执行SQRT部分。如果您将图像的大小标准化得足够小,比如说低至10,000像素,那么您就知道只需要为值{0}生成x^2 0..10,0000。预先计算x^2的查找表,其中x从0..10,000开始。然后你的计算会很快。

  • 从调色板中选择颜色时,只需使用该颜色= 10,0000制作直方图。选择2时,制作color1 = 5000,color2 = 5000等的直方图。

  • 最后,您必须添加软糖因子以使应用程序与现实世界相匹配,但您可以通过测试找到这些因素。

答案 1 :(得分:2)

我建议您对数据库中的图像中存在的颜色进行某种聚类。我的意思是,对于数据库中的每个图像:

  • 收集图像中每个像素的颜色
  • 对收集的颜色执行聚类(假设有5个聚类的k均值聚类)
  • 将聚类颜色存储为图像的代表描述符

当用户提供一组一种或多种查询颜色时,您会进行某种贪婪匹配,选择给定颜色与数据库中每个图像的颜色描述符(5种代表颜色)之间的最佳匹配。

图像集的大小是多少,因为根据大小,某些搜索索引可能比alogorith本身更大?

答案 2 :(得分:0)

可能只是创建图像中使用的颜色的直方图,然后最适合用户选择的颜色。