分析"集群的位图" C#

时间:2015-11-09 04:28:28

标签: c# image-processing bitmap

我有一个程序输出一个图像(位图),例如下面的图像,其中一些"填充"圈子(左),一些"未填充"将拥有"翅膀" (右下方),有些"不完整和未填充"圈子与#34;翅膀" (右上)。

这些圆圈的大小各不相同(虽然相似),并且可能有任意数量的翅膀。 我想要做的是确定有多少个圆圈。因此,对于示例图像,我需要程序计算11个圆圈(翅膀的数量无关紧要)。我知道所有黑点的坐标(不要与黑圈混淆,因为圆圈包含许多黑点)。我不知道的是如何告诉计算机放置"关闭"这些只是一个圈子。

一些注意事项:如上所述,圆圈的大小非常相似,但不一样,所以我不能使用直径。另外,正如您所看到的,某些圈子可能不完整,因此可能存在问题。图像将始终为黑色和白色,最后,圆圈之间将始终存在空白区域(我不确定这两件事是否可以简化过程)

我已经看到了一些循环通过位图的强力方法,并比较了在点(x,y)的5个空格中有多少个黑点,但这需要太长时间,并且不会总是如此输出正确。

有没有简单的方法(在C#中)?

提前致谢!!!

enter image description here

1 个答案:

答案 0 :(得分:1)

我不确定如何处理不完整的圈子,但我确实看到了减少问题大小的方法。

通过获取每个点的集合,并且从集群的中心开始并首先向左走,然后向右走,直到到达边缘或翼,完整的圆应该相当容易识别。通过检查任一方向的几个点以获得空白空间,可以检测到翅膀。

到达边缘后,检查相邻的点,如有必要,请沿着边缘找到该边的垂直切线。然后,您可以使用两个相对的切点来定义圆,并检查群集中的点以查看它们是否匹配。

识别后,从位图中删除该点簇,递增计数,然后继续。删除所有容易识别的群集后,裁剪位图以使搜索空间更小。