2

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

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

在此处输入图像描述

4

2 回答 2

1

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

也许这两项措施也是门槛。

于 2012-04-10T06:47:00.520 回答
0

通过结合前两个建议,我能够找到解决方案。我首先寻找被任意数量的水瓦(即每个方向 4 个)包围的水瓦,然后使用洪水填充算法将整个水体设置为实际上是水。这是结果的图片。我还添加了一条海岸线以供外观。如您所见,较小的圆形物体仍然是陆地,这正是我想要的。 在此处输入图像描述

于 2012-04-10T07:01:06.270 回答