zoukankan      html  css  js  c++  java
  • 28 利用平面对应关系求解RT空间转换矩阵

    0 引言

    问题背景:给定CAD模型与点云的情况下,基于CAD比对实现对实测点云的尺寸测量是三维测量技术中一种常用的思路。该思路的关键问题在于
    需要精确求解CAD模型与点云之间的空间转换矩阵。采用ICP(迭代最近邻点算法)的变种,将基于点-点对应关系的算法拓展为基于平面-平面
    的算法。当前,基于二次开发技术求解出了CAD模型中的所有平面,并且基于点云PCL库中的生长聚类算法(regionGrowing做分割,RANSAC
    对平面方程进行拟合)提取出了典型平面,因此希望通过平面-平面对应关系解出二者之间的空间转换矩阵。其中,给定两组平面,求解出面-面
    对应关系是本文探讨的主要问题。
    问题输入:两组平面 vector<myplane> ptsPlanes, cadPlanes, 并假设平面不重复.
    /* myplane为存储平面方程的机构体
    * 1、a,b,c,d为平面一般方程的四个参数:ax + by + cz + d =0;
    * 2、其中,(a,b,c)为平面的法向量,d代表平面的平移向量
    */
    struct myplane{
      double a;
      double b;
      double c;
      double d;
    }
    问题输出:int size =
    ptsPlanes.size();
    int correspondanceRelations[size][2]; 

    1 抽象问题具体化

    举例如下:

      1. 给定点云平面方程如下:

        0.244/-0.668/0.702/11.900
        -0.146/0.690/0.709/-107.045
        0.958/0.277/-0.069/-59.060
        0.958/0.277/-0.070/67.981
        0.244/-0.669/0.702/3.670
        0.244/-0.668/0.703/-127.611
        0.957/0.281/-0.074/79.320
        -0.147/0.688/0.711/26.081
        0.959/0.275/-0.069/-70.594
        -0.145/0.690/0.709/9.024
        -0.141/0.672/0.727/-123.687

      2. 给定CAD模型平面方程如下:

        0.000/0.000/1.000/-0.000
        0.000/0.000/1.000/-8.000
        1.000/-0.000/-0.000/75.000
        -0.000/1.000/-0.000/75.000
        1.000/0.000/0.000/-75.000
        0.000/1.000/0.000/-75.000
        1.000/-0.000/-0.000/58.000
        -0.000/1.000/-0.000/63.500
        1.000/0.000/0.000/-58.000
        0.000/1.000/0.000/-63.500
        0.000/0.000/1.000/-138.000

      3. 基于平面是否平行对模型进行分组,并根据d值降序排列

      3.1 点云平面分组结果:

      第一组

      0.244/-0.668/0.702/13.219
      0.244/-0.669/0.702/4.989
      0.244/-0.669/0.702/-126.284

      第二组  

      0.957/0.282/-0.075/79.085
      0.958/0.277/-0.070/67.768
      0.958/0.277/-0.069/-59.279
      0.959/0.275/-0.068/-70.855

      第三组

      -0.147/0.688/0.710/25.914
      -0.145/0.690/0.709/8.861
      -0.146/0.690/0.709/-107.206
      -0.140/0.668/0.731/-123.745

      3.2 CAD平面分组结果

      第一组  

      0.000/0.000/1.000/-0.000
      0.000/0.000/1.000/-8.000
      0.000/0.000/1.000/-138.000

      第二组

      1.000/-0.000/-0.000/75.000
      1.000/-0.000/-0.000/58.000
      1.000/0.000/0.000/-58.000
      1.000/0.000/0.000/-75.000

      第三组  

      -0.000/1.000/-0.000/75.000
      -0.000/1.000/-0.000/63.500
      0.000/1.000/0.000/-63.500
      0.000/1.000/0.000/-75.000

  • 相关阅读:
    JS基础学习四:绑定事件
    常用JS事件对象
    jq 使用手册
    access数据库根据指定日期进行查询
    IP地址变动后,https://localhost:1158/em无法访问解决办法
    结构体对齐方式
    宏得到当前函数的名字
    std::list保存大量数据时,类型即是无析构函数,该list析构时会占用大量CPU
    装了vs2010 SP1后,开机速度慢
    查询SQL Server版本号
  • 原文地址:https://www.cnblogs.com/ghjnwk/p/10170701.html
Copyright © 2011-2022 走看看