搜索颜色相似性

问题描述:

我正在研究一个涉及将颜色扫描为RGB的项目,然后搜索更多RGB数据的数据库以查看与扫描的颜色最相似的项目。我已经决定在这种情况下确定“相似”意味着什么的最简单方法是在三维空间中表示颜色,然后找到扫描点与数据库其余部分之间的距离。搜索颜色相似性

在我看来,这是第一部分是好的,使用三维空间和接近度的想法,但后半部分似乎对我来说是一个坏主意,我不应该检查扫描的颜色对每一个数据库中的单点,我应该吗?从未做过任何正式的CS工作,我不知道该怎么做,但我有一种非常不同的感觉,那就是必须有更好的方法。或者,为了使这个摘要:我有一些输入数据,一堆存储的数据和一个函数,告诉我这两个数据有多相似。找出输入中最相似的存储实体的最有效方式是什么?

编辑:我使用python,如果任何人都好奇。

为了解决抽象语句:除非在先验已知的相似度函数中存在结构,否则没有比“尝试所有事物”更好的方法。

您的问题在术语"nearest neighbor search"下进行了研究。对于这个问题,cover tree是非常合适的。这page有指向代码的指针。 A kd-tree也可能是合适的。

由于缺乏关于参考色数据库结构或覆盖范围的进一步信息,很难提出进一步的建议。例如,如果已知数据库具有最坏的稀疏性,那么查询可以被限制为其R分量与测试颜色的R分量相差小于稀疏度等等的G分量和B分量的那些条目,从而减少整个数据库保存为一个较小的立方体部分,保证包含结果。 (使用此方法需要证明立方体中的任何点都不超过数据库中的某个点的X,这对于固定数据库至少可以预先确定一次。)

+0

我在考虑使用类似kd树,但我不知道它存在或有一个名称。感谢有用的指针!我会一起尝试破解一些事情。 – NSU 2010-10-18 21:09:03