1

我有个问题。我有几张这样的图片(.bmp 文件):

1:

一

2:

二

3:

三

4:

四

5:

在此处输入图像描述

我想知道图片上有多少个圆形。例如:

第一张图片:程序应该返回 1

第二张图片:程序应该返回 2

第三张图片:程序应该返回 5

第 4 张图片:程序应该返回 6

第 5 张图片:程序应该返回 8

你有什么想法?我想用 C# 或 Java 编写我的代码(如果你有任何库)。

我想过在圆形之间寻找这个紧密的区域,但我不知道该怎么做......,

4

3 回答 3

3

所以你的问题不是关于实际识别圆圈,而是关于分割重叠的圆圈。这是通过使用距离变换和简单的阈值处理来解决的。就那么简单。剩下的唯一步骤是计算连接组件的数量。

例如,这是 Matlab 代码:

f = yourimage;
dist = bwdist(f);
result = dist > (max(max(dist)))/1.5;

以下是图像 1、3 和 5 的结果:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

于 2013-01-10T01:31:28.257 回答
1

您可以使用openCV 库。标准接口是 C++,但可以使用Java 接口

这是一个相关的openCV0相关的SO答案,我相信你可以找到更多......

houghcircles-参数识别球

更新

由于某种原因,这个答案被否决了,我不知道为什么。

这是openCV网站上的教程

这是openCV文档

是 YouTube 上的一个小视频

于 2013-01-10T00:59:29.033 回答
1

这个问题的挑战在于圆形区域相接触。但是,在您的情况下解决此问题的一种简单方法是通过大量单像素步骤侵蚀这些图像。在维基百科上查看此页面:

http://en.wikipedia.org/wiki/Erosion_ (形态学)

如果您使用 MATLAB,有一个名为的函数bwmorph将为您执行此操作,并bwlabel最终找出您在这里有多少对象。

也许您可以使用自己的自定义代码侵蚀这些图像。在这种情况下,您可以腐蚀,直到每个对象只剩下一个像素。

于 2013-01-10T01:33:30.367 回答