2013-04-21 112 views
2

如果有一个图像的给定二维数组,其中阈值已完成,现在是二进制信息。简单的多斑点检测二值图像?

是否有任何特定的方式来处理此图像,我得到图像上的多个斑点的坐标?

,因为这个过程需要在10+仿真机器人上的自定义仿真器同时运行在C

我需要的斑点xy坐标我不能用OpenCV的,但首先我需要首先找到那些多斑点。

像素组大小的最简单标准应该足够了。但我不知道如何开始编码。

PS:单个blob应该没问题。问题是多个斑点。

刚刚开始?

+0

尝试谷歌连接组件。您也可以根据高斯算子的拉普拉斯算子来查找斑点检测。 – Zaphod 2013-04-21 15:06:27

+0

好吧,高斯算符拉普拉斯算子,我不明白如何在代码中实现它.... – ivanwong888899999 2013-04-21 15:17:04

回答

1

你可以通过二进制图像与类似下面的算法标签连接部分:

  1. 创建整型,labelArray的二维数组,将容纳连接区域的标签,并发起全零。
  2. 遍历每个二进制像素,P,逐行

    A.如果p为真和在labelArray该位置对应的值是0(未标记的),将其分配给一个新的标签,并做了广度优先搜索,将添加所有周围的二进制像素,同样的标签也是如此。

现在唯一的问题是如果您有多个相互接触的斑点。由于您知道斑点的大小,因此您应该能够计算出给定连通区域中有多少个斑点。这是棘手的部分。您可以尝试在此时进行k-means聚类。您也可以尝试使用其他方法,如使用二进制扩展。

3

看看QuickBlob这是一个小巧的独立C库,听起来非常适合您的需求。

QuickBlob带有一个小的命令行工具(csv-blobs),其输出所述输入图像内找到的每个斑点的位置和大小:

./csv-blobs white image.png 
X,Y,size,color 
28.37,10.90,41,white 
51.64,10.36,42,white 
... 

下面是一个例子(输出图像产生得益于show-blobs.py随QuickBlob微小的Python实用程序):

​​output image