提问



在过去几年里,我参与过的最有趣的项目之一是关于图像处理的项目。目标是开发一个能够识别可口可乐罐头的系统(请注意,我正在强调罐头这个词,你会在一分钟内看到原因。你可以在下面看到一个样品,其中可以在绿色矩形中识别出带有刻度和旋转的颜色。[[[5]





对项目的一些限制:



  • 背景可能非常嘈杂。

  • 可以可以有比例或轮换甚至方向(在合理范围内)。

  • 图像可能有一定程度的模糊性(轮廓可能不完全笔直)。

  • 图片中可能有可口可乐瓶,算法应该只检测 can !

  • 图像的亮度可能会有很大变化(所以你不能过分依赖颜色检测)。

  • 可以部分隐藏在侧面或中间,可能部分隐藏在瓶子后面。

  • 图片中可能根本没有可以,在这种情况下,您不得不找到任何内容,并写下这样的消息。



所以你最终可能会遇到这样棘手的事情(在这种情况下我的算法完全失败):





我不久前做了这个项目,并且做了很多乐趣,我有一个不错的实现。以下是有关我的实施的一些细节:


语言:使用OpenCV库在C ++中完成。[6]


预处理:对于图像预处理,即将图像转换为更原始的形式以提供算法,我使用了2种方法:



  1. 将颜色域从RGB更改为HSV,并根据红色色调进行过滤,在某个阈值以上进行过滤,以避免出现类似橙色的颜色,并过滤低值以避免暗色调。最终结果是二进制黑白图像,其中所有白色像素将表示与该阈值匹配的像素。显然,图像中仍然存在大量垃圾,但这会减少您必须使用的维度数量。

  2. 使用中值滤波进行噪声滤波(取所有邻居的中值像素值并用此值替换像素)以减少噪音。

  3. 使用Canny边缘检测过滤器在2个先前步骤之后获取所有项目的轮廓。



算法:我为此任务选择的算法本身取自这本关于特征提取的神奇书籍,称为广义霍夫变换(与常规Hough变换完全不同)。它基本上说了几件事:[7] [8] [10]



  • 您可以在不知道其解析方程的情况下描述太空中的物体(这里就是这种情况)。

  • 它可以抵抗缩放和旋转等图像变形,因为它基本上会针对比例因子和旋转因子的每种组合测试图像。

  • 它使用算法将学习的基本模型(模板)。

  • 轮廓图像中剩余的每个像素将根据从模型中学到的内容投票选择另一个像素,该像素应该是对象的中心(就重力而言)。



最后,你最终会得到一张投票的热图,例如这里所有罐子轮廓的像素都会投票给它的引力中心,所以你将在相应的像素中投入大量的投票。中心,并将在热图中看到如下峰值:





一旦你有了这个,一个简单的基于阈值的启发式可以给你中心像素的位置,你可以从中获得比例和旋转,然后围绕它绘制你的小矩形(最终的比例和旋转因子显然将相对于你原始模板)。理论上至少......


结果:现在,虽然这种方法在基本情况下有效,但在某些方面却严重缺乏:



  • 非常慢!我没有强调这一点。处理30个测试图像需要大约一整天,显然是因为我有一个非常高的旋转和平移比例因子,因为有些罐子非常小。

  • 当瓶子出现在图像中时,它完全丢失了,由于某种原因,几乎总能找到瓶子而不是罐子(也许是因为瓶子更大,因此有更多的像素,因此更多的选票)

  • 模糊图像也不好,因为投票以中心周围随机位置的像素结束,因此以非常嘈杂的热图结束。

  • 实现了平移和旋转的方差,但没有取向,这意味着没有直接面对相机目标的罐头没有被识别出来。



你能帮助我改进我的特定算法,使用专门的OpenCV 功能来解决上面提到的四个特定的问题吗?


我希望有些人也会从中学到一些东西,毕竟我认为不仅要问问题的人应该学习。 :)

最佳参考


另一种方法是使用尺度不变特征变换(SIFT)或加速鲁棒特征(SURF)来提取特征(关键点)。[11] [12]


它在OpenCV 2.3.1中实现。[13]


您可以使用 Features2D + Homography中的功能找到一个很好的代码示例来查找已知对象 [14]


两种算法对缩放和旋转都是不变的。由于它们使用功能,您还可以处理遮挡(只要有足够的关键点可见)。[15]





图片来源:教程示例


对于SIFT,处理需要几百ms,SURF的速度要快一些,但它不适合实时应用。 ORB使用FAST,其在旋转不变性方面较弱。


原始论文




  • SURF:加快强大功能

  • 独特的图像功能
    来自Scale-Invariant Keypoints

  • ORB:SIFT或SURF的有效替代方案


其它参考1


为了加快速度,我会利用这样一个事实:你不会被要求找到任意图像/物体,特别是有可口可乐标志的图像/物体。这很重要,因为这个标识非常独特,它应该在频域中具有特征性的,尺度不变的特征,特别是在RGB的红色通道中。也就是说,水平扫描线(在水平对齐的徽标上训练)遇到的红色到白色到红色的交替图案在通过徽标的中心轴时将具有独特的节奏。这种节奏将在不同的尺度和方向上加速或减速,但仍将按比例保持相同。您可以通过徽标识别/定义几十条这样的扫描线,水平和垂直扫描线以及几个对角线的扫描线,采用星爆图案。将这些称为签名扫描线。[16] [17] [18]





在目标图像中搜索此签名是一个简单的问题,即以水平条带扫描图像。寻找红色通道中的高频(指示从红色区域移动到白色区域),并且一旦找到,查看它是否跟随训练期间识别的频率节奏之一。找到匹配后,您将立即知道扫描线在徽标中的方向和位置(如果您在训练期间跟踪这些内容),那么从那里识别徽标的边界是微不足道的。


如果这不是一个线性有效的算法,或者差不多如此,我会感到惊讶。它显然没有解决你的罐装歧视问题,但至少你会得到你的标识。


(更新:对于瓶子识别,我会寻找与徽标相邻的焦炭(棕色液体) - 也就是说,在瓶子里面。或者,如果是空瓶子,我会寻找一个帽,它总是具有与徽标相同的基本形状,大小和距离,通常都是白色或红色。搜索一个纯色的椭圆形状,其中一个帽应该 be,相对于徽标。当然不是万无一失,但你的目标应该是快速找到 easy 。


(距离我的图像处理时间已经过去了几年,所以我把这个建议保持在高水平和概念上。我认为它可能会略微接近人眼的操作方式 - 或者至少我的大脑是如何操作的!)

其它参考2


有趣的问题:当我瞥了一眼你的瓶子图像时,我觉得它也是可以的。但是,作为一个人,我所做的就是告诉它不同之处在于我注意到它也是一个瓶子......


那么,为了区分罐头和瓶子,如何简单地先扫描瓶子?如果找到一个,在寻找罐头之前屏蔽标签。


如果你已经做了罐头,那么实施起来并不难。真正的缺点是它会使你的处理时间加倍。(但是考虑到现实世界的应用程序,你最终还是想要做瓶子;-)

其它参考3


即使人类在第二张图片中区分瓶子和罐子也是困难的(如果瓶子的透明区域是隐藏的)?


它们几乎是相同的,除了一个非常小的区域(也就是说,罐头顶部的宽度有点小,而瓶子的包装纸在整个宽度相同,但是稍微改变了吗?)


我想到的第一件事就是检查瓶子的红顶。但它仍然是一个问题,如果瓶子没有顶部,或者它是否部分隐藏(如上所述)。


我想到的第二件事就是瓶子的透明度。 OpenCV有一些关于在图像中查找透明对象的工作。检查以下链接。



  • OpenCV会议记录会议纪要2012-03-19 [19]

  • OpenCV会议记录会议纪要2012-02-28 [20]



特别注意这一点,看看它们检测玻璃的准确程度如何:



  • OpenCV会议纪要2012-04-24会议纪要



看他们的实施结果:[21]





他们说这是由K. McHenry和J. Ponce撰写的寻找玻璃的测地Activity轮廓框架论文的实施,CVPR 2006。[22]


它可能对您的情况有所帮助,但如果瓶子已经填满,则会再次出现问题。


所以我想在这里,您可以首先搜索瓶子的透明体,或者是横向连接到两个透明物体的红色区域,这显然是瓶子。 (理想情况下,图像如下。)





现在您可以删除黄色区域,即瓶子的标签,并运行算法以查找罐头。


无论如何,这个解决方案也有其他解决方案中的不同问题。



  1. 只有在您的瓶子是空的时候它才有效。在这种情况下,您将不得不搜索两种黑色之间的红色区域(如果可口可乐液体是黑色的)。

  2. 覆盖透明部分的另一个问题。



但无论如何,如果图片中没有上述问题,这似乎是一个更好的方法。

其它参考4


我真的很喜欢Darren Cook和堆叠器对这个问题的答案。我正在把我的想法投入到评论中,但我相信我的方法太具有答案性而不能离开这里。


简而言之,您已经确定了一种算法,以确定在太空中的特定位置存在可口可乐徽标。您现在正试图确定,对于任意方向和任意缩放因子,适用于区分可口可乐的启发式算法来自其他对象的可乐罐,包括:瓶,广告牌,广告和可口可乐所有与此标志性标志相关的用具。你没有在你的问题陈述中提出许多其他案例,但我觉得它们对你算法的成功至关重要。


这里的秘诀在于确定可以包含哪些视觉特征,或者通过负空间确定哪些特征存在于罐头不存在的其他可乐产品中。为此,当前的最佳答案概述了选择罐头的基本方法,当且仅当瓶子未被识别时,无论是通过瓶盖,液体或其他类似的视觉启发法的存在。]]


问题是这会破裂。例如,瓶子可能是空的并且没有盖子,导致假阳性。或者,它可能是部分瓶,其中包含其他功能损坏,再次导致错误检测。毋庸置疑,这不是优雅的,也不是对我们的目的有效。


为此,最正确的罐头选择标准如下:



  • 正如您在问题中勾勒出来的那样,对象轮廓的形状是否正确?如果是,请+1。

  • 如果我们假设存在天然或人造光,我们是否检测到瓶子的铬轮廓,表明这是否是由铝制成的?如果是,请+1。

  • 相对于我们的光源(光源检测的说明性视频链接),我们是否确定对象的镜面反射属性是正确的?如果是,请+1。

  • 我们可以确定关于对象的任何其他属性,将其标识为罐头,包括但不限于徽标的拓扑图像倾斜,对象的方向,对象的并置(例如,像桌子一样的平面或在其他罐子的背景下,以及拉片的存在?如果是这样,对于每个,+ 1。



您的分类可能如下所示: [27] [28] [29]



  • 对于每个候选比赛,如果检测到可口可乐标志,请画一个灰色边框。

  • 对于超过+2的每场比赛,绘制一个红色边框。



这在视觉上向用户突出显示检测到的内容,强调可能正确地被检测为损坏的罐头的弱阳性。


对每个属性的检测具有非常不同的时间和空间复杂度,对于每种方法,快速通过http://dsp.stackexchange.com对于确定最适合您的目的的最正确和最有效的算法是非常合理的。我的目的是纯粹而简单地强调通过使候选检测空间的一小部分无效来检测某些东西是否是罐头不是这个问题的最有效或最有效的解决方案,理想情况下,你应该采取相应的行动。[30]


嘿,恭喜黑客新闻发布!总的来说,这是一个非常好的问题,值得它收到的宣传。 :)[31]

其它参考5


看着形状


取一下罐子/瓶子红色部分的形状。注意瓶子的顶部是如何略微逐渐变细,而瓶子标签是直的。您可以通过比较红色部分的长度来区分这两者。


关注亮点


区分瓶子和罐子的一种方法是材料。瓶子由塑料制成,而罐子由铝金属制成。在光线充足的情况下,观察镜面反射将是从罐头标签中辨别瓶子标签的一种方式。


据我所知,这就是人类如何区分两种类型的标签。如果光照条件差,那么无论如何区分两者肯定存在一些不确定性。在这种情况下,您必须能够检测到透明/半透明瓶子本身的存在。

其它参考6


请看看Zdenek Kalal的Predator跟踪器。它需要一些训练,但它可以主动了解被跟踪物体在不同方向和比例下的看法,并实时进行![32]


源代码可在他的网站上找到。它在MATLAB中,但也许社区成员已经完成了Java实现。我已经成功地在C#中重新实现了TLD的跟踪器部分。如果我没记错的话,TLD正在使用Ferns作为关键点检测器。我使用反而是SURF或SIFT(已由@stacker建议)重新获取对象,如果它被跟踪器丢失了。跟踪器的反馈可以很容易地建立一个动态的筛选/冲浪模板列表,随着时间的推移重新启动对象具有很高的精度。[33]


如果您对我的跟踪器的C#实现感兴趣,请随时询问。

其它参考7


如果你不仅限于一个不受限制的相机,也许你可以转向使用像Xbox Kinect这样的范围传感器。通过这种方式,你可以对图像进行基于深度和颜色的匹配分割。更快地分离图像中的对象。然后您可以使用ICP匹配或类似技术甚至匹配罐的形状,而不仅仅是它的轮廓或颜色,并且假设它是圆柱形的,如果你有任何方向,这可能是一个有效的选项之前对目标进行3D扫描。这些技术通常非常快,特别是当用于解决速度问题的特定目的时。[34]


我也可以建议,不一定是为了准确性或速度,但为了好玩,你可以在你的色调分割图像上使用训练有素的神经网络来识别罐子的形状。这些速度非常快,通常可达到80/90%的准确度。虽然您需要手动识别每个图像中的罐头,但培训将是一个漫长的过程。

其它参考8


我会检测到红色矩形:RGB - > HSV,滤红色 - >二进制图像,关闭(膨胀然后腐蚀,在matlab中称为imclose)[35]


然后查看从大到小的矩形。在已知位置/比例下具有较小矩形的矩形都可以被移除(假设瓶子比例是恒定的,较小的矩形将是瓶盖)。


这将留下红色矩形,然后你将需要以某种方式检测标志,以告诉他们是否是红色矩形或可乐。像OCR一样,但有一个已知的标志?

其它参考9


这可能是一个非常幼稚的想法(或者可能根本不起作用),但所有可乐罐的尺寸都是固定的。因此,如果相同的图像同时包含罐头和瓶子,那么您可以通过尺寸考虑区分它们(瓶子会变大)。现在由于缺少深度(即3D映射到2D映射),瓶子可能会缩小,并且没有尺寸差异。您可以使用立体成像恢复一些深度信息,然后恢复原始尺寸。[36]]]

