2015-03-31 143 views
0

我正在试验RANSAC算法,即本文中的RANSAC实现:http://cg.cs.uni-bonn.de/en/publications/paper-details/schnabel-2007-efficient/为什么RANSAC每次在同一个点云上运行时会给我不同的结果?

我使用的代码基础是作者提供的。我试图将物体,比如用Kinect 1获得的杯子分割成原始形状。

我的问题是,每当我在相同的物体点云上运行原始形状检测时,我会得到不同的结果,就像一次运行,我会检测到3个圆柱体和一个圆锥体,并在下一次运行时检测到2圆环和1个球体。

我知道候选对象基元的第一个点是随机选取的。所以在代码中,我将随机种子参数设置为一个静态数字。在这种情况下,我的结果总是与它应该是一样的。但是,即使使用像实际时间那样的非静态种子,RANSAC是否应该产生相同或几乎相同的结果?

回答

1

RANSAC代表RANdom SAmple Consensus,它是一种迭代算法,它在习惯形式下,在最大迭代次数之后停止,或者如果达到某个标准(误差最小化),该算法会停止。 “随机”部分意味着根据数据集的不同,应用RANSAC并不总能得到相同的结果,特别是当它由于达到最大迭代次数而不是最小化误差而停止时。有许多数值求解器表现这种方式。 In computing, a Monte Carlo algorithm is a randomized algorithm whose running time is deterministic, but whose output may be incorrect with a certain (typically small) probability.这与所谓的“拉斯维加斯”算法相反。 In computing, a Las Vegas algorithm is a randomized algorithm that always gives correct results; that is, it always produces the correct result or it informs about the failure,但它不能保证在一组时间/计算资源内这么做。

现在,我不知道你提到的具体实现,但这是它是如何工作的那种算法。

0

好吧,由于RANSAC有一个随机组件,算法的精度(结果的可变性)取决于您尝试检测和分割的场景/对象的复杂程度。

在运行基于RANSAC的算法时,有许多因素会影响准确度和精度。它通常是数据分辨率的函数(在这种情况下为点密度),对象的复杂性以及检测和分割中使用的方法。

通常,在处理中使用随机组件时,一个好主意是多次运行相同的场景/对象,并通过某种投票(频率主义方法),选择最可能的结果。

相关问题