确定物体颜色的最准确方法是什么?


33

我编写了一个计算机程序,可以使用一些计算机视觉标准技术(高斯模糊,阈值,霍夫变换等)来检测静态图像(.jpeg,.png等)中的硬币。使用从给定图像中拾取的硬币的比率,我可以确定地确定哪些硬币。但是,我希望增加我的置信度,并确定我推断出的A型硬币(根据半径比)是否也具有正确的颜色。问题是对于英国硬币等。(铜,银,金),各自的颜色(尤其是铜到金)非常相似。

我有一个例程根据RedGreenBlue(RGB)“颜色空间”提取给定硬币的平均颜色,并将该颜色转换为HueSaturationBrightness(HSB或HSV)“颜色空间”的例程。

在尝试区分三种硬币颜色时,RGB并不是很好用(示例请参见所附的[基本]图像)。对于不同硬币类型的颜色,我具有以下范围和典型值:

注意:此处的典型值是使用实际图像的“像素级”平均值选择的一个。

**Copper RGB/HSB:** typicalRGB = (153, 117, 89)/(26, 0.42, 0.60).

**Silver RGB/HSB:** typicalRGB = (174, 176, 180)/(220, 0.03, 0.71).

**Gold RGB/HSB:** typicalRGB = (220, 205, 160)/(45, 0.27, 0.86) 

我首先尝试使用给定的平均硬币颜色(使用RGB)与上面给定的每种硬币类型的典型值之间的“欧氏距离”,将RGB值视为矢量;对于铜,我们将有:

