我已经在过去的几年中最值得关注的项目之一是关于图像处理的项目。目标是开发一个系统,以便能够识别可口可乐(请注意,我要强调的那样罐一词会看到这么做的原因)。您可以看到,下面的示例可以识别与缩放和旋转的绿色矩形中。

Template matching

在该项目上的一些限制︰

  • 背景可以是非常嘈杂。
  • 可以造成任何缩放旋转或甚至方向 (在合理限制)。
  • 图像可能有某种程度的模糊度 (轮廓不可能完全直)。
  • 在图像中,可能有可口可乐瓶和应该首先可以只检测算法!
  • (因此不能信赖"太多"对颜色进行检测) 的图像亮度可能会得有所不同。
  • 可以被部分隐藏在中间或两侧并可能部分隐藏于瓶。
  • 可能有不可以在所有图像中,您必须查找执行任何操作并写入一条消息说,在这种情况下。

因此您最终可能会得到此类棘手事情 (这在这种情况下没有完全失败我算法)︰

Total fail

我以前,了此项目,具有无穷的乐趣,做它,和我有一个不错的实现。以下是一些有关我实现的详细信息︰

语言︰ 在 c + + 使用OpenCV库中完成的。

预处理︰ 预处理,即转换算法使窗体更原始图像的图像,使用 2 的方法︰

  1. RGB 颜色域更改为HSV和筛选基于"红色"色相,饱和度超过某一阈值以避免类似橙色的颜色和过滤的低值,以避免暗色调。最终结果是一个二进制的黑白图像,所有的白色像素表示匹配此阈值的像素位置。显然还有大量至极,在图像中,但这将减少需要处理的维度数。Binarized image
  2. 使用 (采取的所有邻居中间像素值和像素替换此值) 的中间过滤噪音筛选以减少噪音。
  3. 使用Canny 边缘检测筛选器2 引用单元格的步骤之后获得的所有项目的轮廓。Contour detection

算法︰ 对于此任务是取自本书超在特征提取上,称为通用 Hough 变换(非常不同于常规的 Hough 变换) 选择的算法本身。它基本上说几件事︰

  • 无需知道其分析公式 (这是这种情况),可以描述空间中的对象。
  • 它基本上将测试您的图像为每个组合的比例因子和旋转因子,它是抵抗图像的缩放和旋转,如变形的思路。
  • 它使用该算法将"学习"的基础模型 (模板)。
  • 另一个像素,它认为将为对象,根据它从模型学习中心 (根据引力) 投票将剩余轮廓图像中每个像素。

最后,您会得到热量地图的投票,例如此处所有为其引力中心进行投票可以轮廓的像素,因此会有很大的投票中相同的像素对应于中心,并将看到如下所示的热图中的峰值︰

GHT

一旦有了它,简单的基于阈值的启发式算法可以使您可以从中派生的缩放和旋转,然后绘制小矩形周围 (最终的缩放和旋转因子则显然是相对于原始模板) 的中心像素的位置。从理论上讲,至少...

结果︰ 现在,虽然这种方法处理在基本情况下,它已严重缺乏安全性在某些领域中︰

  • 它是非常慢的 !我不紧张这不够。几乎一整天的需要显然处理 30 测试图像,因为由于一些罐非常小,因此有很高的旋转和平移,比例因子。
  • 它完全时丢失了瓶是在图像中,并且几乎总是找到可以代替瓶由于某种原因 (也许是因为瓶子更大,因此没有像素越多,因此更多的选票)
  • 模糊的图像也不是好的因为投票中的最后像素随机位置围绕的中心,从而结束以非常嘈杂的热量地图。
  • 已实现差异在平移和旋转,但不是在的方向,即不直接面临照相机目标可以不可识别。

可以帮助我提高我的具体算法,使用独占 OpenCV功能,要解决的四个特定问题提到吗?

我希望有些人还将了解其内容,毕竟,我不认为只提出问题的人应该了解。:)

2012-04-16 04:23:16
问题评论:

