检测图像中圆圈和十字的位置

Posted

技术标签:

【中文标题】检测图像中圆圈和十字的位置【英文标题】:Detecting the locations of circles and crosses in an image 【发布时间】:2016-10-12 16:17:06 【问题描述】:

我是 OpenCV 的新手,想知道是否有人可以指导我使用最合适的算法来解决识别图像中圆圈和十字位置的挑战,如下所示。 .

[

有时有线连接。 .

[

他们甚至可能像这样手绘。 .

到目前为止,我已经查看了模板匹配示例,但它可能不是正确的方法,并且它不会将模板的大小缩放到图像。

所以给出以下观察结果。 . .

十字和圆圈可能重叠。 如果图表是彩色的, 十字架的颜色相同,圆圈的颜色相同。 有时它们会被线连接起来,有时不会。 图中可能还有其他形状符号 它们的符号大小和形状相似,但可能不是计算机生成的,因此不一定相同。

我应该从哪里开始我的冒险?

【问题讨论】:

【参考方案1】:

不是一件容易的事。

对于彩色案例,您应该从分离颜色平面开始。有一些机会可以将标记分开。

但b&w的情况,无处可逃,必须往深处走。

我会尝试首先尽可能准确地检测网格线,例如使用霍夫线检测器。然后擦掉那些线。

然后尝试找到交叉点,它们是短的斜线段(大部分时间被前面的操作打破)。

霍夫圆检测器可能会使用小半径范围检测圆。

或者,可以使用脊或边缘检测器来获取短线段和短弧线。您可能需要添加一些过滤条件以避免连接线。

【讨论】:

【参考方案2】:

就像说的那样,这不是一件容易的事。 一种可能的方法是机器学习。我认为级联分类器(又名 Viola Jones 方法)非常适合检测对象。使用 openCV 很容易实现,但需要了解其工作原理和大量样本。

【讨论】:

【参考方案3】:

您可以尝试使用几个想法:

1) FFT 可以帮助去除网格。类似this。

2) 标记(十字和圆圈)是具有渐变角度的对象,不同于直角。对它们进行本地化可能会有所帮助。

【讨论】:

以上是关于检测图像中圆圈和十字的位置的主要内容,如果未能解决你的问题,请参考以下文章

Flutter :在图像中单击的位置添加一个圆圈

如何放置稳定的标记(图像上的实心圆圈)。下一帧相机中哪个位置相同?

如何使 ImageView 出现在圆圈内的随机位置?

使用 OpenCV 检测图像中的十字

从纸张目标中检测圆圈和镜头

检测图像中的多个圆圈