其它参考10


我不知道OpenCV,但从逻辑上看问题我认为你可以通过改变你正在寻找的图像来区分瓶子和罐头,即可口可乐。你应该加入到罐头的顶部,如果有的话可以可口可乐顶部的银色衬里,如果是瓶子,就没有这样的银色衬里。


但显然这个算法会在隐藏罐头顶部的情况下失败,但在这种情况下,即使是人类也无法区分两者(如果只有可口可乐部分的瓶子/罐头可见)

其它参考11


嗯,我实际上认为我已经某事(这就像有史以来最有趣的问题一样 - 所以尽管可以接受,但不要继续试图找到完美的答案是一种耻辱。已找到一个)...


一旦找到徽标,您的麻烦就会消失完成了。然后你只需要弄清楚徽标的 之间的差异。此外,我们希望尽可能多地做一些事情。我认为这实际上就是这个简单的部分......


徽标周围的 是什么?对于罐头,我们可以看到金属,尽管有光线的影响,但它的基本颜色不会发生任何变化。只要我们知道标签的角度,我们就可以知道它正上方是什么,所以我们正在研究它们之间的区别:





在这里,标志的上方和下方是完全黑暗的,颜色一致的。在这方面相对容易。





在这里,上面和下面的是光,但颜色仍然一致。它全银,全银金属实际上看起来非常罕见,以及一般的银色。此外,它处于一个薄的滑动位置并且足够接近已经识别的红色,因此您可以在其整个长度上追踪其形状,以计算可以被视为罐的金属环的百分比。真的,您只是需要一小部分沿着罐子的任何地方来告诉它是它的一部分,但你仍然需要找到一个平衡,确保它不仅仅是一个空瓶子,背后有金属。





