【问题标题】:Finding Circle Edges :寻找圆边:
【发布时间】:2012-06-06 08:52:05
【问题描述】:

寻找圆边:

这是我发布的两张示例图片。

需要找到圆的边:

是否有可能开发一种通用的圆算法,可以在所有场景中找到所有可能的圆?像下面 1. 圆圈可能有不同的颜色(白色、黑色、灰色、红色) 2.背景颜色可能不同 3.大小不同

http://postimage.org/image/tddhvs8c5/

http://postimage.org/image/8kdxqiiyb/

请提出一些想法来编写一个应该在上述圆圈上运行的算法

【问题讨论】:

    标签: c++ image image-processing


    【解决方案1】:

    您可以对两个图像应用边缘检测转换。

    这是我在 Paint.NET 中使用轮廓效果所做的:

    您也可以测试边缘检测,但这需要图像中的更多对比度。

    要考虑的另一件事是您要检测的确切内容;在第一张图片中,您要检测白色环还是里面的圆盘。在第二张图片中;你想检测所有的圆圈(有很多小圆圈)还是只检测大圆圈。这些要求将影响要使用的转换以及如何初始化这些转换。

    将图像转换为“突出显示”圆圈的版本后,您需要一种算法来找到它们。

    同样,还有更多的选择,而不仅仅是一个。 Here is a paper describing an algoritm

    在网上搜索 image processing circle recognition 会得到很多结果。

    【讨论】:

    • 我可以使用 OpenCV 来查找圆圈吗?由于我是图像处理算法开发的新手,我无法弄清楚这些步骤..请帮我解决这个问题..是的第一个图像我想检测白色环中的光盘。在第二个图像中,我只想找到图像中心的大圆圈。 (您可以看到上边缘看起来更清晰/边缘对比度更高,而底部看起来与背景颜色相同 - 底部表面没有对比度变化)
    【解决方案2】:

    我认为您将不得不使用可用于分割的几种不同的特征计算。在第一张图片中,圆圈仅通过强度即可识别,因此很容易。在第二张图片中,区分圆边缘的主要是纹理,在这种情况下,将需要基于某种纹理过滤器的特征图像,例如计算局部方差将产生一个标量图像,可以分割出圆圈。如果在其他场景中有其他定义圆的特征(背景前景的不同颜色等),您可能需要其他显式过滤器来为这些情况提供标量差异。

    当您的标量图像中圆圈突出时,您可以使用圆形霍夫变换来找到圆圈。要么针对不同的圆圈大小运行它,要么对其进行修改以检测一系列大小。

    如果您知道只有一个圆圈并且您知道将出现的噪音类型(垂直/水平线等),另一种方法是设计一种更具体的算法,例如过滤掉噪音,找到重心等。

    回复评论: 这个想法是将算法分成独立的阶段。我不知道你的具体算法是如何工作的,但大概它可以采用二进制或灰度图像,其中高值意味着圆的像素部分和低值的像素不是圆的一部分,本算法还需要给出某种置信度值在它找到的圆圈上。该当前算法随后将代表完整算法结束时的某个阶段。然后,您必须添加第一阶段,即为您要处理的所有类型的输入生成特征图像。对于这两个例子,一张强度图像(简单灰度)和一张每个像素代表局部方差的图像就足够了。在颜色情况下,颜色转换是否可能使用色调值?对于每个输入将所有特征图像馈送到后期阶段,使用置信度值来选择最有可能的候选者。如果您的算法需要其他未知数作为输入参数(圆大小等),只需迭代可能的值并确保您的后期阶段返回置信度值。

    【讨论】:

    • 是的,你很好地理解了我的问题。我已经为第二张图片设计了特定的算法,但我知道我的算法不适合其他圈子。如何定义通用圈子算法?假设我们有第一种图像类型的圆圈。而且我知道每张图像只有一个圆圈 - 但它的大小和颜色不同。我们不能在算法中复制我们的大脑吗???
    • 这个想法是将算法分成独立的阶段。我不知道你的具体算法是如何工作的,但大概它可以采用二进制或灰度图像,其中高值意味着圆的像素部分和低值的像素不是圆的一部分,本算法还需要给出某种置信度值在它找到的圆圈上。该当前算法将代表整个算法结束时的某个阶段。
    【解决方案3】:

    听起来像是霍夫圆变换的工作:

    到目前为止我自己还没有使用过它,但它包含在 OpenCV 中。在其他参数中,您可以为其指定最小和最大半径。

    这里是documentationtutorial 的链接。

    我想您的第二张示例图片将很难检测到

    【讨论】:

    • 请问,上图是同款白色圆杯。所以很容易找到它,请考虑实时图像。在我的场景中..您可以在给定的链接中查看我的图片..请通过它..
    • 图片只是为了说明算法。我看到了您的示例,但是您必须自己测试该算法与它们的配合程度。只要它们有明确定义的边缘,在您应用边缘检测时会显示出来,并且它们是干净的圆圈,没有严重的扭曲,它应该可以工作。
    • 感谢@HugoRune,正如我所说,我已经完成了一半......,我增强了图像并应用了边缘检测;结果图像链接如下。postimage.org/image/nk0omxdbz我可以看到一些在我的图像中画圈,现在我应该如何进一步获得坐标点,例如 - 中心点(x,y)或一些边缘点。如何做到这一点?我们需要在生成的图像中应用一些过滤器吗????
    • @MaccHere 根据链接教程,您需要将此图片用作 HoughCircles 的输入。是否需要另一个预处理过滤器取决于 opencv Hough 变换对这个图像的处理能力。
    猜你喜欢
    • 2020-12-17
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多