Sampleconsensussrelejective (ext.真的有用吗?

共1个回答, 标签: c++ registration point-cloud-library ransac

赏金12 小时后到期。这个问题的答案有资格获得 50 的声誉奖金。ProgNewbie想要引起更多关注对于这个问题。

我用 pcl 的Sampleconsensusprerjective方法,它工作得很好。我按照教程中的描述使用它。但是我不完全理解 RANSAC 算法是如何工作的。这些特征是用 FPFH 计算的。

据我所知,该算法从输入云和目标云中获取随机特征,并将输入云投影到目标云的计算姿势上。然后计算一个consensus set and after some iteration take the pose with the biggest consensus set。到目前为止还不错。

但是这些特征是如何比较和姿势计算的呢?我还不明白如何基于点四边形的特征直方图<α, ϕ, θ, d>真的很有帮助。从输入和目标云中选择例如三个示例特征后到底会发生什么?

任何人都可以用简单的语言解释接下来会发生什么?非常感谢!

第1个答案
    I am not too familiar with this library but I can explain what RANSAC does in general as well as can provide some ideas as to what their algorithm might be doing as I have a lot of experience in related optimization algorithms.

RANSAC is a very general optimization algorithm designed to find the solution in presence of outliers. Imagine you are given a linear equation a*x_i b=y_i and you need to find a and b for given x_i and y_i。通常简单的最小二乘法解决了这个问题,但是在离群值存在的情况下,最小二乘法失败得很惨 -- 导致了一个完全错误的解决方案。

有了 RANSAC,一个可以取两个随机指数i,j find best a and b, draw the line and check how well this given line approximates the set of points (x_i,y_i)。然后,在一系列尝试之后,你选择最好的一个,称之为解决方案,或者给出最好的样本集,用他们的解决方案选择总的样本,并使它们最适合。这种方法应该过滤掉任何给定足够的样本或导致失败的异常值 -- 人们只需要检查最终结果的常识。

人们也可以玩 “线近似点集的程度”。用户决定标准。在给定阈值的情况下,最大化输入量或最小化中位数的误差。只要有意义就行。

给定错误函数和优化机制,您几乎可以将 RANSAC 应用于任何优化过程。

他们的优化是如何工作的?我不知道。询问他们的开发人员,阅读他们的代码或文档。但是我可以给你提供一些它是如何工作的想法。

给定特征点(A,B,C) in original cloud and three matching features in the target cloud (X,Y,Z) one can determine positive orthogonal affine transformation (rotation shift) that maps (A,B,C) to (X,Y,Z)-或者如果它们不完全匹配,就做一个最合适的。如果你也考虑负正交变换 (反射旋转移位),而不仅仅是正正交变换,那么你需要四个点。这只是一个经典的线性代数。在任何情况下,四点可能是更好的解决方案的准确性,因为数据肯定是嘈杂的。

找到候选解决方案后,可以匹配整个云,看看它们是否与给定的解决方案相匹配 -- 这是错误函数 (查看它们的实现,看看确切的标准)。

如果你简单地随机选择特征 A 、 B 、 C 、 X 、 Y 、 Z,你最终会找到解决方案,但这将花费大量荒谬的时间,使其不切实际。因此,我相信他们有一些方法来缩小所需的测试数量。比方说,如果他们有功能f, possibly a very erroneous one, that for each feature in original cloud fits a match in target cloud. Then you can simply check sets of points (A,B,C) vs (f(A),f(B),f(C))。但是为了更好的稳健性,它们可能有更复杂和更棘手的东西。

希望它能让你对这些算法有所了解。

相关问题

React Laravel 5.8.33 Axios: 使用 axios.post 请求注册用户时出错; 澄清代码问题 Sampleconsensussrelejective (ext.真的有用吗?