最后,这个棘手的问题。但不是那么棘手,一旦我们只是通过我们可以直接在红色包装上方(和下方)看到的东西。它透明,这意味着它将显示它背后的任何东西。这很好,因为它背后的东西不可能与罐子的银色圆形金属颜色一致。它背后可能有许多不同的东西,这会告诉我们它是一个空的(或装满透明液体)瓶子,或一致的颜色,可能意味着它充满了液体或者瓶子只是在纯色的前面。我们正在处理最接近顶部和底部的东西,以及正确颜色的可能性。正确的地方相对较小。我们知道它是一个瓶子,因为它没有得到罐头的关键视觉元素,与瓶子背后的相比,它相对简单。


(最后一个是我能找到的最好的一个空的大可口可乐瓶 - 有趣的是帽子和戒指是黄色的,表明帽子的红色可能不应该依赖)


在罕见的情况下,瓶子背后有类似的银色阴影,即使在取出塑料之后,或者瓶子以某种方式填充了相同的银色液体,我们可以回到我们可以粗略估计的那样的银的形状 - 正如我所提到的,是圆形的并且遵循罐的形状。但即使我在图像处理方面缺乏一定的知识,这听起来很慢。更好的是,为什么不一次检查一下徽标的以确保那里没有相同的银色?啊,但如果在罐子后面有相同的银色呢?那么,我们确实需要更多地关注形状,再看看罐头的顶部和底部。


