从二值图像中获取 n 个最大区域

Get n largest regions from binary image

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

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

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

我目前计划的方法是:

我的问题是:是否有更有效的方法来执行此操作,是否已经(在任何大型库中)测试了(并行或 GPU 加速的加分)实现?

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

您想使用连通分量分析(a.k.a。标记)。这或多或少是你建议做的,但那里有非常有效的算法。 this question explain some of the algorithms. See also .

的答案

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

在 Python 中,您可能想使用 OpenCV。 cv.connectedComponentsWithStats 进行连通分量分析并输出统计信息,其中包括每个连通分量的面积。

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