从简单的2D图像中提取线段的简单有效方法是什么?

时间:2011-08-10 08:49:55

标签: image-processing computer-vision edge-detection feature-extraction

具体来说,我试图从游戏'小行星'的截图中提取所有相关的线段。我已经查看了各种边缘检测方法,但似乎没有一个方法适合我的问题,原因有两个:

  1. 它们可以检测到平滑的轮廓,而我只需要检测直线段,并且只检测一定长度范围内的直线段。现在,这些约束应该使我的任务比一般情况更容易,但我不想只使用一个完整的边缘检测器,然后清除曲线的结果,因为这将是非常昂贵的。速度对我的目的至关重要。

  2. 它们输出修改后的图像,其中边缘是高光,而我想要一组像素坐标来描绘检测到的线段的端点。或者,每个段中包含的所有像素的列表也可以使用。

  3. 我有一个可能的解决方案涉及hough transform,但我不知道如何使用它来获取线段的实际位置(即像素空间中的端点)。虽然我做了,但我不知道这是否是最简单或最有效的做事方式,因此问题标题的一般措辞。

    最后,这是一个示例图片:

    enter image description here

    请注意,所有主要线条的长度和密度都相似,并且整体图像对比度非常高。我希望我的问题的解决方案将利用这些功能,因为再次,效率是至关重要的。

    有一点需要注意:虽然此上下文中的大多数线段都是多边形的一部分,但我不想要一个依赖于此事实的解决方案

2 个答案:

答案 0 :(得分:4)

查看the Line Segment Detector算法。

这是他们的所作所为:

enter image description here enter image description here

您可以在页面底部找到令人印象深刻的video

有一个开箱即用的C实现(适用于C ++编译器)。只有一个或两个文件,没有其他依赖项

但是,请注意,该算法属于GNU Allegro GPL许可证。

答案 1 :(得分:1)

另请查看EDlines http://ceng.anadolu.edu.tr/cv/EDLines/

非常快,并提供非常有用的输出