Google的图片颜色搜索如何运作?

时间:2009-03-26 02:00:34

标签: image image-processing colors google-image-search

假设我查询

  

http://images.google.com.sg/images?q=sky&imgcolor=black

我得到了所有的黑色天空,算法实际上是如何工作的?

4 个答案:

答案 0 :(得分:31)

基于Google工程师Henry Rowley,Shumeet Baluja和Yushi Jing博士发布的this paper,您的问题中关于识别图像颜色的最重要含义似乎与google的“saferank”算法相关。可以检测到肉色,周围没有任何文字。

本文首先描述了“经典”方法,这些方法通常基于标准化颜色亮度,然后使用“Gaussian Distribution”,或使用使用RGB值建立的三维直方图。像素(每种颜色是0-255的8位整数值,表示该颜色包含在像素中的数量)。还引入了依赖于诸如“亮度”(通常被错误地称为“发光度”)的特性的方法,其是来自给定图像的肉眼发光强度的密度。

谷歌论文提到他们需要使用他们的算法处理大约10 ^ 9个图像,因此它需要尽可能高效。为了实现这一点,他们在ROI(感兴趣的区域)上执行大部分计算,ROI是图像中心的矩形,并且在所有侧面上插入1/6的图像尺寸。一旦他们确定了投资回报率,他们就会有许多不同的算法,然后应用于图像,包括面部检测算法,颜色稳定性等等,它们总体上在图像中找到统计趋势着色,最重要的是在统计分布中找到频率最高的色调。

他们使用其他功能,如熵,边缘检测和纹理定义 为了从图像中提取线条,他们使用概率Hough变换(Kiryati等,1991)的OpenCV实现(Bradski,2000)计算在肤色连接组件的边缘,这允许它们到找到可能不是身体部位的直线,并且还可以让他们更好地确定哪些颜色在图像中最重要,这是图像颜色搜索的关键因素。

有关本主题的技术细节(包括数学方程式等)的更多信息,请阅读开头链接的Google论文,并查看其网站的“研究”部分。

非常有趣的问题和主题!

答案 1 :(得分:7)

图像只是像素。像素只是RGB值。我们知道RGB中的黑色是什么,所以我们可以在图像中查找它。

答案 2 :(得分:3)

嗯,一种方法是非常基本的方法:

给定图像语料库,确定给定颜色范围的高浓度(这实际上是微不足道的),存储该数据,相应地索引(根据从前一步骤确定的颜色索引图像)。现在,您基本上与查找包含某些单词的文档相同。

这是对一种可能方法的非常非常基本的描述。

答案 3 :(得分:0)

有多种方法可以从图像中提取颜色,我认为其他答案可以解决它们(K-Means,发行版等)。

假设您已经提取了颜色,有几种方法可以按颜色进行搜索。一种缓慢但显而易见的方法是使用某种度量(例如Color Difference)计算搜索颜色与图像主色之间的距离,然后根据“接近度”对结果进行加权。

另一种更快的方法是大幅缩小色彩空间的分辨率。而不是处理所有可能的RGB颜色值,将提取限制在像谷歌那样的较小范围(只有蓝色,绿色,黑色,黄色等)。然后,用户可以使用一组有限的颜色样本进行搜索,并且计算颜色距离变得微不足道。