它可能会说,这个问题是 dsp.stackexchange.com,或 stats.stackexchange.com,更适合,当然应该考虑重新询问这些站点太。

第一件事,说是要分析为什么会发生不同的故障情况。例如,隔离属于其中瓶获胜,可模糊的图像的位置等,并执行一些统计分析,以了解其 Hough 表示形式之间的区别希望它会检测。一些了解替代方法的好地方是这里这里

@stacker 会好点。速度要获得廉价计算功能,如渐变方向的直方图。其实天真第一种方法是手动标记可中的矩形的某些培训图片,一堆和用这些加上随机的负面例子来训练 SVM 或决策树分类器。培训将需要较长时间,但新颖的图像上的执行将会快得多。我计划要编写此方法时得到更多的自由时间包含正确的引用。

怎么样给reCAPTCHA类似的方法? ;)

为什么是这从迁移dsp.stackexchange.com该站点将有比 stackoverflow o_O 更好配合起来

回答:

另一种方法是提取功能 (keypoints) 使用比例不变特征变换(SIFT) 或加速了最强大的功能(冲浪)。

它是在OpenCV 2.3.1 中实现的。

您可以找到很好的代码示例使用Features2D + Homography,查找已知的对象中的功能

这两种算法都与缩放和旋转。由于它们处理的功能,还可以处理封闭(只要足够 keypoints 是可见的)。

Enter image description here

图像源︰ 教程示例

处理所少数几百毫秒 SIFT,冲浪是位速度较快,但它不适合于实时的应用程序。ORB 使用快速旋转不变性就是不够安全。

原始的论文

听起来很有趣。不该算法还处理方向不变性 (即如果可以不直接面对摄像机的目标)?这是我的算法在什么位置出错的要点之一。

我同意 @stacker 的筛选是一种很好的选择。它是非常强大的缩放和旋转操作的功能。它是有点透视变形对强健 (可改善堆栈器按照建议︰ 不同角度视图所需的对象的模板数据库)。强光照变化和非常昂贵的计算是其致命的弱点在我的经验。我不知道任何 Java 实现。我是 OpenCV 实现的注意,我使用了 GPU c + + /cli 窗口 (SiftGPU) 实现适合于实时性能。

记下的警告︰ 如同我喜欢 SIFT/冲浪和他们给我做,它们是专利收取押金。可能这是一个问题,根据多个条件,包括 AFAIK 的地理位置。

OpenCV 的 ORB 或狂这没有专利的问题,因此请尝试。ORB 是比 SIFT 快得多。很有点差比例的 ORB 和浅色变我的经验,但自己测试。

如何可以接受该为答案...无功能描述符可以区分从罐瓶.他们都是刚查看固定本地模式描述符。我同意,SIFT 冲浪,ORB、 狂等可以帮助您在特征匹配,但.如 occlusions,瓶子 vs 可以等其他部件的问题呢。我希望这不是一个完整的解决方案实际上如果您将 GOOGLED 问题可能第一个结果将是仅此答案。

要加快速度,我就利用一个事实,即不要求您查找任意图像/对象,但特别与可口可乐徽标。这是重要的因为此徽标是非常有特色,并且应在频率域中,特别是在红色 RGB 通道有特征、 比例不变特征码。也就是说,红色-到-白-到-红用水平扫描线 (培训上水平对齐的徽标) 时遇到的交替模式将具有独特的"节奏"通过徽标的中心轴。旋律将"加速"或者"降低"在不同比例和方向,但仍按比例相当。您可以标识/定义几个几十个此类而言,水平和垂直两个方向通过徽标和几个更斜,爆炸形图案中。称这些"签名扫描线"。

Signature scan line

搜索此目标图像中的签名非常简单,只需扫描的图像在水平条中。寻找红色通道 (表明从红色区域移动到一个白色) 中, 高频和一次发现,是否它跟在培训课程中确定频率节律之一,请参阅。一旦找到匹配项,则会立即知道扫描线的方向和徽标中 (如果您跟踪的那些事情在训练过程中),因此识别边界从那里徽标的位置是一件小事。

