我给出了一个大的二进制图像(每个像素是1或0)。
我知道在那个图像中有多个区域(一个区域被定义为一组由0包围的相邻1)。
我们的目标是找到最大的(就像素数或封闭区而言,现在两者都可以解决)
我目前的计划方法是:
我的问题是:有没有更有效的方法来做到这一点,并且已经测试过(并行或GPU加速的奖励点)实现(在任何大型库中)?
您想使用连通分量分析(a.k.a。标记)。它或多或少是你建议做的,但那里有非常有效的算法。 this question的答案解释了一些算法。另见connected-components。
This library收集不同的有效算法并进行比较。
在Python中,您可能想要使用OpenCV。 cv.connectedComponentsWithStats
进行连通分量分析并输出统计数据,其中包括每个连通分量的区域。
关于你的建议:使用像素坐标而不是原始图像矩阵是非常低效的:在图像中寻找相邻像素是微不足道的,在坐标列表中寻找相同的像素需要昂贵的搜索者。
您可以使用唯一ID对每个区域进行Flood Fill,将ID映射到该区域的大小。