取决于所有这些都需要完美无瑕,它可能会非常慢,但我想我的基本概念是首先检查最简单和最接近的东西。在努力计算出其他元素的形状之前,先考虑已经匹配的形状(这似乎是最无聊的部分)周围的颜色差异。要列出它,它会:



  • 找到主要的景点(红色徽标背景,可能还有徽标本身用于定位,但如果罐子被拒绝,你需要专注于红色)

  • 通过非常鲜明的红色验证形状和方向

  • 检查形状周围的颜色(因为它快速且无痛)

  • 最后,如果需要,请确认主要景点周围的那些颜色的形状以获得正确的圆度。



如果你不能做到这一点,它可能意味着罐头的顶部和底部都被覆盖,并且人类可以用来可靠地区分罐头和瓶子的唯一可能的东西是遮挡和反射罐头,这将是一个很多更难以处理的战斗。然而,为了更进一步,你可以按照罐/瓶的角度检查更多类似瓶子的特性,使用半 - 其他答案中提到的透明扫描技术。


有趣的额外噩梦可能包括一个可以方便地坐在瓶子后面的距离,使得它的金属恰好显示在标签的上方和下方,只要你沿着红色的整个长度扫描,它仍会失败标签 - 这实际上更是一个问题,因为你没有检测到你可以拥有的罐头,而不是考虑到你实际上是在意外地检测到瓶子,包括罐头。玻璃是半空的,在这种情况下!





