视觉相似性搜索算法

10

1
我不确定这是“视觉相似性”检测,更像是颜色索引(颜色和区域共享)。由于颜色由数字组成,因此可以构建算法来进行处理。 - instanceof me
3个回答

6
他们正在做的只是匹配直方图。
因此,为您的图像构建一个直方图。通过图像大小对直方图进行归一化处理。一个直方图是一个有着与颜色相同元素数量的向量。您不需要32、24,甚至可能不需要16位的精度,这只会拖慢速度。出于性能原因,我会将直方图映射到4、8和10-12位。
  • 对所有4位直方图和样本颜色进行模糊的最小距离比较
  • 然后使用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。预先计算一个从0..10,000中x取值的x^2的查找表。然后您的计算将变得快速。

  • 当您从调色板中选择颜色时,只需使该颜色的直方图= 10,0000。当选择2个时,制作一个颜色1=5000,颜色2=5000等的直方图。

  • 最后,您将不得不添加一些调整因素,以使应用程序与现实世界相匹配,但是您将通过测试找到这些因素。


谢谢,我会使用ImageJ和这个程序算法。 http://rsb.info.nih.gov/ij/plugins/color-inspector.html - Emrah
我提到过进行模糊最小距离比较,但我觉得那时候可能是在开玩笑。我们只需要进行最小距离比较就好了。 :) - johnnycrash

3
我建议您对数据库中图像中出现的颜色进行某种形式的聚类。也就是说,对于数据库中的每个图像:
  • 收集图像中每个像素的颜色
  • 对收集到的颜色执行聚类(比如使用5个簇的k-means聚类)
  • 将聚类后的颜色作为图像的代表性描述符存储
当用户提供一组或多组查询颜色时,您可以进行某种贪心匹配,在给定颜色和数据库中每个图像的颜色描述符(5个代表性颜色)之间选择最佳匹配。
您的图像集的大小是多少?因为根据大小不同,某些搜索索引可能会成为算法本身的更大问题。

0
可能只需创建图像中使用的颜色直方图,然后对用户选择的颜色进行最佳拟合。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接