Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用OpenCV进行零件识别/分类_Opencv_Image Processing_Computer Vision_Emgucv - Fatal编程技术网

使用OpenCV进行零件识别/分类

使用OpenCV进行零件识别/分类,opencv,image-processing,computer-vision,emgucv,Opencv,Image Processing,Computer Vision,Emgucv,我刚刚开始探索OpenCV和EmguCV.NET的包装器,需要了解其功能的大局的人提供一些一般指导,也许还有那些已经完成了类似于我需要完成的任务的人 我会有一系列的静态照片,在每一张图片中都会出现一个物体或什么都没有。这些物体是金属硬件(螺栓)的碎片,其长度与图像的顶部/底部平行(即,图片是从上方拍摄的)。如果有一个物体,它将是大约100种离散类型的螺栓中的一种,有些具有非常相似但不完全相同的特征和尺寸。例如,它们的外形大部分为矩形,但长度和宽度(直径)不同,可以有六角形或圆形的封头(在外形上分

我刚刚开始探索OpenCV和EmguCV.NET的包装器,需要了解其功能的大局的人提供一些一般指导,也许还有那些已经完成了类似于我需要完成的任务的人

我会有一系列的静态照片,在每一张图片中都会出现一个物体或什么都没有。这些物体是金属硬件(螺栓)的碎片,其长度与图像的顶部/底部平行(即,图片是从上方拍摄的)。如果有一个物体,它将是大约100种离散类型的螺栓中的一种,有些具有非常相似但不完全相同的特征和尺寸。例如,它们的外形大部分为矩形,但长度和宽度(直径)不同,可以有六角形或圆形的封头(在外形上分别为矩形或圆形的小段),也可以有锥形封头用于沉头应用。我所说的零件类型的说明(这只是为了显示零件类型-我的图像是单个零件的照片):


(来源:)

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

如果有关系,我可以很好地控制以下方面:

  • 照明(但背景照明并不实用)
  • 背景的外观(可能对背景减法有用?)
  • 从摄影机到对象的距离(将显示相同的对象) 在图像中始终显示相同的大小)
  • 通常,螺栓的位置-它将水平放置在 其侧面与图像的上/下边缘平行 框架我无法控制它的头是向左还是向右 形象
不幸的是,我找不到任何直接说明我需要做什么的在线论文或文章,但有很多说明了一些更简单的任务,如找到一个彩色球或找到矩形。我找不到任何东西来识别和分类大量不同但相似的形状。我有两本推荐的OpenCV书籍,虽然它们很棒,但似乎没有解决这个问题

我已经在我的样本图像上发现了非常干净、精明的边缘,但由于照明,零件内部有很多噪音。这使得寻找干净的Hough线段有点参差不齐

我不确定是否应该尝试使用通过测量Canny边缘计算的绝对尺寸来缩减可能匹配的列表-然后使用更健壮的方法,如级联分类器。。。?或者什么

我真的只是在寻找某人对总体战略或正确方向的观点

有人能给我一些东西让我开始尝试吗?我真是不知所措


谢谢

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

对于这个问题,我建议您首先保持暗背景,以便有必要对该图像进行二值化。然后,如果是俯视图,你可以看到一个圆,六边形等,然后只得到边。然后得到一个最小的边界圆并得到它的直径。可以得到求最小包围圈的算法和代码

就形状而言,我建议你取二值图像的梯度,然后只在边缘点(你在俯视图中得到的)计算梯度的角度。该梯度的直方图将成为您的特征向量。请参见不同形状的条形图。如果你的大脑能够辨别,那么你就可以考虑使用哪个分类器。我现在不想评论这一点,因为这取决于很多因素,比如特征的分布、它们的可分性以及最重要的速度要求。但是现在不要担心分类器

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

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


请回答一个好问题。

您的问题是典型的模式识别任务。 在您的场景中,我将使用形状描述符,然后使用它进行识别。本文描述了一种有趣的方法


作者之一我们的吉坦德拉·马利克(Jitendra Malik)是我几个月前参加的一门有趣的计算机视觉课程的老师。

哼,如果纯粹用相机完成,这听起来像是一个噩梦般的3人/月(或更多)的软件开发项目。你不能得到额外的信号吗?如今,带数字读数的电子秤很便宜,而且可能会大大减少搜索空间。你知道,计算机视觉的第二定律:“没有一个计算机视觉问题不能用足够的硬件来解决。”——)考虑除了图像特征之外添加其他特征来“剔除”一个实例可能/可能不是什么。我想到的是重量。但正如其他人所说,你是这一领域的专家,因此你需要成为提出建议的人