我真的会觉得如果这不是一个线性高效算法,或者几乎使。显然不能解决您可以瓶不平等待遇,但至少您将有您的徽标。

(更新︰ 瓶识别我会寻找 coke (褐色液体) 靠近徽标 — 即内侧的瓶子。或者,如果是空瓶,我将寻找始终具有相同的基本形状、 大小和距离徽标并通常是所有白色或红色。其中上限是,相对于徽标的纯色 eliptical 形状中搜索。不可靠,当然,但此处的目标应该是找到那种简单快速.)

(它已几年以来我图像处理的日子,因此我保留此建议,高级别和概念。我认为它可能稍有接近人眼可能的运作方式,还是如何,至少我的大脑里 !)

这是一个很好的建议,我特别喜欢的即使其可能会有许多的漏报,这种算法应该是速度非常快,这一事实。我隐藏的目标之一就是使用该检测中实时自动装置,所以这可能是好的折衷方案 !

是的它经常被忽略 (在精度表征一个字段)的近似算法最实时的、 现实世界建模的任务至关重要。(我基于我论文这一概念)。保存时间要求苛刻有限区域 (来修剪误报) 的算法。请记住︰ 在机器人中你通常不局限于单个图像。假设一个移动机器人,快速 alg 可以在更短的时间完善的 algs 花费在一个上,大大降低了漏报搜索几十个来自不同角度的图像。

我喜欢非常快速检测的可口可乐徽标使用哪些量与条码扫描器的想法。+ 1 !

寻找签名的问题,在这种情况是,如果我们可以到另一端,即隐藏该签名,该算法可能无法检测到可以。

@karlphillip︰ 如果隐藏的签名,如徽标,然后基于寻找徽标的任何方法将失败。

有趣的问题︰ 在我看了一眼瓶图像时我以为这太是一罐。但是,作为人类,我未告知的区别是,我再注意到它也是瓶子...

因此,要告诉罐,瓶,首先瓶怎么样只需扫描吗?如果您找到一个掩盖之前寻找罐的标签。

不太硬,来实现如果您已经做袋 3 公斤。真正的缺点是它两倍的处理时间。(但前瞻思维到现实世界的应用程序,你可能想要执行仍在;-) 瓶攒

是我已经想了太,但没有足够的时间来做它。您如何将识别瓶,因为主要部分看起来是缩放可以?我在想寻找红色插头,对准饮水的中心,但它似乎并不是非常稳定。

如果有一个红色的帽 (或环) 平行的"可口可乐"很可能是瓶子。

@linker 如何未训练您的算法对于罐?有罐的例子了吗?如何培训与瓶的例子?

这种算法的优势是,您只需要一个模板来训练,并将所有的变换,使其与其他潜在的罐。在使用此模板版本 binarized 和基于轮廓线的训练,使之间的唯一区别可以和瓶子就是即插即用,但我很担心因为引力中心都是在某处的边缘上或在瓶外,它将带来更多误判。值得为它我想一试。但会加倍我处理的时间,我要哭;)

实质上这是一个合理的方向。我会表达略有不同︰ 先找到所有候选人,并为每名候选人确定是瓶子、 易拉罐或停下手中的。

并不难甚至供人们区分瓶,并在第二个图像可以 (只要瓶子的透明区域被隐藏)?

它们是除少数地区之外几乎相同 (即,可以顶部宽度是小瓶包装时是相同的宽度,整个右边的次要更改但?)。

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

我认为第二件事是关于瓶子的透明度。OpenCV 有一些适用于查找图像中的透明对象。检查下面的链接。

尤其是看此事件可查看它们如何准确地检测玻璃︰

看到其实现的结果︰

Enter image description here

他们说它是在纸张的实现"A Geodesic Active Contour Framework for Finding Glass" by K. McHenry and J. Ponce, CVPR 2006.(下载白皮书).

它可能有助于您的案例得有点但如果瓶子已经再次出现问题。

