5

如果有一个给定的图像二维数组,阈值已经完成,现在是二进制信息。

有没有什么特殊的方法可以处理这个图像,让我在图像上获得多个 blob 的坐标?

我不能使用 openCV,因为这个过程需要在 C 语言自定义模拟器上的 10 多个模拟机器人上同时运行。

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

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

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

只是一个开始?

4

3 回答 3

5

看看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
...

这是一个示例(输出图像是由show-blobs.pyQuickBlob 附带的小型 Python 实用程序生成的):

输入图像 输出图像

于 2013-04-22T08:59:41.060 回答
1

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

  1. 创建一个二维整数数组 labelArray,它将保存连接区域的标签并将其初始化为全零。

  2. 逐行迭代每个二进制像素 p

    A. 如果 p 为真,并且 labelArray 中该位置的对应值为 0(未标记),则将其分配给新标签并进行广度优先搜索,将所有周围的二进制像素都添加到同一标签上.

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

于 2013-04-21T15:07:14.533 回答
1

我知道我参加聚会很晚,但我只是为正在研究这个问题的受益人添加这个。

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

于 2015-11-19T14:38:55.700 回答