生成多边形从图像中(填充的形状)

问题描述:

我试图生成从预处理的世界地图, 是我迄今所做的多边形是:生成多边形从图像中(填充的形状)

1:生成每个国家的等高线图,它看起来是这样的: Countour of each of the world countries

  1. 在这里,我充满每个国家与随机颜色这样的: Filled World map
  2. 到目前为止我试图只在图像中选择一个随机像素,然后沿着这条线,直到我到达起始点。这确实给了我一个相对较好的结果,多边形的准确度没有大约90%,但是有些国家完全消失了。

    Drawing generated polygons

    所以我希望做的是为每个在这个地图的国家坐标的阵列中的排序方式,因此它可以被表示为一个多边形。有谁知道如何做到这一点?

    我还没有找到适合我的问题的任何算法。

    谢谢!

开始=>
+0

你有没有考虑过创建一个SVG图像?您将指定轮廓线,表明它们应该形成一个闭合曲线并填充您选择的颜色。 – collapsar 2015-02-05 18:00:22

+0

我可以悲伤地不在我的应用程序中使用SVG,但SVG能否自动给我所需的结果,还是我必须手动定义这些? – 2015-02-05 18:02:58

+0

将自动生成颜色填充(只需将“填充”属性添加到轮廓折线)。 – collapsar 2015-02-05 18:07:28

有矢量化工具在那里,但如果你想代码时(这是一项艰巨的任务)做到这一点:

  1. 黑点

    存储的所有点在一些扫描图像的(x,y)list坐标

  2. 添加连接信息到所有点

    这将需要大量的内存如果没有正确编码,所以添加分组信息点是每个点连接(记住只是索引)。

  3. 添加使用标志指向

  4. 发现关节之间的折线

    关节是点与更然后2连接点,以便

    1. 找到这样的点i
    2. 通过它的连接点,直到另一个连接点j被击中而没有通过任何点两次。这就是为什么你需要使用标志。存储这个路径polyline
  5. 发现闭环

    它类似于#4,但你需要逐步完成polylines回到起点。记住polylinespolygons

所以,你需要类似这样的结构:

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; 

如果你的形象加分有内遂洞,你将需要额外的图像处理或通过连接点发现来处理它们与一些阈值距离。