【问题标题】:Get n largest regions from binary image从二值图像中获取 n 个最大区域
【发布时间】:2018-08-13 13:36:00
【问题描述】:

我给出了一个大的二值图像(每个像素都是 1 或 0)。

我知道该图像中有多个区域(一个区域定义为一组相邻的 1,由 0 包围)。

目标是找到最大的(就像素数或封闭区域而言,目前两者都适合我)

我目前计划的方法是:

  • 开始一个 1(或 0,代表“命中”)坐标数组的数组

  • 直到没有更多的步骤:

    • 对于当前区域(即一组坐标)做:

    • 查看是否有区域与当前区域接口,如果是则将它们加在一起,如果没有则继续下一次迭代

我的问题是:有没有更有效的方法来做到这一点,是否已经测试过(并行或 GPU 加速的奖励点)实现(在任何大型库中)?

【问题讨论】:

    标签: python algorithm image-processing signal-processing


    【解决方案1】:

    您可以Flood Fill 每个区域都有一个唯一的 ID,将 ID 映射到区域的大小。

    【讨论】:

    • 既然你提到了,我的算法基本上就是flood fill算法,谢谢提出这个词
    【解决方案2】:

    您想使用连通分量分析(也称为标签)。这或多或少是你建议做的,但那里有非常有效的算法。 this question 的答案解释了一些算法。另见

    This library收集不同的高效算法并进行比较。

    在 Python 中,您可能想要使用 OpenCV。 cv.connectedComponentsWithStats 进行连接组件分析并输出统计信息,其中包括每个连接组件的区域。

    关于您的建议:直接使用像素坐标而不是原始图像矩阵非常低效:在图像中寻找相邻像素是微不足道的,在坐标列表中寻找相同的像素需要昂贵的搜索者。

    【讨论】:

    • 感谢您的回答,关于您最后的评论,感谢您指出这一点,您的建议更有意义
    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多