algorithm - 根据种子点识别多边形边界的最佳方法是什么?

标签 algorithm image image-processing

这是我的问题 - 我有一张世界或某种区域的 map ,如下所示:

A map of the world

我需要为这张区域 map 生成一个“边界点”表,以便生成图像 map 并动态突出显示某些区域。所有 map 的区域都将使用一种颜色的边界来定义它们(在示例图像中为白色)。

到目前为止,我正在考虑某种基于泛洪填充的方法 - 请注意,速度和效率并不那么重要,因为该脚本绝不打算实时使用。

有没有我不知道的更好的方法?我的方法从根本上是错误的吗?如有任何建议,我们将不胜感激!

最佳答案

如果这些区域彼此完全隔离,则查看连接的组件就可以解决问题。在 Mathematica 中它看起来像:

首先从世界地图创建一个二值图像:

regions = ColorNegate[Binarize[img, .9]]

enter image description here

然后计算连通分量:

components = MorphologicalComponents[regions, CornerNeighbors -> False];

现在您可以提取每个组件的属性( mask 、周长等)。在这里,我用独特的颜色为每个区域着色:

Colorize[components]

enter image description here

要获得给定组件的边界,可以查询组件的二进制掩码,然后计算周长。 这将获取所有掩码:

masks = ComponentMeasurements[components, "Mask"];

例如,获取一个区域的边界或轮廓:

country = Image[masks[[708, 2]], "Bit"]
border = MorphologicalPerimeter[country]

enter image description here

获取边界的 2D 位置只是提取图像中的白色像素的问题:

pos = Position[ImageData[border], 1]

enter image description here

关于algorithm - 根据种子点识别多边形边界的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6813232/

相关文章:

java - 用于查找节点最可能祖先的图形算法

algorithm - 多事件匹配算法

c - 搜索算法的 C 代数中的意外结果

html - 如何将列表中的图像居中?

html - Canvas contenteditable 不工作

c++ - 原始图像和 C++ 中的 DCRaw

c++ - 搜索数组中的元素,复杂度优于 O(n)

android - 从画廊获取图像 - 不是全部 "Exist"?

image-processing - 图像处理以识别数字

image - 如何改进我的图像比较算法