我正在尝试使用RANSAC算法,即本文中的RANSAC实现:http://cg.cs.uni-bonn.de/en/publications/paper-details/schnabel-2007-efficient/
我使用作者提供的代码库。我试图将对象分割,就像用Kinect 1获得的杯子一样,形成原始形状。
我的问题是,每当我在同一个对象点云上运行原始形状检测时,我得到不同的结果,就像一次运行我被检测到3个圆柱体和一个圆锥体,并且在下一次运行中我被检测到2个圆环和1球。
我知道候选对象原语的第一个点是随机选取的。所以在代码中我将随机种子参数设置为静态数字。在那种情况下,我的结果总是和它应该的一样。但是,即使使用像实际时间这样的非静态种子,RANSAC也不应该产生相同或几乎相同的结果吗?
答案 0 :(得分: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,但在一组时间/计算资源中无法保证。
现在,我不知道你提到的具体实现,但这就是它对这种算法的作用。
答案 1 :(得分:0)
好吧,由于RANSAC有一个随机组件,算法的精度(结果的可变性)取决于您尝试检测和分割的场景/对象的复杂程度。
在运行基于RANSAC的算法时,有许多因素在准确度和精度方面起作用。它通常是数据分辨率(在这种情况下为点密度),对象的复杂性以及检测和分割中使用的方法的函数。
通常,在处理中使用随机组件时,一个好主意是多次运行相同的场景/对象并通过某种投票(频率论方法),选择最可能的结果。