代码之家  ›  专栏  ›  技术社区  ›  SteD

谷歌的图像颜色搜索是如何工作的?

  •  19
  • SteD  · 技术社区  · 16 年前

    假设我问

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

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

    4 回复  |  直到 16 年前
        1
  •  31
  •   HipsterZipster    16 年前

    基于 this paper 由谷歌工程师亨利·罗利、舒梅特·巴鲁贾和尤西·京博士出版,你关于识别图像中颜色的问题的最重要含义似乎与谷歌的“saferank”算法有关,该算法可以检测图像周围没有任何文本的肤色。

    本文首先描述了“经典”方法,这种方法通常基于标准化颜色亮度,然后使用 Gaussian Distribution 或使用使用以像素为单位的RGB值建立的三维柱状图(每种颜色都是从0到255的8位整数值,表示多少)。其中的颜色包含在像素中)。还介绍了依赖于“亮度”(通常被错误地称为“亮度”)等特性的方法,即给定图像对肉眼的发光强度密度。

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

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

    更多关于这个主题的技术细节,包括数学方程式等等,请阅读一开始链接到的谷歌论文,并查看他们网站的研究部分。

    非常有趣的问题和主题!

        2
  •  7
  •   Instance Hunter    16 年前

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

        3
  •  3
  •   BobbyShaftoe    16 年前

    好吧,有一种方法,用非常基本的术语来说:

    给定一组图像,确定一个给定颜色范围的高浓度(这实际上很小),存储这些数据,相应地索引(根据上一步确定的颜色索引图像)。现在,您基本上拥有了与查找包含特定单词的文档相同的功能。

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

        4
  •  0
  •   Seena Burns    12 年前

    有多种方法可以从图像中提取颜色,我认为其他的答案可以解决这些问题(k-平均值、分布等)。

    假设已经提取了颜色,有几种方法可以按颜色搜索。一种缓慢但明显的方法是使用某种度量(例如 Color Difference ,然后根据“亲密度”对结果进行加权。

    另一种更快的方法是从本质上降低颜色空间的分辨率。与其处理所有可能的RGB颜色值,不如像Google那样将提取限制在较小的范围内(仅限于蓝色、绿色、黑色、黄色等)。然后用户可以用一组有限的颜色样本进行搜索,计算颜色距离变得很简单。