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

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

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

    1. DataTable转IList public class DataTableToList<T>whereT :new() { ///<summary> ///利用反射将D ...

  2. 利用boost做string到wstring转换,以及字符集转换 - Error - C++博客

    利用boost做string到wstring转换,以及字符集转换 - Error - C++博客 利用boost做string到wstring转换,以及字符集转换 #include <boost ...

  3. hough变换中,直线方程从XY空间转换到参数空间的转换过程

    XY空间直线方程:y=kx+b 参数空间直线方程:xcosθ+ysinθ=ρ 直线方程从XY空间转换到参数空间过程的转换过程: k=tan(π-α)=tan(-α)=-tanα=-cotθ=-cosθ ...

  4. C#利用 string.Join 泛型集合快速转换拼接字符串

    C#利用 string.Join 泛型集合快速转换拼接字符串 List<int> superior_list = new List<int>(); superior_list. ...

  5. [转]kaldi特征和模型空间转换

    转:http://blog.csdn.net/shmilyforyq/article/details/76807431 博主话:这篇博客是对kaldi官网中Feature and model-spac ...

  6. 已知(x,y,z,yaw,pitch,roll)如何得到4*4的转换矩阵?

    作者:Nicholas链接:https://www.zhihu.com/question/41514206/answer/104827395来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  7. Java实现 LeetCode 756 金字塔转换矩阵(DFS)

    756. 金字塔转换矩阵 现在,我们用一些方块来堆砌一个金字塔. 每个方块用仅包含一个字母的字符串表示. 使用三元组表示金字塔的堆砌规则如下: 对于三元组(A, B, C) ,"C" ...

  8. ch2_8_1求解n阶螺旋矩阵问题

    思路:循环输出,注意边界控制 import java.util.Scanner; public class ch2_8_1求解n阶螺旋矩阵问题 { public static void main(St ...

  9. 【opencv】 solvepnp 和 solvepnpRansac 求解 【空间三维坐标系 到 图像二维坐标系】的 三维旋转R 和 三维平移 T 【opencv2使用solvepnp求解rt不准的问题】

    参考: pnp问题 与 solvepnp函数:https://www.jianshu.com/p/b97406d8833c 对图片进行二维仿射变换cv2.warpAffine() or 对图片进行二维 ...

随机推荐

  1. php自动生成不重复的id

    PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳.在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据.即使使用了第二个参数,也会重复,最好的方案是结 ...

  2. set,get方法(属性,索引器)

    很多时候我们不可以把一些字段暴露出来允许别人调用和修改,为了隐藏这些字段又便于加限制的使用,在面向对象编程中一般采用写get set函数的办法,比如: //字段_age, "_"表 ...

  3. rem与px的相爱相杀

    rem 简介:为元素设定字体大小:相对大小:只相对HTML根元素. 优点:只修改根元素就可以成比例调整所有字体的大小. bug:IE8及更早版本不兼容. hack:多写一个绝对单位px的声明,不兼容版 ...

  4. 生产者消费者模式-->线程

    #_author:来童星#date:2019/12/17#生产者消费者模式-->线程from queue import Queueimport random,time,threading#生产者 ...

  5. 深入理解Magento – 第十章、十一章(英文原版地址,仅供参考)

    深入理解Magento – 第十章 – Magento系统覆盖和升级 http://alanstorm.com/magento_upgrade_rewrite_override 深入理解MAGENTO ...

  6. PHP学习(MVC架构与面向对象)

    想好好的学一下php中的一些面向对象的知识,以前只是为了打CTF随意的学了一下,但是为了以后的代码审计(准备PHP这边把thinkphp这个框架好好的学一下). PHP面向对象的基本知识 类与对象 类 ...

  7. B/S 和 C/S 架构软件

    1.B/S架构: 通过C语言或java可以实现,使用B/S架构的软件,启动.打开应用和原生软件一样的效果. (正常浏览器打开的应用页面是有地址栏.菜单栏和标签栏的,但是通过配置可以关闭这些窗口,使B/ ...

  8. wmic命令用法小例

    wmic就是wmic.exe,位于windows目录底下,是一个命令行程序.WMIC可以以两种模式执行:交互模式(Interactive mode)和非交互模式(Non-Interactive mod ...

  9. 微信小程序利用canvas生成海报分享图片

    一 . 效果 这是借用女神照生成的分享的海报,图片来自网络. 新增了poster组件和更新图片自适应 二 . 准备 准备两张图片连接,最好是自己开发账号验证的https图片链接. 三 . 实现思路 其 ...

  10. CentOS6 图形界面(gnome)安装

    CentOS6相对于CentOS5的安装有了不少的进步,有不少默认的选项可以选择,如: Desktop :基本的桌面系统,包括常用的桌面软件,如文档查看工具. Minimal Desktop :基本的 ...