这是我的问题 - 我有一张世界或某种区域的 map ,如下所示:
我需要为这张区域 map 生成一个“边界点”表,以便生成图像 map 并动态突出显示某些区域。所有 map 的区域都将使用一种颜色的边界来定义它们(在示例图像中为白色)。
到目前为止,我正在考虑某种基于泛洪填充的方法 - 请注意,速度和效率并不那么重要,因为该脚本绝不打算实时使用。
有没有我不知道的更好的方法?我的方法从根本上是错误的吗?如有任何建议,我们将不胜感激!
最佳答案
如果这些区域彼此完全隔离,则查看连接的组件就可以解决问题。在 Mathematica 中它看起来像:
首先从世界地图创建一个二值图像:
regions = ColorNegate[Binarize[img, .9]]
然后计算连通分量:
components = MorphologicalComponents[regions, CornerNeighbors -> False];
现在您可以提取每个组件的属性( mask 、周长等)。在这里,我用独特的颜色为每个区域着色:
Colorize[components]
要获得给定组件的边界,可以查询组件的二进制掩码,然后计算周长。 这将获取所有掩码:
masks = ComponentMeasurements[components, "Mask"];
例如,获取一个区域的边界或轮廓:
country = Image[masks[[708, 2]], "Bit"]
border = MorphologicalPerimeter[country]
获取边界的 2D 位置只是提取图像中的白色像素的问题:
pos = Position[ImageData[border], 1]
关于algorithm - 根据种子点识别多边形边界的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6813232/