dCØppË[R=[RŤÿpË-[RCØppË[R2+GŤÿpË-GCØppË[R2+ŤÿpË-CØppË[R2

差异的最小值()会告诉我们给定硬币最有可能是哪种类型。这种方法表明自己非常不准确。d

我还尝试过将硬币的色相与上述类型的典型值进行比较。尽管从理论上讲,这提供了更好的“色彩空间”来处理图像的亮度和饱和度变化,但它也不够准确。

问题:基于颜色(从静态图像)确定硬币类型的最佳方法是什么?

非常感谢你花时间陪伴。

典型硬币颜色

编辑1

注意:我已经尝试了下面讨论的所有想法,但几乎没有实现。光照条件的差异(即使在同一图像内)也使此问题变得非常棘手,应予以考虑。

编辑2(结果汇总)

谢谢您的回答。我自己的进一步研究(包括您的回答和评论)突出表明,在任意照明,任意摄像头(移动设备),硬币颜色波动(即使是相同物种/类型)的一般情况下,解决该问题的难度如何我首先以肤色识别(一个非常活跃的研究领域)为起点,即使仅白种人的肤色识别仍然存在许多问题(有关当前技术的综述,请参阅本文),而且这个问题包含三个不同的颜色对象,所有这些对象都可以具有连续且变化的色度,这一事实使计算机视觉这一主题非常难以分类和相应地处理(实际上,您可以在其中获得出色的博士学位) !)。

我从下面DW 的非常有用的帖子中研究了色域约束方法。乍一看,这是将图像和单独的硬币对象转换为与照明条件无关的颜色的预处理步骤,非常有前途。但是,即使是这项技术也无法完美运行(并且涉及用于映射的图像/直方图库–我不想进入),更复杂的神经网络体系结构方法也不可行。实际上,本文抽象地指出:

"current machine colour constancy algorithms are not good enough for colour-based 
 object recognition.".

这并不是说那里没有关于该主题的最新论文,但是我找不到它们,并且目前看来它还不是一个非常活跃的研究领域。

AVB 的回答也很有帮助,我已经简要研究了L A B *。

"The nonlinear relations for L*, a*, and b* are intended to mimic the nonlinear
response of the eye. Furthermore, uniform changes of components in the L*a*b* colour
space aim to correspond to uniform changes in perceived colour, so the relative 
perceptual differences between any two colours in L*a*b* can be approximated by 
treating each colour as a point in a three dimensional space."

从我所读的内容中,将依赖于设备的图像转换到该色彩空间将非常棘手-但是,当我有更多时间时,我将详细研究(以某种实现为目的)。

我没有屏住呼吸寻求这个问题的具体解决方案,在尝试使用L A B *之后,我将忽略硬币的颜色,并希望确定当前的几何检测算法(准确的椭圆霍夫变换等)。

谢谢大家 作为对此问题的结尾说明,以下是具有新几何检测算法的同一幅图像,该算法没有颜色识别:

在此处输入图片说明


1
图像将始终具有相同的彩色背景吗?还是可以在图像中引入其他“颜色标准”对象?如果是这样,您将有一种方法来适应变化的照明。如果没有,可能会很难..
2012年

2
这不仅仅是明显的彩色光。我很确定阳光,荧光灯和白炽灯的颜色足以使HSB的颜色匹配混乱,即使我们的眼睛以某种方式进行了调整,以至于我们不会感觉到事物会变色。
彼得·索尔

2
(+1)这个问题既有趣又具有挑战性。我觉得它需要一些改进,以便有一个很好的机会得到一个好的答案。如目前所说,它处于病态。对于实际的解决方案,您需要提供一些希望能够执行此分类的环境范围的更多详细信息。什么颜色的背景是可能的?硬币数量总是一样吗?你会一直有彩色图像吗?良好的环境照明?了解这些特征可以为解决方案提供指导。
主教

2
我认为您面临的问题是“颜色恒定”,其他搜索字词是“折扣光源”或“折扣背景”。这是视觉科学中尚未解决的问题。
caracal 2012年

1
希望我可以再+1以取得良好的跟进!非常有趣的东西。
马特·帕克

Answers:


6

对于初学者来说,有两件事。

一种,绝对不能在RGB中使用。您的默认值应为Lab(aka CIE L * a * b *)色彩空间。舍弃L。从您的图像看来,a坐标似乎为您提供了最多的信息,但是您可能应该对进行主成分分析,ab沿着第一个(最重要的)成分进行操作,以保持简单。如果这不起作用,则可以尝试切换到2D模型。

只是为了获得一种感觉,在a三个浅黄色硬币中,STD值低于6,应该区分137(“金”),154和162的均值。

第二,照明问题。在这里,您必须仔细定义您的问题。如果要在任何照明条件下和任何环境下区分接近的颜色-无论如何,您不能那样做。如果您只担心亮度的局部变化,则Lab会为您提供帮助。如果您希望既能在日光下又能在白炽灯下工作,是否可以确保均匀的白色背景,如示例图像所示?通常,您的照明条件是什么?

此外,从外观上来说,您的图片是使用相当便宜的相机拍摄的。它可能具有某种自动白平衡功能,会弄乱颜色,如果可以的话,请将其关闭。看起来图像还是在某个时候用YCbCr编码(如果是摄像机,会发生很多事情)或类似的JPG编码。颜色信息严重不足。在您的情况下,这实际上可能很好-这意味着相机在色彩通道中为您做了一些降噪处理。另一方面,这可能意味着在某些时候颜色信息的量化强度也要比亮度强-并不是很好。这里最主要的是-相机很重要,您的操作应取决于要使用的相机。

如果此处没有任何意义,请发表评论。


感谢您的回答。我不能保证以上任何一项。这是用于移动应用程序的,只需单击一个按钮即可计数硬币(任意数量的硬币)(而且速度非常快!)。因此,照明可能千差万别,也没有一致的背景。我相信以这种方式(如您所指出的)通过颜色对硬币类型进行分类是不可能的。但是,我喜欢您使用L A B *的答案,并认为它是提供的最佳答案。鉴于此,您将获得答案和赏金。再次感谢。
MoonKnight 2012年

6

本着集思广益的精神,我将分享一些您可以尝试的想法:

  1. 尝试使用Hue吗?看起来Hue可以很好地区分银和铜/金,但不能区分铜和金,至少在这里显示的单个示例中。您是否更详细地研究了使用色相,以了解将银与铜/金区别开来是否可行?

    我可能首先收集一堆示例图像(已将它们手动标记),然后计算每个图像中每个硬币的色相。然后,您可以尝试对它们进行直方图绘制,以查看Hue是否看起来像是一种合理的区分方法。我还可以尝试查看每种硬币的平均色相,以获取一些示例,例如您在此处介绍的示例。您也可以尝试使用饱和度,因为看起来饱和度也会有所帮助。

    如果失败,则可能需要编辑问题以显示您尝试过的内容,并提供一些示例来简要说明为什么这样做很困难或失败的地方。

  2. 其他色彩空间?同样,您可以尝试转换为rg色度,然后尝试查看结果是否有助于区分银与铜/金。这可能有助于调整光照变化,因此值得尝试。

  3. ñññ

    ñpññØñpØŤØŤpØ一世Ťp一世ŤŤX=X+C360C

  4. 比较参考图片?您可以考虑尝试匹配硬币上打印的内容,而不是使用硬币的颜色。例如,假设您在图像中检测到硬币,并假设它是一磅硬币。您可以拍摄一磅硬币的参考图像,并测试是否与匹配。C[R[RC

    您将需要考虑姿势差异。让我首先假设您有硬币的正面图像,如示例图片所示。然后,您需要考虑的主要是旋转:您不知道先验旋转了多少一个简单的方法可能是扫过一系列可能的旋转角度,旋转由,并检查是否似乎匹配。要测试是否匹配,可以使用一个简单的基于像素的差异度量:即,对于每个坐标,计算(的像素值之差Cθ[Rθ[RθCXÿdXÿ=[RθXÿ-CXÿ[Rθ和像素值在); 然后使用范数(平方和)或类似方法将所有差异值组合为一个具有接近匹配度的度量(即)。您将需要使用足够小的步长增量,以使像素差异可能起作用。例如,在您的示例图像中,一磅硬币的半径约为127像素;如果扫过值,并且每步增加度,则只需尝试大约1460个不同的旋转值,并且硬币圆周上的误差最接近真实的C大号2XÿdXÿ2θ0.25θ 最多应为像素的四分之一左右,该尺寸足够小以至于像素差异可以正常工作。

    您可能需要对该想法进行多种尝试。例如,您可以使用图像的灰度版本。完整的RGB,并在所有三个R,G,B差异上使用范数;完整的HSB,并对所有三个H,S,B差异使用范数;或仅与“色相”,“饱和度”或“亮度”平面一起使用。同样,另一种可能性是首先在和上运行边缘检测器,然后匹配边缘的结果图像。大号2大号2[RC

    为了提高鲁棒性,每个硬币可能具有多个不同的参考图像(实际上,每个硬币的每一面),然后尝试所有参考图像以找到最佳匹配。

    如果不是直接从正面拍摄硬币的图像,那么第一步,您可能要计算代表图像中硬币的周长的椭圆,并推断观察硬币的角度。这将使您在执行匹配之前计算该角度下形状。C[R

  5. 检查颜色如何根据距中心的距离而变化?这是“硬币的平均颜色”(单个数字,即0维)和“硬币的整个图像”(二维图像)之间可能的中间步骤。对于每个硬币,您可以计算一维矢量或函数,其中表示距硬币中心约的像素的平均颜色。然后,您可以尝试将图像中硬币的向量与该硬币的参考图像的向量进行匹配。f r r f C C f R RFF[R[RFCCF[R[R

    这可以让您校正照明差异。例如,您可能可以使用灰度级,也可以仅使用单个位平面(例如,Hue,Saturation或Brightness)工作。或者,您也许可以通过减去均值来首先对函数进行归一化:,其中是硬币的平均颜色-然后尝试将与匹配。[R = ˚F [R - μ μ Ç řFG[R=F[R-μμGCG[R

    这种方法的好处是,您无需推断硬币旋转了多少:函数是旋转不变的。F

    如果您想尝试这种想法,我将为各种不同的示例图像计算函数并将其绘制成图形。然后,您应该能够目视检查它们,以查看函数是否具有相对一致的形状,而与光照无关。您可能需要尝试多种不同的可能性(灰度,每个HSB位平面等)。FC

    如果可能不是直接从正面拍摄硬币,而是从某个角度拍摄的,那么您首先需要追踪的周长的椭圆以推断出被拍摄的角度,然后针对其中的角度进行校正。的计算。Ç ˚FCCF

  6. 查看视觉算法的色彩稳定性。计算机视觉界已经研究了色彩恒定性,即校正未知光源的问题。参见,例如,该概述。您可能会探究针对此问题得出的一些算法;他们尝试推断照明源,然后对其进行校正,以得出如果使用参考照明源拍摄的照片您将获得的图像。

  7. C[RC

我不知道这些方法是否有工作的机会,但是您可以尝试一些方法。


3

有趣的问题和良好的工作。

尝试使用中间颜色值而不是平均值。对于亮度和饱和度导致的异常值,这将更加健壮。尝试仅使用RGB组件之一,而不是全部三个。选择最能区分颜色的组件。您可以尝试绘制像素值(例如RGB分量之一)的直方图,以了解像素分布的属性。这可能表明解决方案并非立即显而易见。尝试在3D空间中绘制RGB分量,以查看它们是否遵循任何模式,例如,它们可能位于一条线附近,这表明RGB分量的线性组合可能比单独的分类器更好。


用中位数大声喊叫,实际上我也对此进行了编码,这在确定正确的颜色方面也很差。使用直方图方法时,我意识到了计算费用。一旦我开始遍历2D像素,就会产生费用!不管怎样,我应该像您指出的那样放入这样的东西来建立任何关联。我制作了各种RGB分量图,由于光照条件的变化(在不同位置拍摄图片的结果),对于所有三种硬币类型,RGB值可能会大量重叠。
MoonKnight

我还研究过拟合模型以估计颜色空间点属于某种硬币类型的后验概率。我还研究了高斯混合建模,但到目前为止,我对此还没有很了解。我也被告知了另一种方法(有点武断,但是更简单),那就是使用类似最近邻插值的方法。谢谢你的时间。
MoonKnight 2012年

1
在完全不同的轨道上,硬币之间的另一个区别是正面/背面的设计(尽管有些设计可能在一侧具有相同的设计)将设计模式集与硬币像素进行互相关(或使用互信息)怎么样?帮助您确定要看的硬币。通过比率,像素颜色和此设计匹配的组合,您可能能够降低错误发现率。
martino

我已经想到了-但是这对当前的识别软件提出了很高的要求,从头开始编写(OCR ??)将会是一项艰巨的工作。在这种硬币上的图形上也有巨大的变化,这使这种实现成为维护的噩梦。我稍后再去玩-我将报告发现的事情。再次感谢。
MoonKnight 2012年

为什么要下票?如果答案有问题,请指出答案-我看不到
martino 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.