我正在尝试构建像http://labs.ideeinc.com/multicolr这样的实用程序, 但我不知道他们使用的是哪种算法,有人知道吗?
答案 0 :(得分:5)
他们所做的只是匹配直方图。
因此,为您的图像构建直方图。按图像大小标准化直方图。 直方图是具有与颜色一样多的元素的向量。你不需要32,24,甚至可能不是16位的准确度,这只会减慢你的速度。出于性能原因,我将直方图映射到4,8和10-12位。
least distance compare
。 真正的大诀窍是找到匹配类似直方图的最佳算法。
从距离计算开始。在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种代表颜色)之间的最佳匹配。
图像集的大小是多少,因为根据大小,某些搜索索引可能比alogorith本身更大?
答案 2 :(得分:0)
可能只是创建图像中使用的颜色的直方图,然后最适合用户选择的颜色。