2009-06-12 55 views
7

我试图建立一个像这样的实用程序http://labs.ideeinc.com/multicolr, 但我不知道他们使用哪种算法,有谁知道?视觉相似性搜索算法

+0

我不确定这是一种“视觉相似性”检测,更像是颜色索引(颜色和面积份额)。由于颜色是由数字组件构成的,因此您可以构建算法来抓取这些数据。 – 2009-06-12 17:09:46

回答

5

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

因此,为您的图像构建一个直方图。根据图像的大小对直方图进行归一化。 A 直方图是具有与颜色一样多的元素的矢量。你不需要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..10,0000才会执行x^2。预先计算x^2的查找表,其中x从0..10,000变化。然后你的计算会很快。

  • 当您从调色板中选择一种颜色时,只需制作一个颜色为10,0000的直方图即可。当选择2时,使用color1 = 5000,color2 = 5000等制作直方图。

  • 最后,您将不得不添加模糊因素以使应用程序与现实世界相匹配,但您会发现这些使用测试。

+0

谢谢我将使用imageJ和这个程序算法 http://rsb.info.nih.gov/ij/plugins/color-inspector.html – Emrah 2009-06-12 19:37:56

0

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

2

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

  • 收集每个像素的颜色的图像
  • 进行聚类中(假设有5群K均值聚类)对所收集的颜色
  • 店聚集颜色的图像

当用户提供了一组你做某种贪婪匹配的选择给出颜色和颜色描述(5种reprsentative色彩之间的最佳匹配一个或多个查询的颜色代表描述符)的数据库中的每个图像。

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