寻找圆边:

时间:2012-06-01 05:14:45

标签: c++ image image-processing

寻找圆形边缘:

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

需要找到圆圈的边缘:

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

hough muesli

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

以下是指向documentationtutorial的链接。

我想你的第二张示例图片很难被发现

答案 1 :(得分:0)

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

以下是我使用大纲效果在Paint.NET中所做的:

Circle 1 Circle 2

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

要考虑的另一件事是你想要检测到的是什么;在第一张图片中,您想要检测白色环或内部的光盘吗?在第二张图片中;你想要检测所有的圆圈(有许多小圆圈)或只是大圆圈。这些要求将影响要使用的转换以及如何初始化这些转换。

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

同样,除了一个选项之外,还有更多选项。 Here is a paper describing an algoritm

在网上搜索image processing circle recognition会产生很多结果。

答案 2 :(得分:0)

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

如果你有圆形突出的标量图像,你可以使用圆形Hough变换找到圆。可以针对不同的圆形尺寸运行它,也可以修改它以检测一系列尺寸。

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

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