Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emgu CV(或OpenCV)中多边形集的Voronoi图_Opencv_Emgucv_Polygons_Voronoi - Fatal编程技术网

Emgu CV(或OpenCV)中多边形集的Voronoi图

Emgu CV(或OpenCV)中多边形集的Voronoi图,opencv,emgucv,polygons,voronoi,Opencv,Emgucv,Polygons,Voronoi,使用Emgu CV,我从道路网络图像的等高线中提取了一组闭合多边形。多边形表示道路轮廓。结果如下所示,在OpenStreetMaps地图上绘制(Emgu CV中“像素”形式的多边形已转换为要绘制的纬度/经度形式) 表示道路轮廓的多边形集: 现在我想计算这组多边形的Voronoi图,这将帮助我找到道路的中心线。但在Emgu CV中,我只能找到一种方法来获得点集的Voronoi图。这是通过查找点集的Delaunay三角剖分(使用Subdiv2D类),然后使用GetVoronoiFacets计算vo

使用Emgu CV,我从道路网络图像的等高线中提取了一组闭合多边形。多边形表示道路轮廓。结果如下所示,在OpenStreetMaps地图上绘制(Emgu CV中“像素”形式的多边形已转换为要绘制的纬度/经度形式)

表示道路轮廓的多边形集:

现在我想计算这组多边形的Voronoi图,这将帮助我找到道路的中心线。但在Emgu CV中,我只能找到一种方法来获得点集的Voronoi图。这是通过查找点集的Delaunay三角剖分(使用Subdiv2D类),然后使用GetVoronoiFacets计算voronoi面来完成的

我曾尝试计算集合中所有多边形定义的点的Voronoi图(每个多边形都是点列表),但这给了我一个极其复杂的Voronoi图,正如人们所期望的:

点集的Voronoi图:

此图像显示第一张图片的较小部分(为了清晰起见,因为它非常复杂)。事实上,图表中的一些线似乎代表道路中心线,但还有许多其他线,很难找到提取“好”线的标准

我面临的另一个潜在问题是,正如您应该能够从第一张图片中看出的那样,一些多边形位于其他多边形的内部,因此我们不在一组不相交的
闭合多边形的标准情况下。也就是说,有时道路位于一个多边形的外边界和另一个多边形的内边界之间


我正在寻找关于如何使用Emgu CV(或Open CV)计算多边形集的Voronoi图的建议,希望能够克服我概述的第二个问题。对于如何在不使用Emgu CV的情况下实现这一点,我也愿意接受其他建议

如果已经有多边形,可以尝试计算多边形

我还没试过,但CGAL有一个。请注意,此特定函数是GPL

一个可能的问题可能是:

此CGAL包的当前版本只能构造 带有孔的简单多边形内部的直骨架 它不处理平面中的一般多边形图形


可能有解决办法。例如,可以将所有多边形包含在一个较大的矩形中(这样原始多边形将成为新矩形的孔)。如果原始多边形有孔,则此操作可能无法正常工作。要解决这个问题,您可以对每个有孔的多边形执行算法,然后将所有多边形放在一个矩形中,删除所有孔,然后再次执行算法。

因此,您需要从1)图像开始计算街道的“中心”,使用像素形式(简单)或2)使用点坐标lat,lng?对于1),可以绘制填充多边形,并使用距离变换。街道中心将具有最大距离值。非最大值抑制将为您提供我所需要的图像结果。使用距离变换是个好主意,谢谢。事实上,我可以将距离变换应用于我的原始二值图像,这是我最初通过查找轮廓计算多边形的地方!这很好,因为我不需要处理包含其他多边形的多边形的问题。你能帮我解决非最大值抑制问题吗?我如何在Emgu CV中实现这一点?通过搜索我能找到的最接近的是Harris边缘检测。也就是说,我需要的最终结果是表示道路中心线的横向/纵向图。。。原则上我可以从中心线像素中找到,但这可能不是最好的方法。也许Voronoi graph仍然是一种更好的方法。@Miki,你能给我一些关于如何实现非最大值抑制的帮助吗?嗨,Chris,很抱歉,因为这不是一个真正的答案,但是你是如何使用Emgu CV在地图中获得道路的。这正是我一直想做的。你的是我找到的最接近的东西。干杯,谢谢。