【问题标题】:Grouping points that represent lines对表示线的点进行分组
【发布时间】:2016-02-11 07:43:22
【问题描述】:

我正在寻找能够解决此问题的算法。

问题:

我有以下设定点:

我想将代表一条线(带有一些 epsilon)的点分组为一组。 因此,最佳输出将类似于:

一些注意事项:

  1. 该点属于唯一一条线。
  2. 如果该点可以属于两条线,它应该属于最强的。
  3. 当一条线拥有更多的归属点时,它被认为比另一条线更强。
  4. 算法不应覆盖所有点,因为它们可能是异常值。
  5. 空间包含许多异常值,可能达到总空间的 50%。
  6. 性能至关重要,实时是必须的。

我目前找到的解决方案:

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


【解决方案1】:

正如Micka 建议的那样,我使用 Sequential-RANSAC 来解决我的问题。结果非常棒,完全符合我的要求。 这个想法很简单:

  1. 在点上应用带有拟合线模型的 RANSAC。
  2. 删除属于 RANSAC 输出的所有点。
  3. 如果有 2 个或更多点,请转到 1。

我已经实现了自己的 fit-line RANSAC,但遗憾的是我无法共享代码,因为它属于我工作的公司。但是,在 SO 上有一个出色的拟合线 RANSAC,由Srinath Sridhar 实施。帖子的链接是:RANSAC-like implementation for arbitrary 2D sets

根据我上面提到的 3 个简单步骤,制作 Sequential-RANSAC 很容易。

以下是一些结果:

【讨论】:

    猜你喜欢
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 2016-12-18
    • 2015-04-07
    • 2019-10-13
    • 2012-04-22
    相关资源
    最近更新 更多