在未知尺度的图像中寻找简单的模板

Posted

技术标签:

【中文标题】在未知尺度的图像中寻找简单的模板【英文标题】:Finding simple template in image of unknown scale 【发布时间】:2013-02-04 19:52:11 【问题描述】:

我有一个地板布局(相当简单,白色背景,黑色内容)和地板上的椅子模板。我知道我需要寻找的所有方向(简单的上、下、左、右),但我不知道进来的地板模板的比例。

我让它与 AForge 一起工作,当我从布局中复制椅子时,我知道确切的比例,我可以找到地板上的所有椅子。这正是我想要的(我只需要椅子的中心 x,y)。展望未来,我想自动化这个。我不知道正在上传的平面图的确切比例

我使用 Emgu.CV 示例尝试找到它(SURFFeature 示例项目),但仅使用椅子作为模板不起作用。我认为它似乎没有找到任何观察到的描述符(它为空),因为椅子本身并不太复杂。我尝试了一个更复杂的模板(椅子+桌子,虽然它不能正常工作,因为椅子相对于桌子不一致)。结果似乎没有用,它指向平面图上的一些随机位置,但似乎不太正确。

关于确定比例的方法有什么想法吗?

【问题讨论】:

哎呀,对不起!我有一个关于扩大规模的想法——因为 AForge 有一个很好(而且速度很快)的形状检测器,我可以让我们的其他团队在 AutoCAD 文件中添加一些特殊的形状,其中包含一把椅子。我会知道椅子的形状和尺寸的正常尺寸边界框,然后我可以根据外部物体上边界框的百分比变化来缩放椅子。那么我的问题是,什么是 AForge 易于找到的形状,它足够独特,不会与平面图中的某些东西混淆……我最初的想法是星形形状(四分)。想法? 【参考方案1】:

使用错误的刻度,读数不准确。这可能会导致包装重量被误印在由地面秤而不是天平制成的谷物盒上。这是因为这些尺度上的精确度是不同的,以适应企业的不同需求。而且,通过使用不同的校准方法,这可能会导致相同产品在地秤上测量时的重量与计数秤上的重量不同。

【讨论】:

【参考方案2】:

好的,我能够让它工作。我最终做的是在一个圆圈内画一个正方形并将我想要的对象放在正方形内

然后我使用:Blob[] blobs = blobCounter.GetObjectsInformation( ); 来获取页面上的所有 blob。

遍历blob并查找所有圆形和正方形,将它们添加到每个列表中

 if (shapeChecker.IsCircle(edgePoints, out center, out radius))
 
     circs.Add(b);
 
 else if (corners.Count == 3)
    tris.Add(b);
 else if (corners.Count == 4)
    boxes.Add(b);

遍历每个圆,每个圆的所有正方形,并寻找两个中心点大致相同的。

为了得到里面的对象,我从正方形内部复制图像的裁剪(在 x,y 上添加一些,从宽度、高度中删除一些)。这给了我正方形内的空白空间和对象

然后我使用自动裁剪(来自here,虽然因为我不需要旋转/灰度而进行了修改)来切掉空白区域,只剩下我想要的图像!

抱歉,我没有示例图片 - 我还没有足够的代表来发布它们

【讨论】:

以上是关于在未知尺度的图像中寻找简单的模板的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV-Python之——图像SIFT特征提取

opencv 模板匹配,在图像中寻找物体

OpenCV中一种尺度不变的模板匹配方案

第一篇 特征提取以及openvslam中的相关实现详解

OpenCV 学习笔记(模板匹配)

寻找局部最大值灰度图像opencv