作为一个免责声明,我没有经验,也没有考虑过这个问题以外的图像处理,但它非常有趣,让我深入思考它,在阅读了所有其他答案后,我认为这可能是最简单的最有效的方法来完成它。就个人而言,我很高兴我不会实际上必须考虑编程这个!


修改



另外,看看我在MS Paint中所做的这张图...它非常糟糕且非常不完整,但仅仅基于形状和颜色,你可以猜到它可能会是什么。从本质上讲,这些是人们需要进行扫描的唯一内容。当你看到非常独特的形状和颜色组合如此接近时,它还有什么可能呢?我没有画的那个,白色的背景,应该被认为是任何不一致的。如果它有一个透明的背景,它可以覆盖几乎任何其他图像,你仍然可以看到它。

其它参考12


我认为,我喜欢这个挑战并想给出答案,这解决了这个问题。



  1. 提取徽标
  2. 的要素(关键点,描述符,如SIFT,SURF)
  3. 将点与徽标的模型图像匹配(使用匹配器,例如Br​​ute Force)

  4. 估计刚体的坐标(PnP问题 - SolvePnP)

  5. 根据刚体评估帽位置

  6. 做反投影并计算瓶盖的图像像素位置(ROI)(我假设你有相机的内在参数)

  7. 检查方法是否存在。如果有,那就是瓶子



