使用激光扫描的时候,扫描的坐标系世界和使用三维软件建模的坐标系世界,两个系统各自有自己的一个参考系。例如在下图中,坐标系O-xyz和坐标系O'-x'y'z'分别表示两个系统的坐标原点。只要能找到这两个坐标系之间的变换关系,那么两个坐标系下的位姿就可以通过这个变换关系相互变换。
PolyWorks是一个非常好用的激光扫描文件点云处理的工具。现在我们基于PolyWorks获得扫描件与三维模型的对齐矩阵。
首先在PolyWorks中导入扫描文件,然后导入三维数模。导入后如下图所示。分别是按照各自的空间坐标系排布。因此需要进行空间匹配,并得到旋转矩阵,用于校准点云数据。
导入数据之后,点击PolyWorks里的对齐“最佳拟合数据至参考对象”按钮。在预对齐中,选择“点对”,默认为自动。然后点击“开始”。
然后在视图中将扫描模型与实际模型大概放在一个位置,然后选择至少三个对应的点。点击对齐按钮,如果弹出“错误:达到收敛目标之前,对齐已在最大迭代数时结束”窗口,可忽略。
配准后的示例如下图所示。可以主观评估对齐效果,尽可能达到更好的对齐效果。因为越好的对齐效果越有利于后续计算的稳定性。
对其之后,导出变化矩阵。
输出的矩阵文件内容如下图所示。
导出的扫描数据如下面所示,前面三列是点云的X Y Z坐标。所以对齐的代码只需要读取前三列即可。
555.985535 -72.625725 -3272.608398 -0.110528 0.093429 0.989472
553.566406 -73.965317 -3273.238525 -0.387960 0.469482 0.793141
553.601746 -74.012733 -3273.042236 -0.450596 0.505849 0.735582
553.654663 -73.781631 -3273.128418 -0.471242 0.502691 0.724729
553.056396 -74.056168 -3273.303223 -0.147987 0.136725 0.979493
553.064941 -73.768669 -3273.331543 -0.101114 0.148256 0.983766
553.085266 -74.081276 -3273.208008 -0.140293 0.110404 0.983935
下面是使用Python代码进行坐标转换:
在下面的图片中,黄色的是对齐后的点云数据,白色的是三维模型模型。可以看到是统一到一起了,且效果不错。