从图像生成多边形(填充形状)
Generating Polygons from Image (Filled Shapes)
我正在尝试从预处理的世界地图生成多边形,
到目前为止我所做的是:
1:为每个国家生成等高线图,如下所示:
- 从这里开始,我用这样的随机颜色填充了每个国家:
到目前为止,我只尝试 select countour 图像中的一个随机像素,然后沿着线绕行,直到我到达起点。这确实给了我一个相对较好的结果,在多边形上没有大约 90% 的准确率,但是有些国家完全消失了。
所以我想做的是以排序的方式为这张地图中的每个国家/地区提供一个坐标数组,以便它可以表示为一个多边形。有谁知道如何做到这一点?
我还没有找到适合我的问题的算法。
谢谢!
有矢量化工具,但如果您想对其进行编码(这是一项艰巨的任务),请执行以下操作:
扫描图像寻找黑点
将所有点存储在 list
个 (x,y)
坐标中
为所有点添加连接信息
这将需要 大量内存 如果编码不正确,请添加分组信息到每个点连接的点(记住只是索引)。
将使用标志添加到点
找到关节之间的折线
joint 是一个有超过 2
个连接点的点,所以
- 找到那个点
i
- 遍历它的连接点,直到另一个连接点
j
被击中,而不经过任何点两次。这就是为什么你需要使用标志。将此路径存储为 polyline
找到闭环
与#4类似,但需要经过polylines
才能回到起点。记住 polylines
为 polygons
所以你需要类似这样的结构:
struct pnt
{
int x,y; // coordinate fo point
int used; // usage flag for later use
List<int> ix; // list of indexes of all points connected to this point
};
struct polylin
{
List<int> ix; // list of point indexes
};
struct polygon
{
List<int> lin; // list of polyline indexes
List<int> dir; // direction of polyline (forward/backward)
};
List<pnt> pnts;
List<polylin> plins;
List<polygon> faces;
如果您的图像点内部有孔洞,那么您将需要通过额外的图像处理或通过找到具有一定阈值距离的连接点来处理它们。
我正在尝试从预处理的世界地图生成多边形, 到目前为止我所做的是:
1:为每个国家生成等高线图,如下所示:
- 从这里开始,我用这样的随机颜色填充了每个国家:
到目前为止,我只尝试 select countour 图像中的一个随机像素,然后沿着线绕行,直到我到达起点。这确实给了我一个相对较好的结果,在多边形上没有大约 90% 的准确率,但是有些国家完全消失了。
所以我想做的是以排序的方式为这张地图中的每个国家/地区提供一个坐标数组,以便它可以表示为一个多边形。有谁知道如何做到这一点?
我还没有找到适合我的问题的算法。
谢谢!
有矢量化工具,但如果您想对其进行编码(这是一项艰巨的任务),请执行以下操作:
扫描图像寻找黑点
将所有点存储在
list
个(x,y)
坐标中为所有点添加连接信息
这将需要 大量内存 如果编码不正确,请添加分组信息到每个点连接的点(记住只是索引)。
将使用标志添加到点
找到关节之间的折线
joint 是一个有超过
2
个连接点的点,所以- 找到那个点
i
- 遍历它的连接点,直到另一个连接点
j
被击中,而不经过任何点两次。这就是为什么你需要使用标志。将此路径存储为polyline
- 找到那个点
找到闭环
与#4类似,但需要经过
polylines
才能回到起点。记住polylines
为polygons
所以你需要类似这样的结构:
struct pnt
{
int x,y; // coordinate fo point
int used; // usage flag for later use
List<int> ix; // list of indexes of all points connected to this point
};
struct polylin
{
List<int> ix; // list of point indexes
};
struct polygon
{
List<int> lin; // list of polyline indexes
List<int> dir; // direction of polyline (forward/backward)
};
List<pnt> pnts;
List<polylin> plins;
List<polygon> faces;
如果您的图像点内部有孔洞,那么您将需要通过额外的图像处理或通过找到具有一定阈值距离的连接点来处理它们。