如何在不同光照条件下检测颜色

时间:2015-03-17 02:39:33

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

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

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

BTW:我也尝试过HSV色彩空间,效果不佳。

1 个答案:

答案 0 :(得分:7)

这是一个非常棘手的问题,今天仍在努力解决。它的要点是找到colour quantization使用一组代表性的图像基本颜色,这些颜色可以抵抗不同的外部刺激......光照,阴影,光线不足等。

不幸的是,我无法建议任何一种能够为所有情况完成工作的算法。但是,过去对我有用的一种算法就是我在图像检索方面的工作。具体来说,来自柯达研究实验室的Jiebo Luo和David Crandall的工作:http://vision.soic.indiana.edu/papers/compoundcolor2004cvpr.pdf

基本算法是查看ISCC-NBS colour palette set。此外,这个链接更有成效:http://tx4.us/nbs-iscc.htm。它是一组267种颜色,代表了我们今天在现代社会中看到的颜色。通常当我们描述颜色时,我们有一组一个或多个形容词,然后是主色调。例如,那件衬衫是浅蓝色或浅黄色等。这个算法的美妙之处在于,当所讨论的颜色受到不同的外部刺激时,我们拥有所有这些形容词赋予颜色意义但是在一天结束时,颜色的最后一部分 - 主导色调 - 就是我们追求的目标。

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

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

例如,如果我们有一个RGB像素并将其转换为Lab,那么发现最接近的颜色是亮黄色,我们会删除" bright"并且代表该RGB像素的最终颜色将为黄色。


因此,最终的算法是:

  1. 找到ISCC-NBS颜色集的RGB值并转换为CIE Lab并创建查找表。
  2. 创建另一个查找,用于存储ISCC-NBS颜色集中每种颜色的主色调 - 因此去除所有形容词并保留主色调。
  3. 对于有问题的像素,按实验室组件的欧几里德距离查找查找表中匹配的最近像素。
  4. 在查找表中找到此位置后,使用相同的索引索引到步骤2中找到的查找,并获取最终颜色以对输入像素的颜色进行分类。

  5. 希望这有帮助!