从图像中提取多边形

时间:2014-11-10 11:24:06

标签: r algorithm extract polygon gdal

我有一个图像(PNG),其中包含不同颜色的简单多边形。我需要序列化这些多边形,因为左上角的坐标为[0,0]。我已经尝试了gdal_polygonize,我对结果感到满意,但有一个问题。看看this triangle我想获得角点和序列,以了解它们中的哪些链接在一起。所以我期望的坐标是[30.0,23.0],[30.0,504.0],[511.0,504.0],[30.0,23.0]。我尝试了gdal_polygonize.py但是当我尝试

gdal_polygonize -8 triangle.png triangle 

我得到了数百个坐标,因为它将斜边的每个像素都计算为多边形的一个角。我能做什么?必须有一些算法,但我能找到的是从3d对象中提取多边形的算法,等等:(

我不确定,但也许this是我问题的解决方案,但由于我在RI方面不太好,我想知道,我是否可以使用R脚本,如果是这样,它有什么用?看起来像?

1 个答案:

答案 0 :(得分:1)

gdal_polygonize非常精确,它遵循每个像素的轮廓。这使得行为变得容易和可预测。您希望显然对图像有一些解释,在这种情况下,像素化对角线实际上是一条直线,但这并不明显,所以它实际上取决于您的应用。

对于复杂的矢量化,有很多选项,您可以查看Scikit图像,例如: http://freeconnection.blogspot.nl/2013/07/vectorize-image-with-python-scikit-image.html

对于这个简单的例子,有一些更简单的技巧,但如果它们可用,它实际上取决于实际的应用程序。

给出三角形图像,以及gdal_polygonize的结果。您可以使用ogr2ogr转换输出,并提供简化值1.

ogr2ogr -simplify 1 output.shp input.shp

我认为价值是以输入为单位提供的,因为缺乏空间参考系统仍然是一个'像素'。

在结果上运行ogrinfo会显示多边形中剩余的顶点:

ogrinfo -al triangle_sim.shp    
POLYGON ((30 23,30 504,511 504,511 503,30 23))

我不确定为什么还有一个“单个像素”步骤,从511 504511 503。这可能是由于OGR使用的简化算法的性质。提高简化容差似乎不起作用。它接近你想要的,你可以尝试使用不同软件的相同方法(使用简化算法),看看你是否得到了预期的结果。