【发布时间】:2016-02-11 07:43:22
【问题描述】:
我正在寻找能够解决此问题的算法。
问题:
我有以下设定点:
我想将代表一条线(带有一些 epsilon)的点分组为一组。 因此,最佳输出将类似于:
一些注意事项:
- 该点属于唯一一条线。
- 如果该点可以属于两条线,它应该属于最强的。
- 当一条线拥有更多的归属点时,它被认为比另一条线更强。
- 算法不应覆盖所有点,因为它们可能是异常值。
- 空间包含许多异常值,可能达到总空间的 50%。
- 性能至关重要,实时是必须的。
我目前找到的解决方案:
1) 将其作为聚类问题处理:
这种方法的主要缺点是没有点之间的直接距离度量。距离度量在集群本身上(多少是线性的)。所以,我不能使用传统的聚类方法,我必须(据我所知)使用某种方法,例如,对我们的遗传算法进行聚类,其中评估发生在 while 集群上,而不是两点之间。当我瞄准实时解决方案时,我也不想使用遗传算法之类的东西。
2) 累积对然后进行聚类:
虽然很难直接对点进行聚类,但我想提取成对的点,然后尝试将它们与其他点进行聚类。所以,我在两对之间有一个可以代表线性的距离(两对是真正的 4 点)。 这种方法的缺点是如何选择这些对?如果我依赖它们之间的 Ecledian-Distance,它可能不准确,因为两点可能彼此如此接近,但它们与其他点相距甚远。
我感谢任何解决方案、建议、线索或注释。请您询问任何澄清。
附:您可以使用任何现成的 OpenCV 函数来考虑任何解决方案。
【问题讨论】:
-
您看过 RANSAC 线路检测吗?但是你的线条彼此非常接近,这使得它更加困难。并且:如果你问我,我会以不同的方式对一些行进行分组。
-
和/或看看不同的方法:csd.uwo.ca/~yuri/Papers/ijcv10_pearl.pdf
-
非常感谢您的论文
-
@Micka 我尝试了您推荐给我的 Sequential-RANSAC。结果太棒了。没想到世上还有这种事!如果您想添加答案以便我接受,或者稍后我可能会添加详细的答案以及一些示例和结果。非常感谢:)
-
我很想看到自己的答案(您可以接受自己的答案),因为您自己编写了解决方案。我期待看到结果和(如果您愿意并且被允许)一些代码或算法实现提示:D
标签: opencv line grouping cluster-analysis