区分水陆的算法

时间:2012-04-10 05:06:34

标签: java arrays algorithm terrain

我正在尝试用算法来分辨水与土地之间的区别。我有一个只有0(黑色方块)和1(灰色方块)的2D数组,它会产生这个图像。我将其中一个水域涂成了蓝色,这样你就可以看到应该是什么水了。水是大而且具有圆形的区域。我给一些绿地上色了。所有的黑色直线都应该是陆地以及一些较小的圆形。

现在,所有黑色区域都表示为0,所有灰色区域都表示为1.因此在图片中,绿色和蓝色斑点都表示为相同的东西。我需要将一些黑色区域(水)表示为2。有什么好办法呢?到目前为止,我想出的最好的事情是计算每个黑点的面积,并且只允许超过某个阈值的区域为水。我认为有更好的方法,我想知道你们的想法。

enter image description here

2 个答案:

答案 0 :(得分:1)

也许将区域与边缘的长度进行比较,这可以给出一个圆度的度量,因为完美的圆圈将具有最高的面积与边缘比率,而街道(我假设它们是街道)将具有比例很小。

也许也是这些措施的门槛。

答案 1 :(得分:0)

通过结合前两个建议,我能够找到解决方案。我首先寻找被任意数量的水瓦片(即每个方向上4个)包围的水瓦片,然后使用洪水填充算法将整个水体设置成实际上是水。这是一张照片 结果。我还为外观增添了一条海岸线。如你所见,较小的圆形体仍然是陆地,这正是我想要的。 enter image description here