所以我认为此处,您可以搜索瓶的透明体首次或横向连接到两个透明的红色区域显然是瓶子。(当理想情况下,图像,如下所示。)

Enter image description here

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

不管怎样,此解决方案也有不同的问题,像在其他解决方案中。

  1. 它只有您的瓶子是空的。在这种情况下,必须搜索之间两个黑颜色的红色区域 (如果可口可乐液体是黑色的)。
  2. 如果透明部件属于另一个问题。

但不管怎样,如果没有任何图片中的上述问题,这似乎是更好的方法。

我想过,这并是以我的方式来实现这种方法 + 1。但是,@linker 应共享他的图像集以便我们可以尝试做更多的猜测。

是的。。我太想念它好,是否有更多的图像。

我知道这是旧的文章。链接到分钟似乎是死。任何人都没有对它们的引用吗?

已更新的链接。.

我的确很喜欢Darren 库可集纸器的回答这个问题。我以前在转换为注释上,引发我的想法,但我认为我的做法是太答案形不离开这里。

以短摘要,您已经标识了一个算法来确定在空间中的特定位置不存在可口可乐标志。您现在正在尝试进行任意方向和任意比例因子,确定适用于其他对象,包括区分可口可乐启发︰广告牌广告可口可乐医药所有与此图标的徽标。您问题的语句,在许多其他情况下没有调用,但是我认为它们对您的算法的成功至关重要。

这里的秘密在于确定可以包含哪些可视化功能,或通过负空间,哪些功能会出现其他 Coke 产品中不会出现罐。为此,当前顶部回答草绘出选择"can"如果并仅当未标明"瓶子",通过存在的瓶帽,液体或其他类似的视觉试探法的基本方法。

问题是该换下。例如,瓶子可能为空并且缺乏存在一个上限,从而导致假阳性。或者,它可能是其他功能出错,从而再次导致误检测部分的瓶子不用说,这不是典雅的也不是有效出于我们的目的。

到此结束,似乎是以下罐的最正确的选择条件︰

  • 草在问题中,作为对象侧面观是正确的?如果是这样,+ 1。
  • 如果我们假定自然或人造光的存在,我们检测到指示这是否由铝瓶镶边大纲?如果是这样,+ 1。
  • 我们确定反射的属性的对象是正确的相对于我们光源 (光源检测演示视频链接) 吗?如果是这样,+ 1。
  • 我们可以确定有关对象标识为罐装,包括但不是限于徽标的拓扑图像扭曲,对象的方向时,juxtaposition 的对象 (例如,在一个平面如表或其他罐的上下文中),以及金属拉片是否存在任何其他属性?如果是这样,对于每个,+ 1。

您的分类可能然后如下所示︰

  • 每个候选的匹配,如果检测到存在的可口可乐标志,绘制一条灰色边框。
  • 通过 + 2 的每个匹配,绘制一个红色边框。

这从视觉上突出显示给用户所检测到,强调正确,可能会被检测为重整罐的弱阳性。

检测到的每个属性带来了非常不同的时间和空间的复杂性,因而对于每种方法, http://dsp.stackexchange.com快速传递是多合理确定对您而言的最正确和最有效的算法。我这样做的意图是,纯粹和简单,强调检测是否由作废的候选检测空间的一小部分可以不是最强大或最有效解决这一问题,并在理想情况下,您应据此采取相应的措施。

嘿,恭喜上黑客新闻发布 !总的来说,这是影响的值得它收到形象非常可怕问题。:)

这是有趣的方法,这样至少值得一试,我的确很喜欢您在该问题上的理由

这是的我在想什么︰ 不排除特定种类的假阳性。规则中的特质更多功能 coke 可以。但我想知道︰ 怎么办关于 squished 可以?我的意思是,如果您单步执行 coke 罐装上仍不失为 coke 罐装。但它再也不会具有相同的形状。或者是 AI 完成该问题?

请输入您的翻译

Image Processing: Algorithm Improvement for 'Coca-Cola Can' Recognition

确认取消