我有个问题。我有几张这样的图片(.bmp 文件):
1:
2:
3:
4:
5:
我想知道图片上有多少个圆形。例如:
第一张图片:程序应该返回 1
第二张图片:程序应该返回 2
第三张图片:程序应该返回 5
第 4 张图片:程序应该返回 6
第 5 张图片:程序应该返回 8
你有什么想法?我想用 C# 或 Java 编写我的代码(如果你有任何库)。
我想过在圆形之间寻找这个紧密的区域,但我不知道该怎么做......,
我有个问题。我有几张这样的图片(.bmp 文件):
我想知道图片上有多少个圆形。例如:
第一张图片:程序应该返回 1
第二张图片:程序应该返回 2
第三张图片:程序应该返回 5
第 4 张图片:程序应该返回 6
第 5 张图片:程序应该返回 8
你有什么想法?我想用 C# 或 Java 编写我的代码(如果你有任何库)。
我想过在圆形之间寻找这个紧密的区域,但我不知道该怎么做......,
所以你的问题不是关于实际识别圆圈,而是关于分割重叠的圆圈。这是通过使用距离变换和简单的阈值处理来解决的。就那么简单。剩下的唯一步骤是计算连接组件的数量。
例如,这是 Matlab 代码:
f = yourimage;
dist = bwdist(f);
result = dist > (max(max(dist)))/1.5;
以下是图像 1、3 和 5 的结果:
这个问题的挑战在于圆形区域相接触。但是,在您的情况下解决此问题的一种简单方法是通过大量单像素步骤侵蚀这些图像。在维基百科上查看此页面:
http://en.wikipedia.org/wiki/Erosion_ (形态学)
如果您使用 MATLAB,有一个名为的函数bwmorph
将为您执行此操作,并bwlabel
最终找出您在这里有多少对象。
也许您可以使用自己的自定义代码侵蚀这些图像。在这种情况下,您可以腐蚀,直到每个对象只剩下一个像素。