7

我刚刚开始探索 OpenCV 和它的 EmguCV .NET 包装器,需要了解其功能大图的人的一些总体指导,也许那些已经解决了与我需要完成的任务类似的任务的人。

我将有一系列静态照片,在每张图像中都会出现一个物体或什么都没有。这些物体是金属硬件(螺栓),将侧放,长度平行于图像的顶部/底部(即,图片是从上方拍摄的)。如果有一个对象,它将是大约 100 种不同类型的螺栓中的一种,其中一些具有非常相似但不相同的特征和尺寸。例如,它们的轮廓大部分都是矩形,但长度和宽度(直径)会有所不同,并且头部可以是六边形或圆形(在轮廓中分别被视为矩形或圆形的小段) ) 或将有用于埋头孔应用的锥形头。零件类型的插图 I'

插图
(来源:donsnotes.com

我需要对它们进行分类,以便区分所有尺寸和类型。1-3/8" 螺栓应归类为与 1-1/2" 螺栓不同,即使它们具有相同的直径和相同的头部类型。尺寸之间的最小长度差异为 1/8 英寸,而不是标准的 1/16 英寸。

如果重要的话,我可以很好地控制以下内容:

  • 照明(但背光不实用)
  • 背景的外观(可能对背景减法有用?)
  • 从相机到物体的距离(相同的物体在图像中总是显示为相同的大小)
  • 通常,螺栓的位置 - 它将水平放置在其侧面,与图像帧的顶部/底部边缘平行。我无法控制它的头部在图像中是向左还是向右。

不幸的是,我找不到任何直接解决我需要做的事情的在线论文或文章——但有很多可以说明更简单的任务,比如寻找彩色球或寻找矩形。我找不到任何关于识别和分类大量不同但相似的形状的东西。我确实有两本推荐的 OpenCV 书籍,虽然它们很棒,但它们似乎并没有解决这个问题。

我在示例图像上发现了相当干净的 Canny 边缘,但由于照明,零件内部有很多噪点。这使得寻找干净的霍夫线段有点参差不齐。

我不确定是否应该尝试使用通过测量 Canny 边缘计算的绝对尺寸来减少可能匹配的列表 - 然后使用更强大的东西,如级联分类器......?要不然是啥。

我真的只是在寻找某人对一般策略或正确方向的看法......

谁能给我一些东西让我开始尝试?我真的很茫然。

谢谢!

4

2 回答 2

4

根据我的经验,我建议你以下。你比我们大多数人都知道如何手动分类,对吧?所以想一想当你分类时你的大脑会发生什么。假设,您从顶视图看到一个圆形,那么现在您的问题变成了如何识别该形状?在这里发布这样的问题,对其他人来说会容易得多。特征提取只不过是当你看到那个物体时大脑的想法。

对于这个问题,我建议您首先保持深色背景,以便有必要对该图像进行二值化。然后,如果它是顶视图,您可以看到圆形、六边形等。然后只得到边缘。然后得到一个最小边界圆并得到它的直径。找到最小边界圆的算法和代码可以在这里获得。

就形状而言,我建议您对该二进制图像进行渐变,然后仅在边缘点(您在顶视图中获得)计算该渐变的角度。该梯度的直方图将是您的特征向量。查看不同形状的条形图。如果你的大脑可以区分,那么你可以考虑使用哪个分类器。我现在不想对此发表评论,因为它取决于很多事情,例如特征的分布、它们的可分离性以及最重要的速度要求。但是现在不用担心分类器。

现在,让我们尝试解决高度问题。我假设您可以获得前视图,然后只需计算边界框(您可以从regionpropsMATLAB 中的函数中获得)。

请注意,我只是在想象和谈论所有这些事情。您必须先按照我在第一段中所说的去做,然后看看答案的其他部分是否对您有意义。我假设您具有一定的数学背景来理解此答案中的某些术语。如果没有,请不要犹豫,问。

PS +1 提出了一个好问题。

于 2013-03-20T09:42:14.510 回答
4

您的问题是典型的模式识别任务。在您的场景中,我将使用形状描述符,然后将其用于识别。论文“Shape Matching and Object Recognition using Shape contexts”中描述了一种有趣的方法。

作者之一 Jitendra Malik 是我几个月前参加的一个有趣的coursera计算机视觉课程的老师。

于 2013-03-20T22:19:07.413 回答