我有问题。我有几张这样的图片(.bmp文件):
我想知道图片上有多少圆形。例如:
第1张图片:程序应返回1
第二张图片:程序应该返回2
第3张图片:程序应该返回5
第4张图片:程序应该返回6
第五张图片:节目应该返回8
你有什么想法吗?我想用C#或Java编写代码(如果你有任何库)。
我想在圆形形状之间寻找这个紧密的区域,但我不知道该怎么做..,
答案 0 :(得分:3)
所以你的问题不是关于实际识别圈子,而是关于拆分重叠的圈子。这可以通过使用距离变换然后进行简单的阈值处理来解决。就那么简单。剩下的唯一步骤就是计算连接组件的数量。
例如,这是Matlab代码:
f = yourimage;
dist = bwdist(f);
result = dist > (max(max(dist)))/1.5;
以下是图片1,3和5的结果:
答案 1 :(得分:1)
您可以使用openCV library。标准接口是C ++,但Java interface可用。
这是一个与openCV0相关的相关SO答案,我相信你可以找到更多......
houghcircles-parameters-to-recognise-balls
更新
出于某种原因,这个答案被低估了,我不明白为什么。
openCV网站上的答案 2 :(得分:1)
这个问题的挑战是圆形区域接触。但是,在您的情况下解决此问题的简单方法是通过大量单个像素步骤来侵蚀这些图像。在维基百科上查看此页面:
http://en.wikipedia.org/wiki/Erosion_(morphology)
如果您使用MATLAB,有一个名为bwmorph
的函数会为您执行此操作,bwlabel
最终会找到您在此处拥有的对象数。
也许您可以使用自己的自定义代码侵蚀这些图像。在这种情况下,您可以侵蚀,直到每个对象留下一个像素为止。