-
首先有一个大循环
TryOneBase
,这是一个大的循环,主要用来计算两个点集间的变换。 -
TryOneBase 首先会 RANSAC P点集的三个点。主要实现在
SelectQuadrilateral
中。按照论文中所说,4PCS 方法首先确定的是一个共面的四元组,实际情况中,完全共面的四个点可能概率极小。所以代码中实现为寻找的是未近临三元组,且距离该平面最近的点。
-
与论文中不同,代码实现对 Q 点集的查询是分两次对一组点进行筛选。
- 首先根据颜色,法向量,距离等信息记录符合条件的第一组点对。
- 以同样的方式记录第二组点对。
- 第一组点和第二组点的交点应该为同一组点,但是实际情况下比较困难找到这么理想情况下的点。于是使用第一组点的假想交点构建 kdtree。然后使用第二组的假想交点进行查询。将符合阈值的两组交点加入到结果中。