从现有模型创建OpenCV Haar分类器

时间:2014-04-17 18:01:07

标签: java android c++ opencv object-detection

我想制作一个识别螺丝的应用程序。 每个螺丝尺寸和形状都有一个标准,有软件可以提供每个螺丝的360 3d模型(例如Autocad)

我想知道是否有任何方法可以使用现有模型(某些扩展名)并从中创建Haar classifier

如果不清楚,我不想拍摄每张模特的数千张照片。我想以某种方式重用现有的模型

由于

2 个答案:

答案 0 :(得分:4)

简而言之:除非您能够根据不同的光照条件逼真地渲染3D模型,否则我认为不可能。

Haar和LBP分类器确实使用了某种纹理信息,所以纯粹的形状信息不够,afaik。 (因此,不是HAAR,HoG可能或可能不适合这种方法)

对于haar分类器训练,您可以使用不同的材质和光照条件以及各种姿势渲染3D模型。您需要背景图像作为负片样本和渲染螺丝的背景(但您也可以将螺丝合并到背景中,然后使用opencv_createsamples工具)。

因此,根据您能够渲染screews的现实或适当程度,您可以将它们用于训练。请记住,实际上,两个相同类型的螺钉看起来并不完全相同,长度可能会有少量变化(取决于生产质量),并且可能会出现变形或“噪音”。可能存在与完美模型不同​​的毛刺,也许你必须在渲染中考虑它。

另外,请记住,如果haar和lbp级联分类器仅从单个姿势(如正面或轮廓面,而不是同时覆盖两个类)覆盖一个类,则效果最佳,这会减少使用签名3D模型。

有时,3D模型可以与倒角匹配结合使用,以将它们与2D模型进行比较。

答案 1 :(得分:3)

哈尔分类器用于2D图像,用于训练和识别。它需要一组标准化的正2D图像(带螺钉)和一组标准化的负2D图像(无螺钉)来训练分类器。因此,如果这是您的问题,则无法使用3D模型直接进行培训。当然,您可以使用3D模型渲染2D图像,但正如我在您的问题结束时理解您的评论,这不是您想要做的。

此外,根据您的实际任务,哈尔分类器不太可能是您选择的方法。一些重要的问题是:你能分割图像中的螺丝吗?图像中可以有几个螺丝吗?它是分类任务还是您知道图像中存在哪种螺钉类型?您需要本地化还是仅仅是认可?螺钉的可能姿势是否受限制(或者由于分割而可以预先标准化)?

请注意,Haar分类器用于“学习”具有相似姿势的类的不同实例的外观变化(如不同人的或多或少的直立面部,即面部检测),而不是用于处理完全不同的姿势。相同的对象,甚至不是2D,甚至不谈3D。所以它可能只适用于非常有限的情况。

<强>更新 一些提示可以引导您进入正确的方向:

  1. 如果您可以分割螺钉并想尝试一种简单的方法,请尝试将其视为2D问题(假设螺钉不能直立)并根据图像矩进行标准化。

  2. 如果您可以对螺丝进行分段并希望将其视为2D / 3D问题(投影到2D图像的3D模型),则可以高效地查看我的(现在旧的)research基于外观的匹配与使用3D模型生成的视图。

  3. 如果您无法分割螺丝并且您知道图像中存在哪种类型的螺钉,您可以从工业机器视觉库(例如工业机器视觉库)中查看所谓的几何图案匹配。来自Halcon的基于形状的匹配。它也提供类似CAD数据的培训。

  4. 如果您无法分割螺丝并且您不知道图像中存在哪种类型的螺钉,则可以为分类任务训练深度卷积神经网络,然后使用3.进行验证和本地化。