具体来说,我正在尝试从游戏“小行星”的屏幕截图中提取所有相关的线段。我查看了各种边缘检测方法,但似乎没有一个适合我的问题,原因有两个:
它们检测平滑的轮廓,而我只需要检测直线段,并且只需要检测一定长度范围内的直线段。现在,这些约束应该使我的任务比一般情况要容易得多,但我不想只使用一个完整的边缘检测器然后清除曲线的结果,因为那样会非常昂贵。速度对于我的目的来说是最重要的。
他们输出一个修改后的图像,其中边缘是高光,而我想要一组像素坐标来描述检测到的线段的端点。或者,每个片段中包含的所有像素的列表也可以使用。
我有一种可能的解决方案将涉及霍夫变换的暗示,但我不知道如何使用它来获取线段的实际位置(即像素空间中的端点)。尽管即使我这样做了,我也不知道这是否是最简单或最有效的做事方式,因此问题标题的一般措辞。
最后,这是一个示例图像:
请注意,所有主要线条的长度和密度都相似,并且整体图像对比度非常高。我希望我的问题的解决方案将利用这些功能,因为同样,效率是最重要的。
一个警告:虽然此上下文中的大多数线段都是多边形的一部分,但我不想要依赖于这一事实的解决方案。