IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用Python对扫描点云数据与三维模型进行坐标系对齐计算

    52txr发表于 2024-06-27 14:25:06
    love 0

    使用激光扫描的时候,扫描的坐标系世界和使用三维软件建模的坐标系世界,两个系统各自有自己的一个参考系。例如在下图中,坐标系O-xyz和坐标系O'-x'y'z'分别表示两个系统的坐标原点。只要能找到这两个坐标系之间的变换关系,那么两个坐标系下的位姿就可以通过这个变换关系相互变换。

    空间坐标对齐

    使用PolyWorks获得坐标矩阵

    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代码进行坐标转换:

    代码效果

    在下面的图片中,黄色的是对齐后的点云数据,白色的是三维模型模型。可以看到是统一到一起了,且效果不错。

    对齐的效果



沪ICP备19023445号-2号
友情链接