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

原文地址:https://www.cnblogs.com/ghjnwk/p/10170701.html

时间: 2024-10-22 18:59:46

28 利用平面对应关系求解RT空间转换矩阵的相关文章

利用反射将Datatable、SqlDataReader转换成List模型

1. DataTable转IList 1 public class DataTableToList<T>whereT :new() 2 3 { 4 5 ///<summary> 6 7 ///利用反射将Datatable转换成List模型 8 9 ///</summary> 10 11 ///<param name="dt"></param> 12 13 ///<returns></returns> 1

ACM:归并排序,以及利用归并排序思想求解逆序对数!

(一)归并排序 分析: (1)划分问题:把序列分成元素个数尽量相等的两半. (2)递归求解:把两半元素分别排序. (3)合并问题:把两个有序表合并成一个.(每次只需要把两个序列的最小元素加以比较,删除其中的较小元素并加入合并后的新表) #include <iostream> using namespace std; const int MAXN = 1000; int A[MAXN], T[MAXN]; void merge_sort(int *A, int x, int y, int *T)

DirectX学习笔记(五):利用平面着色和Gouraud着色模式绘制具有颜色的三角形

前言: 图元的颜色是由构成该图元的顶点的颜色所决定的,而物体是由图元索组成.那么如果我们要绘制一个具有颜色的三角形,我们就需要为三角形图元顶点附加颜色属性. 1.Direct3D中颜色的表示: 在Direct3D中,颜色用RGB来表示(这个大家都知道,咳咳.)通畅人为颜色可以分为红色(red).绿色(green).蓝色(bule).这三个分量进行混合,以达到我们想要的颜色取得目的.RGB的数据可以用两种方式来进行存储一种是D3DCOLOR ,另一种是:DWORD.这是因为D3DCOLOR完全等同

利用QR算法求解矩阵的特征值和特征向量

利用QR算法求解矩阵的特征值和特征向量 为了求解一般矩阵(不是那种幼稚到shi的2 x 2矩阵)的特征值. 根据定义的话,很可能需要求解高阶方程... 这明显是个坑...高阶方程你肿么破... 折腾了好久 1.我要求特征值和特征向量. 2.找到一种算法QR分解矩阵求解特征值 3.QR矩阵分解需要Gram-schimidt正交化分解 有一种很明显的感觉,往往在现在很难有 很系统 很深入 的学习某一个学科的某一门知识. 往往学的时候"靠,学这东西有什么用""学了这么久,也不知道怎么用,不想学" 到后

利用回溯法求解背包问题

最近看完了利用回溯法求八皇后问题,最后成功求解到92种解法,然后在看利用贪心求解背包问题,突然想到其实也可以利用回溯法求解背包问题,本质上回溯法是一个穷举的方式在求. 回溯法求解出的结果肯定是正确的,这也可以验证自己所写的贪心算法的正确性. 问题描诉: 设定Wmax为最大重量,W[](0~n-1)为编号0~n-1的货物重量,V[](0~n-1)为其价值,x[]为其中解, 在wn=ΣXi*Wi<Wmax的条件下,求Vmax=ΣXi*Vi. 代码如下: //全局变量最大价值int maxvalue=

hdu 4651 Partition (利用五边形定理求解切割数)

下面内容摘自维基百科: 五边形数定理[编辑] 五边形数定理是一个由欧拉发现的数学定理,描写叙述欧拉函数展开式的特性[1] [2].欧拉函数的展开式例如以下: 亦即 欧拉函数展开后,有些次方项被消去,仅仅留下次方项为1, 2, 5, 7, 12, ...的项次,留下来的次方恰为广义五边形数. 当中符号为- - + + - - + + ..... 若将上式视为幂级数,其收敛半径为1,只是若仅仅是当作形式幂级数(formal power series)来考虑,就不会考虑其收敛半径. 和切割函数的关系

hdu 4651 Partition (利用五边形定理求解分割数)

以下内容摘自维基百科: 五边形数定理[编辑] 五边形数定理是一个由欧拉发现的数学定理,描述欧拉函数展开式的特性[1] [2].欧拉函数的展开式如下: 亦即 欧拉函数展开后,有些次方项被消去,只留下次方项为1, 2, 5, 7, 12, ...的项次,留下来的次方恰为广义五边形数. 其中符号为- - + + - - + + ..... 若将上式视为幂级数,其收敛半径为1,不过若只是当作形式幂级数(formal power series)来考虑,就不会考虑其收敛半径. 和分割函数的关系 欧拉函数的倒

利用数据结构栈求解迷宫问题

本段程序主要利用数据结构栈的先进后出特点,实现回溯求解迷宫路径问题. #include<iostream> #include<stack> using namespace std; //坐标类 struct Point { int x; int y; }; //地图类 template<int A> struct Map { int (*p)[A]; int row;//行数 int col;//列数 }; //start起始点, end终止点 template<

如何利用CAD看图把CAD转换成DXF?

如何利用CAD看图把CAD转换成DXF?在我们打开一张CAD图纸文件进行查看的时候,如果想要对图纸格式进行更改应该如何进行操作呢,一键转换的操作能不能够进行实现呢?今天小编就要来教教大家如何利用CAD看图把CAD转换成DXF格式呢?以下为全部操作步骤,希望大家进行采纳哦! 第一步:首先要打开您电脑上面的CAD看图软件,如果您电脑上没有一款看图软件的话,您可以去到官网上面下载,小编用的就是"迅捷CAD看图",需要的可以去到下载就和小编使用一样的看图软件了!第二步:将软件下载好之后将软件安