SampleConsensusPrerejective(外部RANSAC)如何真正起作用?

问题描述 投票:0回答:1

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

据我所知,该算法从输入云和目标云中获取随机特征,并将输入云投影到目标云上计算出的姿态上。然后计算一个consensus set,经过一些迭代后,以最大的consensus set姿势。到目前为止一切顺利。

但是如何比较这些特征并计算姿势?我还不了解基于点四元组<α, ϕ, θ, d>的特征直方图如何真正起作用。采摘后究竟发生了什么输入云和目标云的三个示例功能?

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

c++ registration point-cloud-library ransac
1个回答
0
投票

我对这个库不太熟悉,但是由于我在相关的优化算法上有很多经验,所以我可以解释RANSAC的一般功能,并且可以提供一些关于它们的算法可能会做什么的想法。

RANSAC是一种非常通用的优化算法,旨在发现异常值时找到解决方案。想象一下,给定一个线性方程a*x_i+b=y_i,并且需要针对给定的ab找到x_iy_i。通常,简单的最小二乘法可以解决问题,但是在存在异常值的情况下,最小二乘法会失败,从而导致完全错误的解决方案。

使用RANSAC时,一个人可以取两个随机索引i,j找到最佳ab,画线并检查给定线与点集(x_i,y_i)近似的程度。然后,在进行一系列尝试后,您选择最佳的解决方案并将其称为解决方案,或者给定最佳的样本集,选择总内线及其解决方案,并使其与它们最匹配。如果给定足够的样本或导致失败,则此方法应筛选出所有异常值-只需检查最终结果即可获得常识。

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

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

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

给定原始云中的特征点(A,B,C)和目标云中的三个匹配特征(X,Y,Z),一个可以确定将(A,B,C)映射到(X,Y,Z)的正正交仿射变换(旋转+移位)-或者如果他们不完全匹配。如果您还考虑负正交变换(反射+旋转+位移),而不仅仅是正变换,则将需要四个点。这只是一个经典的线性代数。在任何情况下,最好采用四点来提高解决方案的准确性,因为数据肯定会嘈杂。

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

如果您只是简单地随机地将特征A,B,C,X,Y,Z随机化,您最终会找到解决方案,但是这将花费大量的时间,因此不切实际。因此,我相信他们有一些方法可以缩小所需的测试数量。假设,如果它们具有函数f,可能是一个非常错误的函数,那么原始云中的每个特征都适合目标云中的匹配项。然后,您可以简单地检查点集(A,B,C)(f(A),f(B),f(C))。但是它们可能具有更复杂和棘手的功能,以实现更好的鲁棒性。

希望它使您对这种算法有所了解。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.