我正在寻找一种能够解决这个问题的算法。
问题:
我有以下设定点:
我想将表示一行(带有一些epsilon)的点分组到一个组中。 因此,最佳输出将是:
有些说明:
我到目前为止找到的解决方案:
1)将其作为群集问题处理:
此方法的主要缺点是点之间存在无直接距离度量。距离度量在群集本身上(线性多少)。所以,我不能使用传统的聚类方法,我必须(据我所想)使用某种方法,例如,聚类我们的遗传算法,其中评估发生在while群集之间而不是两点之间。我也不想使用像遗传算法这样的东西我正在瞄准实时解决方案。
2)累积对然后进行聚类:
虽然难以直接对点进行聚类,但我想到提取点对,然后尝试将它们与其他点聚类。所以,我有两对之间的距离,可以代表线性(两对在真正的4点)。 这种方法的缺点是如何选择这些对?如果我依赖它们之间的Ecledian-Distance,它可能不准确,因为两个点可能彼此如此接近,但它们远远没有与其他点形成一条线。
我感谢任何解决方案,建议,线索或说明。请您澄清一下。
P.S。在考虑任何解决方案时,您可以使用任何现成的OpenCV函数。
答案 0 :(得分:6)
建议Micka,我使用 Sequential-RANSAC 来解决我的问题。结果非常棒,完全符合我的要求。 这个想法很简单:
我已经实现了自己的适配线RANSAC,但不幸的是我无法共享代码,因为它属于我工作的公司。但是,Srinath Sridhar实现了一个优秀的RANSAC配合线。该帖子的链接是:RANSAC-like implementation for arbitrary 2D sets。
根据我上面提到的3个简单步骤,很容易制作Sequential-RANSAC。