寻找圆边:
这是我发布的两个示例图像。
需要找到圆的边缘:
是否有可能开发一种通用的圆算法,可以在所有场景中找到所有可能的圆?如下图 1. 圆圈可能有不同的颜色(白色、黑色、灰色、红色) 2. 背景颜色可能不同 3. 大小不同
http://postimage.org/image/tddhvs8c5/
http://postimage.org/image/8kdxqiiyb/
请提出一些想法来编写一个应该在上述圆圈上运行的算法
寻找圆边:
这是我发布的两个示例图像。
需要找到圆的边缘:
是否有可能开发一种通用的圆算法,可以在所有场景中找到所有可能的圆?如下图 1. 圆圈可能有不同的颜色(白色、黑色、灰色、红色) 2. 背景颜色可能不同 3. 大小不同
http://postimage.org/image/tddhvs8c5/
http://postimage.org/image/8kdxqiiyb/
请提出一些想法来编写一个应该在上述圆圈上运行的算法
您可以对两个图像应用边缘检测转换。
这是我在 Paint.NET 中使用轮廓效果所做的:
您也可以测试边缘检测,但这需要图像中的更多对比度。
要考虑的另一件事是您要检测的确切内容;在第一张图片中,您要检测白色环还是里面的圆盘。在第二张图片中;你想检测所有的圆圈(有很多小圆圈)还是只检测大圆圈。这些要求将影响要使用的转换以及如何初始化这些转换。
将图像转换为“突出显示”圆圈的版本后,您需要一种算法来找到它们。
同样,有更多的选择,而不仅仅是一个。这是一篇描述算法的论文
在网上搜索image processing circle recognition
会得到很多结果。
我认为您将不得不使用一些可用于分割的不同特征计算。在第一张图片中,圆圈仅通过强度即可识别,因此很容易。在第二张图片中,区分圆边缘的主要是纹理,在这种情况下,将需要基于某种纹理过滤器的特征图像,例如计算局部方差将产生一个标量图像,可以分割出圆圈。如果在其他场景中有其他定义圆的特征(背景前景的不同颜色等),您可能需要其他显式过滤器来为这些情况提供标量差异。
当你有圆圈突出的标量图像时,你可以使用圆形霍夫变换来找到圆圈。要么针对不同的圆圈大小运行它,要么对其进行修改以检测一系列大小。
如果您知道只有一个圆圈并且您知道将出现的噪声类型(垂直/水平线等),另一种方法是设计一种更具体的算法,例如滤除噪声并找到重心等。
对评论的回答:这个想法是将算法分成独立的阶段。我不知道你的具体算法是如何工作的,但大概它可以采用二进制或灰度图像,其中高值意味着圆的像素部分和低值的像素不是圆的一部分,本算法还需要给出某种置信度值在它找到的圆圈上。该当前算法随后将代表完整算法结束时的某个阶段。然后,您必须添加第一阶段,即为您要处理的所有类型的输入生成特征图像。对于这两个例子,一张强度图像(简单灰度)和一张每个像素代表局部方差的图像就足够了。在颜色情况下,颜色转换是否可能使用色调值?对于每个输入将所有特征图像提供给后期阶段,使用置信度值来选择最有可能的候选者。如果您的算法需要其他未知数作为输入参数(圆大小等),只需迭代可能的值并确保您的后期阶段返回置信度值。