检测上限是另一个问题。它可以是复杂的也可以是简单的。如果我是你,我只需检查ROI中的颜色直方图,以便做出简单的决定。


如果我错了,请给出反馈。谢谢。

其它参考13


有一堆用于识别物体的颜色描述符,下面的论文比较了很多。当与SIFT或SURF结合使用时,它们特别强大。单独的SURF或SIFT在可口可乐罐图像中不是很有用,因为它们不会识别很多兴趣点,你需要颜色信息来帮助。我在项目中使用带有SURF的BIC(边界/内部像素分类)和它非常适合识别物体。


用于Web图像检索的颜色描述符:比较研究[37]

其它参考14


我喜欢你的问题,无论是否偏离主题:P


一个有趣的一面;我刚刚完成了我的学位课程,其中我们涉及机器人和计算机视觉。我们的学期项目与你描述的项目非常相似。


我们必须开发一种机器人,使用Xbox Kinect在各种照明和环境条件下检测任何方向的焦炭瓶和罐。我们的解决方案涉及在Hue通道上结合霍夫圆变换使用带通滤波器。我们能够稍微限制环境(我们可以选择在何处以及如何定位机器人和Kinect传感器),否则我们将使用SIFT或SURF变换。


你可以在关于这个主题的博客文章中阅读我们的方法:)[38]

其它参考15


您需要一个程序,从经验中有机地学习和提高分类准确性。


我将建议深度学习,深入学习这将成为一个微不足道的问题。


您可以在Tensorflow上重新训练初始v3模型:


如何重新制定新类别的最终层次。[39]


在这种情况下,您将训练卷积神经网络将对象分类为可口可乐可以与否。

其它参考16


深度学习


收集至少几百个含有可乐罐的图像,注释它们周围的边界框作为正面类,包括可乐瓶和其他可乐产品标记它们的负面类别以及随机对象。


除非您收集非常大的数据集,否则请执行针对小型数据集使用深度学习功能的技巧。理想情况下使用支持向量机(SVM)与深度神经网络的组合。


一旦您将图像提供给先前训练的深度学习模型(例如GoogleNet),而不是使用神经网络的决策(最终)层来进行分类,请使用先前的图层数据作为功能来训练您的分类器。


OpenCV和Google Net:
http://docs.opencv.org/trunk/d5/de7/tutorial_dnn_googlenet.html[40]


OpenCV和SVM:
http://docs.opencv.org/2.4/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html[41]

其它参考17


作为所有这些不错的解决方案的替代方案,您可以训练自己的分类器并使您的应用程序对错误具有鲁棒性例如,您可以使用Haar Training,为您的目标提供大量正面和负面图像。[42]


仅提取罐头可以是有用的,并且可以与透明物体的检测结合使用。

其它参考18


回答这个问题已经晚了几年。随着CNN在过去5年中将技术发展到极限,我现在不会使用OpenCV来完成这项任务!(我知道你在问题中特别想要OpenCv功能)我觉得与OpenCV功能相比,对象检测算法(如Faster-RCNN,YOLO,SSD等)可以显着提高这个问题。如果我现在解决这个问题(6年后!!)我绝对会使用更快 - RCNN 即可。

其它参考19


