0

我正在试验 RANSAC 算法,即本文中的 RANSAC 实现:http:  //cg.cs.uni-bonn.de/en/publications/paper-details/schnabel-2007-efficient/

我使用作者提供的代码库。我正在尝试将对象(例如使用 Kinect 1 获得的杯子)分割成原始形状。

我的问题是,每次我在同一个对象点云上运行原始形状检测时,我都会得到不同的结果,比如一次运行我检测到 3 个圆柱体和一个圆锥体,而下一次运行我检测到 2 个圆环和 1 个球体.

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

4

2 回答 2

1

RANSAC 代表 RANdom SAmple Consensus,是一种迭代算法,在其习惯形式中,在最大迭代次数或达到某个标准(误差最小化)后停止。“随机”部分意味着根据数据集,应用 RANSAC 可能并不总是产生相同的结果,尤其是当它因为达到最大迭代次数而不是充分最小化错误而停止时。有许多数值求解器具有这种行为。 在计算中,蒙特卡洛算法是一种随机算法,其运行时间是确定性的,但其输出可能以一定(通常很小)的概率不正确。它与所谓的“拉斯维加斯”算法相反。在计算中,拉斯维加斯算法是一种随机算法,总是给出正确的结果;也就是说,它总是产生正确的结果或通知失败,但它不能保证在一组时间/计算资源内这样做。

现在,我不知道你提到的具体实现,但这就是这种算法的工作原理。

于 2015-04-21T14:44:12.390 回答
0

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

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

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

于 2017-04-05T13:46:36.937 回答