我正在尝试用算法来分辨水与土地之间的区别。我有一个只有0(黑色方块)和1(灰色方块)的2D数组,它会产生这个图像。我将其中一个水域涂成了蓝色,这样你就可以看到应该是什么水了。水是大而且具有圆形的区域。我给一些绿地上色了。所有的黑色直线都应该是陆地以及一些较小的圆形。
现在,所有黑色区域都表示为0,所有灰色区域都表示为1.因此在图片中,绿色和蓝色斑点都表示为相同的东西。我需要将一些黑色区域(水)表示为2。有什么好办法呢?到目前为止,我想出的最好的事情是计算每个黑点的面积,并且只允许超过某个阈值的区域为水。我认为有更好的方法,我想知道你们的想法。
答案 0 :(得分:1)
也许将区域与边缘的长度进行比较,这可以给出一个圆度的度量,因为完美的圆圈将具有最高的面积与边缘比率,而街道(我假设它们是街道)将具有比例很小。
也许也是这些措施的门槛。
答案 1 :(得分:0)
通过结合前两个建议,我能够找到解决方案。我首先寻找被任意数量的水瓦片(即每个方向上4个)包围的水瓦片,然后使用洪水填充算法将整个水体设置成实际上是水。这是一张照片 结果。我还为外观增添了一条海岸线。如你所见,较小的圆形体仍然是陆地,这正是我想要的。