二进制图像的简单多点检测?

时间:2013-04-21 14:41:47

标签: c image computer-vision feature-detection

如果存在图像的给定2d数组,则阈值已经完成,现在是二进制信息。

有没有特殊的方法来处理这个图像,我在图像上得到多个blob的坐标?

我无法使用openCV,因为此过程需要在C中的自定义模拟器上的10个以上模拟机器人上同时运行。

我需要blob xy坐标,但首先我需要先找到那些多个blob。

像素组大小的最简单标准应该足够了。但我没有任何线索如何开始编码。

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

只是一个良好的开端?

3 个答案:

答案 0 :(得分:4)

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

QuickBlob附带一个小命令行工具(csv-blobs),可输出输入图像中找到的每个blob的位置和大小:

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

以下是一个示例(由于QuickBlob附带的show-blobs.py微型Python实用程序,生成了输出图像):

input image output image

答案 1 :(得分:1)

您可以使用如下算法标记连接部分的二进制图像:

  1. 创建一个包含标签的二维数组labelArray,它将保存连接区域的标签并将其启动为全零。
  2. 逐行迭代每个二进制像素p,

    一个。如果p为true且labelArray中此位置的对应值为0(未标记),则将其分配给新标签并执行广度优先搜索,该搜索将添加对同一标签也同样的所有周围二进制像素。 / p>

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

答案 2 :(得分:1)

我知道我参加派对的时间已经很晚了,但我只是为正在研究这个问题的受益者加上这个。

这是一个很好的描述,可能符合您的需求。     http://www.mcs.csueastbay.edu/~grewe/CS6825/Mat/BinaryImageProcessing/BlobDetection.htm