【问题标题】:Simple Multi-Blob Detection of a Binary Image?二值图像的简单多斑点检测?
【发布时间】:2013-04-14 11:32:33
【问题描述】:

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

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

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

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

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

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

只是一个良好的开端?

【问题讨论】:

  • 尝试谷歌搜索连接的组件。您还可以查找基于高斯拉普拉斯算子的斑点检测。
  • 好吧,高斯算子的拉普拉斯算子,我不明白如何在代码中实现它......

标签: c image computer-vision feature-detection


【解决方案1】:

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

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

  2. 逐行遍历每个二进制像素p

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

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

【讨论】:

    【解决方案2】:

    看看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 tiny Python 实用程序生成的):

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-17
        • 1970-01-01
        • 1970-01-01
        • 2017-07-11
        • 1970-01-01
        • 1970-01-01
        • 2019-01-17
        • 2016-09-25
        相关资源
        最近更新 更多