图像颜色搜索?

时间:2013-12-02 16:15:16

标签: image search colors

我将根据颜色为图像创建搜索功能。

目前,我有一个功能,它执行以下操作:

  • 将图片大小调整为50x50像素
  • 获取已定义颜色的列表(例如红色,它可能有许多子颜色值,如rgb(255,0,0),rgb(192,10,10)等)
  • 现在我通过图像逐个像素并检查,我的列表中哪种颜色是最近的。
  • 例如暗的红色值,也是图像中有一个红色的像素
  • 这是我的数量,如果图像的其余部分还有其他红色像素,我算了

  • 现在我为每个国家/地区存储数据库中的值(计数)。

  • 有了这些数据,我现在可以创建一个sqql搜索并查找带有红色的图像,按计数排序

我有一张颜色的表(id,key(红色),r,g,b) 还有一个包含image_id和key(image_id,key)的表

这或多或少都有效(我不知道是否有更好的方法可以检测颜色)

但是我现在的另一个问题是,它有超过250,000张图像,并且可以搜索的颜色每次都会改变。

例如,如果现在客户不喜欢搜索红色,他会搜索橙色, 和橙色不在我的列表中,我可以添加这个,但我必须 再次扫描所有250.000张图像的颜色。

现在我的问题。是否有一种很好的方法将颜色存储在良好的压缩和 以后可以在db中重新计算?没有100兆字节。

或者有人在这里知道提供图像颜色搜索功能的更好方法吗?

我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

所以你不知道客户会使用哪种颜色?因为它很简单。

  1. 您可以提取每个图像中前10个(或多或少)最常用的颜色,即“减少颜色深度”并保存这些颜色。
  2. 当客户进行搜索时,在这些颜色表中搜索,当然不会有完全匹配,例如红色==#ff0000,但您可以定义客户要求的颜色的接近程度。例如,红色应匹配#980a14。
  3. 对于非常快速的搜索,您可以添加另一个具有信息的缓存表,如果该图像中最常用于人类颜色(例如,红色,蓝色,绿色,黄色,白色,黑色)。
  4. 因此,如果您有大量图像,红色或绿色搜索将非常快,几乎是即时的。

    那么我们为什么要创建十大颜色列表呢?如果用户将搜索一些罕见的颜色,如CornflowerBlue(#6495ED),您将需要考虑该怎么做,获得每250k图像的所有前10种颜色(总共2.5kk o_O)。如果将这些结果保存在#3提到的表中,它将会很慢,但只有一次。因此,下次用户搜索时,他会得到即时回复。