PPF算法原理解析

首先需要指出容易混淆的地方:(1)一个是实际场景中的物体S(位姿未知),一个是已知位姿的该物体M,然后算法的目的之一是求解场景中该物体的位姿;(2)ppf特征F,一个键值可能对应一些列的点对集,并非只对应一个,即满足某些几何关系的点对集可能有许多组;

**第一步:**计算模型(位姿已知)的PPF特征,模型中所有点对都需要计算一遍,PPF特征计算规则如下:

PPF算法 python ppf算法全称_PPF算法 python


**第二步:**将上述计算得到的所有F值与对应的点对集,放入一张Hash表中,注意!!此处Hash表中的所有PPF特征是基于 已知物体 的点对集计算得到的,并且一个F值可能对应许多点对,因为它们的几何关系可能正好相同。

PPF算法 python ppf算法全称_位姿_02


**第三步:**选取实际场景中该物体表面上的一点Sr(假设选择的点就是表面上的一点),然后计算其与剩余点的PPF特征,得到一系列F(Sr, Si)

**第四步:**以其中某个F值进行讲解,F(Sr, S1)通过查找已经建立好的Hash表,会在表中找到相似的F值以及与之对应的多组点对集(Mr1, mi)(Mr2,mi)等等。
注意:此时已经开始记录 Mri 的次数了,即场景中Sr这点,到底对应已知模型中哪个Mr呢?

与此同时,针对某一组(Mr1,m1),将Sr与Mr1在空间中重合放置,同时将两组点对的法向量重合放置,此时另外一点边大概率是不会重合的,因此可以计算出旋转角度A后,可以重合。

PPF算法 python ppf算法全称_旋转角度_03


此时,针对F(Sr, S1)这一个PPF特征,我们会在Hash表中得到,许多可能的Mri的出现频次,以及一系列旋转角度A,均作为之后投票的依据;

而有许多许多组的F(Sr, Si)需要经过同样的处理步骤,由此就可以有所谓的投票;对Mri出现的情况以及旋转角度A出现的情况进行统计,就可以得到最优的(Mr, A)

注意:这个(Mr, A)就是最有可能,是实际场景中Sr与已知模型M中一一对应的点 Sr------Mr,而这个旋转角度A就是,针对Sr和Mr这两点,它们的旋转角度的差,即能够得到实际场景中物体的位姿了。