如何从边缘检测图像中找到多边形顶点?

时间:2016-08-08 11:31:59

标签: python numpy image-processing signal-processing scikit-image

1。问题

鉴于房屋屋顶的图像,我试图找到屋顶的轮廓。我标记了可用的数据(作为多边形顶点),我插入并创建真实图像,如下所示 ground truth from annotations

我使用canny,hough-lines,LBP功能训练ML模型,结果看起来不错。模型输出显示在中间,测试图像上的叠加显示在右侧。

left original image, middle Model output, right: Output over-layed to original image

2。我需要什么。

最终输出应该是一组多边形,我需要找到应该绘制这些多边形的点(参见下图中突出显示的点)。因此输出可以设置为n个线段。其中每个线段是2个点[(x1,y1),(x2,y2)]

marked image with vertices coded in color

第3。我的想法/想法是什么;

一个。侵蚀,膨胀,开启,关闭,概括操作

虽然这些操作使上图中的线条更整洁,但它们无法帮助我找到我正在寻找的多边形顶点。

我想将(多个)线条拟合到图像中的白色像素(类似于hough线)。

这些线的交点将为我提供我正在寻找的多边形的顶点。

我想知道是否有更标准/更好的方法来实现上述目标。

1 个答案:

答案 0 :(得分:1)

我认为HoughLinesP会帮助您实现目标。它将找到线段并将其输出到向量[x1,y1,x2,y2]中,其中(x,y)对表示线段的起点和终点。

每个顶点应接近 2个或更多个线段的末尾。您将浏览每个端点并计算它们出现的次数。当您处理完所有点后,您可以消除任何少于2次出现的点。当然,您需要一些小的阈值来确定一个点是唯一的,因为行中的间隙有些伪造的代码:dist(point1, point2) < some_delta_threshold

我不确定你现在如何找到多边形,但希望这会提供一些帮助