【发布时间】:2011-05-12 03:58:19
【问题描述】:
我需要使 PHP 成为基于颜色的搜索,用户将在其中单击调色板上的颜色,搜索将检索具有主要相似颜色的所有图像。
结果将从颜色最相似的图像中按降序排序。
任何人都可以指出一些指导方针或现有的类、示例等如何实现这一点吗?
特别是搜索的“近似”或“相似”部分需要如何? 如何选择不同种类的“橙子”,并从最相似到最离谱的顺序排列。
谢谢
【问题讨论】:
我需要使 PHP 成为基于颜色的搜索,用户将在其中单击调色板上的颜色,搜索将检索具有主要相似颜色的所有图像。
结果将从颜色最相似的图像中按降序排序。
任何人都可以指出一些指导方针或现有的类、示例等如何实现这一点吗?
特别是搜索的“近似”或“相似”部分需要如何? 如何选择不同种类的“橙子”,并从最相似到最离谱的顺序排列。
谢谢
【问题讨论】:
这是我如何使用 php GD lib 函数分析图像的示例。从这里您只需将分析的数据存储在数据库中以在搜索期间使用。
完整的细节可以在这里找到:http://www.colab-aktiv.com/?page_id=263
基本步骤如下:
定义色样中的颜色
使用要分析的图像创建图像对象,如果图像太大则调整大小
创建一个图像对象并将颜色样本中的颜色加载到图像调色板中。这是 GIF 图像使用的调色板。这是正在分析的图像中的颜色将与之进行比较的比较调色板。
遍历图像中的所有像素,并将其与比较调色板中与像素最接近的匹配项进行计数。
按降序排列计数结果
显示排名靠前的结果
【讨论】:
首先,您不应该即时搜索图片库。如果您必须找到每个图像的主要颜色,那将非常缓慢。您需要像爬虫这样的东西,但专门用于图像。
要找出主要颜色,您需要一些扎实的数学基础:
【讨论】:
imagecolorclosest() 可能会帮助您
imagecolorclosest返回值和你的输入颜色之间的差异。整数三元组最适合搜索,但不一定适合存储。
我做过类似的工作。我的实现可以在这里找到http://code.google.com/p/hppg/。现场示例可以在项目主页中找到。该搜索引擎还具有同时按关键字和颜色进行搜索的功能。所有详细信息和代码都可以在项目主页上找到。希望对你有帮助:)
【讨论】:
我认为在这种情况下使用像Color coherence vector 这样的算法可能会很有帮助,因为该算法会找到图像中颜色的连通分量并定义一组连贯的颜色和不连贯的颜色。
“相干颜色”是描述您正在寻找的主要颜色的另一个术语。可能,您只会使用这些连贯颜色的特征,您可以根据用户的选择进行匹配。
本教程Image Retrieval: Color Coherence Vector describes 描述了算法的步骤,并举例说明了它的工作原理和一些缺点。顺便说一句,我认为这些缺点不会影响您的用例,因为您主要是在寻找匹配主要颜色,无论它在哪里。
【讨论】: