【问题标题】:How to detect colors under different illumination conditions如何检测不同光照条件下的颜色
【发布时间】:2015-05-19 08:53:31
【问题描述】:

我有一堆不同颜色的衣服图像,我想检测每个图像的颜色。假设我在日光条件下有一张蓝色裙子图像,我可以通过 RGB 分布获得正确的颜色。然而,在晚上很难分辨颜色,“蓝色”被识别为“黑色”。很难制定一个统一的标准来通过 RGB 分布来指定颜色。

因此,我想知道是否有一种方法或算法可以检测不同照明下的颜色?

顺便说一句:我也尝试了 HSV 色彩空间,结果并不好。

【问题讨论】:

  • 当人类观察者面对棘手的灯光时,有 75% 的时间认为蓝色/黑色连衣裙是白色/金色,我认为计算机没有机会。
  • @MarkRansom - 再好不过了。
  • 如果您知道每张照片的颜色相同,那么一个非常困难的问题就会变得非常简单。例如,如果每张照片都包含您知道是白色的东西,那么您可以使用该颜色的记录值来标准化整张照片的 RGB 值。

标签: image algorithm opencv image-processing computer-vision


【解决方案1】:

这是一个非常困难的问题,今天仍在努力解决。它的要点是找到一个colour quantization,使用一组具有代表性的图像基本颜色,这些颜色对不同的外部刺激具有鲁棒性……照明、阴影、照明不足等。

很遗憾,我无法推荐任何一种算法来为您解决所有情况。但是,过去对我有用的一种算法是在我从事图像检索工作时。具体来说,来自柯达研究实验室的 Jiebo Luo 和 David Crandall 的工作:http://vision.soic.indiana.edu/papers/compoundcolor2004cvpr.pdf

基本算法是看ISCC-NBS colour palette set。此外,此链接更有成效:https://www.w3schools.com/colors/colors_nbs.asp。它是一组 267 种颜色,代表了我们今天在现代社会中看到的颜色。通常,当我们描述颜色时,我们有一组一个或多个形容词,然后是主色调。例如,那件衬衫是深浅蓝色,或浅黄色等。这个算法的美妙之处在于,当所讨论的颜色受到不同的外部刺激时,我们有所有这些形容词来赋予颜色含义,但归根结底,颜色的最后一部分——主要色调——是我们所追求的。

这些颜色中的每一种都有一个关联的 RGB 值。这些颜色被转换成CIE Lab 颜色空间,形成一个 267 CIE Lab 查找表。

要对特定输入颜色进行分类,您需要将此输入的 RGB 值转换为 CIE Lab 颜色空间,然后确定最接近此查找表的颜色。已经表明,CIE Lab 颜色空间中两种颜色之间的欧几里得距离最能代表人类对颜色的感知差异。一旦我们确定颜色最接近查找表中的哪个位置,我们就会去掉所有的形容词,看看主色调是什么,然后相应地对该颜色进行分类。

例如,如果我们有一个 RGB 像素并将其转换为 Lab,然后发现最接近的颜色是亮黄色,我们将删除“亮”并且代表该 RGB 像素的最终颜色将是黄色.


因此,最终的算法是这样的:

  1. 找到 ISCC-NBS 颜色集的 RGB 值并转换到 CIE Lab 并创建一个查找表,我称之为 LUT1。例如,在 Python 中,您可以简单地将其设为 2D 列表或 2D NumPy 数组。
  2. 创建另一个查找来存储 ISCC-NBS 颜色集中每种颜色的主色调 - 因此去掉所有形容词并留下主色调,我称之为 LUT2。例如,在 Python 中,您可以创建一个字典,其中键是 LUT1 的相应行,值是实际的基本颜色本身。是字符串表示还是表示基本颜色的 RGB 三元组取决于您。
  3. 对于有问题的像素,通过该像素的 CIE Lab 组件与 LUT1 中的组件之间的欧几里德距离,找到与 LUT1 匹配的最接近的 ISCC-NBS 颜色。
  4. 在 LUT1 中找到此位置后,使用相同的索引对 LUT2 进行索引,并获取最终颜色以对该输入像素的颜色进行分类。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2017-09-17
    相关资源
    最近更新 更多