MVTec有一个名为HALCON的计算机视觉软件包,其演示可以为您提供良好的算法思路。有很多类似于您的问题的示例,您可以在演示模式下运行,然后查看代码中的运算符,并了解如何从现有的OpenCV运算符实现它们。 [43]


我已经使用这个包快速为这样的问题制作复杂算法原型,然后找到如何使用现有的OpenCV功能实现它们。特别是对于您的情况,您可以尝试在OpenCV中实现运算符find_scaled_shape_model中嵌入的功能。一些运营商指出有关算法实现的科学论文,这有助于找出如何在OpenCV中做类似的事情。希望这会有所帮助... [44]

其它参考20


如果您对它是实时感兴趣,那么您需要的是添加预处理过滤器以确定使用重型内容扫描的内容。一个好的快速,非常实时的预处理过滤器,可以让你扫描更可能是可口可乐的东西,而不是在转移到更多的东西之前是这样的:搜索图像以寻找最大的补丁与可口可乐的sqrt(pow(red,2) + pow(blue,2) + pow(green,2))相比具有一定耐受性的颜色。从非常严格的颜色容差开始,逐步实现更宽松的颜色容差。然后,当您的机器人在规定的时间内用完以处理当前帧时,它会将当前找到的瓶子用于您的目的。请注意,您必须调整sqrt(pow(red,2) + pow(blue,2) + pow(green,2))中的RGB颜色才能使它们恰到好处。


此外,这似乎真的很愚蠢,但你确定在编译C代码时打开-oFast编译器优化?

其它参考21


我要寻找的第一件事就是颜色 - 就像RED一样,在图像中进行红眼检测时 - 有一定的颜色范围需要检测,考虑周围区域的一些特征,如距离另一只眼睛的距离。确实在图像中可见。


1:第一个特征是颜色,红色是非常主导的。在检测到可口可乐红之后,有几个感兴趣的项目
1A:这个红色区域有多大(是否有足够的数量来确定真实的能否--10个像素可能还不够),
1B:它是否含有标签的颜色 - 可口可乐或波浪。
1B1:是否足以考虑它是一个标签的概率很高。


第1项是一种捷径 - 如果图像中存在鼻涕,则进行预处理 - 继续进行。


所以,如果是这种情况,那么我可以利用我的图像片段并开始更多地缩小相关区域 - 基本上看看周围的区域/边缘......


2:给定上述图像区域IDd in 1 - 验证所讨论项目的周围点[[边缘]]。
- 答:有没有看起来可以顶部或底部 - 银?
B:一个瓶子看起来可能是透明的,但玻璃桌也是如此 - 玻璃桌/架子或透明区域也是如此 - 如果是这样的话,有多种可能出来。一个瓶子可能有一个红色的帽子,它可能没有,但它应该具有瓶盖/螺纹螺丝的形状,或帽子。
C:即使A和B失败,它仍然可以是一个部分..
当它是部分的时,这会更复杂,因为部分瓶子/部分可能看起来相同,因此一些边缘到边缘的红色区域测量的更多处理。小瓶子的大小可能相似。


3:经过上面的分析,我会看到刻字和波浪标识 - 因为我可以找到单词中的一些字母,因为你可能没有所有的文字,因为没有全部的可以,波将在某些点与文本对齐(距离方向),因此我可以搜索该概率并知道在距离x处波的那个点应该存在哪些字母。

其它参考22


可能晚了太多年了,但不过是一个尝试的理论。


红色标识区域的边界矩形与瓶子/罐的整体尺寸的比率是不同的。在罐子的情况下,应该是1:1,而瓶子的不同(有或没有盖子)。
这应该可以很容易地区分这两者。


更新:
由于它们各自的尺寸差异,徽标区域的水平曲率在罐头和瓶子之间将是不同的。如果您的机器人需要拿起罐子/瓶子,并且您相应地决定了握把,这可能特别有用。

其它参考23


您可以随时训练HAAR级联分类器,这是opencv支持的。您可以使用瓶子,罐子等正面样品,检测不同标签的古柯物品!


在这里,您可以采取一些有用的链接,帮助您进行培训。