如果有一个给定的图像二维数组,阈值已经完成,现在是二进制信息。
有没有什么特殊的方法可以处理这个图像,让我在图像上获得多个 blob 的坐标?
我不能使用 openCV,因为这个过程需要在 C 语言自定义模拟器上的 10 多个模拟机器人上同时运行。
我需要 blobs xy 坐标,但首先我需要先找到那些多个 blob。
像素组大小的最简单标准应该足够了。但我不知道如何开始编码。
PS:单个blob应该没问题。问题是多个斑点。
只是一个开始?
如果有一个给定的图像二维数组,阈值已经完成,现在是二进制信息。
有没有什么特殊的方法可以处理这个图像,让我在图像上获得多个 blob 的坐标?
我不能使用 openCV,因为这个过程需要在 C 语言自定义模拟器上的 10 多个模拟机器人上同时运行。
我需要 blobs xy 坐标,但首先我需要先找到那些多个 blob。
像素组大小的最简单标准应该足够了。但我不知道如何开始编码。
PS:单个blob应该没问题。问题是多个斑点。
只是一个开始?
看看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.py
QuickBlob 附带的小型 Python 实用程序生成的):
您可以使用如下算法浏览标记连接部分的二进制图像:
创建一个二维整数数组 labelArray,它将保存连接区域的标签并将其初始化为全零。
逐行迭代每个二进制像素 p
A. 如果 p 为真,并且 labelArray 中该位置的对应值为 0(未标记),则将其分配给新标签并进行广度优先搜索,将所有周围的二进制像素都添加到同一标签上.
现在唯一的问题是,如果您有多个相互接触的 blob。因为您知道 blob 的大小,所以您应该能够计算出给定连接区域中有多少 blob。这是棘手的部分。此时您可以尝试进行 k-means 聚类。您还可以尝试其他方法,例如使用二元膨胀。
我知道我参加聚会很晚,但我只是为正在研究这个问题的受益人添加这个。
这是一个很好的描述,可能适合您的需求。 http://www.mcs.csueastbay.edu/~grewe/CS6825/Mat/BinaryImageProcessing/BlobDetection.htm