【发布时间】:2012-04-10 05:06:34
【问题描述】:
我正在尝试提出一种算法来区分水和陆地。我有一个 2D 数组,它只包含 0(黑色方块)和 1(灰色方块),它产生了这个图像。我将其中一个水域涂成蓝色,这样你就可以看到应该是水的地方。水是大而圆形的区域。我将一些土地区域涂成绿色。所有的黑色直线都应该是陆地以及一些较小的圆形。
现在,所有的黑色区域都表示为 0,所有的灰色区域都表示为 1。所以在图片中,绿色和蓝色的点都表示为同一个东西。我需要将一些黑色区域(水)表示为 2。有什么好方法可以做到这一点?到目前为止,我想出的最好的办法是计算每个黑点的面积,并且只允许超过某个阈值的区域是水。我认为还有更好的方法,我想知道你们的想法。
【问题讨论】:
-
第 1 步:将所有 0 设置为只有 0 的邻居作为水。第 2 步:将所有 0 设置为任何水作为水的邻居。
-
或许你可以用这个Flood_fill algorithm作为起点。
-
乔尔,我确实想到了你说的第一步,但没有想到第二步。唯一不好的是它也会将小区域变成水。(我填充的绿点,或者它左边的小3x3正方形)
-
我将合并您建议的两个算法。我将在每个方向上标记被 3 个或更多 0 包围的 0,然后用洪水填充该区域。
-
您可能应该首先为什么是土地和什么是水建立一个更确定的条件。说“区域很小”是非常非常武断的。例如,我无法判断蓝色区域最西边以南的黑色区域应该是陆地还是水域。
标签: java arrays algorithm terrain