在三维重建的过程中每次只能测量有限的区域,那么拼接的操作就再所难免了,最终拼接的效果往往觉得了你做的产品是否真的有价值。很多市面上的产品在比较的时候首先看的是整体的重建效果,而整体的效果就是拼接决定的。拼接的效果由精度和效率决定的,首先是精度主要看最终拼接的点云之间融合的好坏,其次的效率,效率主要考察的是在拼接的过程是否流畅,是否需要很多标记点,好的拼接效率就是在使用少量的标记点也能拼接出高精度的效果。

拼接的精度是由你使用的算法决定的,拼接的终极思想就是计算出两幅点云的[R,T],其中最方法很多,我介绍的是基于SVD分解的方式,敲公式太麻烦了,还是手写的吧!!

CalcRalteR_T(_vPoint3 &vPtsA,_vPoint3 &vPtsB,CvMat *&matR,CvMat *&matT)
{CExternalLibrary Clapack;int i,j;VECTOR3 meanA;meanA.x=0;meanA.y=0;meanA.z=0;for (i=0;i<vPtsA.size();i++){meanA+=vPtsA[i];}meanA=meanA/vPtsA.size()VECTOR3 meanB;meanB.x=0;meanB.y=0;meanB.z=0;for (j=0;j<vPtsB.size();j++){meanB+=vPtsB[j];}meanB=meanB/vPtsB.size();_vVector3 substractmeanA;_vVector3 substractmeanB;for (int m=0;m<vPtsA.size();m++){VECTOR3 result=vPtsA[m]-meanA;substractmeanA.push_back(result);}for (int n=0;n<vPtsB.size();n++){VECTOR3 result=vPtsB[n]-meanB;substractmeanB.push_back(result);}float matData[9];for (int ii=0;ii<9;ii++){matData[ii]=0.0f;}float matData1[3];for (int jj=0;jj<3;jj++){matData1[jj]=0.0f;}CvMat matTet=cvMat(3,3,CV_32FC1,matData);//matR=cvCreateMat(3,3,CV_32FC1);CvMat *matTet1=cvCreateMat(3,3,CV_32FC1);for (i=0;i<3;i++){for (j=0;j<3;j++){cvSetReal2D(matTet1,i,j,0);}}CvMat matA1,matB1,*matB1Transpose;matB1Transpose=cvCreateMat(3,1,CV_32FC1);for (i=0;i<vPtsA.size();i++){float b1[3]={substractmeanB[i].x,substractmeanB[i].y,substractmeanB[i].z};float a1[3]={substractmeanA[i].x,substractmeanA[i].y,substractmeanA[i].z};matB1=cvMat(1,3,CV_32FC1,b1);matA1=cvMat(1,3,CV_32FC1,a1);}cvReleaseMat(&matB1Transpose);CvMat *matW,*matU,*matV;matW=cvCreateMat(3,1,CV_32FC1);matU=cvCreateMat(3,3,CV_32FC1);matV=cvCreateMat(3,3,CV_32FC1)CvMat *matX;CvMat *matUTranspose;matX=cvCreateMat(3,3,CV_32FC1);matUTranspose=cvCreateMat(3,3,CV_32FC1);//matT=cvCreateMat(1,3,CV_32FC1);cvSub(&matMeanA,matBMeanMulMatR,matT);cvReleaseMat(&matW);cvReleaseMat(&matU);cvReleaseMat(&matV);cvReleaseMat(&matBMeanMulMatR);cvReleaseMat(&matUTranspose);cvReleaseMat(&matTet1);cvReleaseMat(&matX);}

交流 QQ:1264768501



三维点云拼接 标记点拼接 SVD分解法相关推荐

  1. SLAM--三角测量SVD分解法、最小二乘法及R t矩阵的判断

    目录 一.三角测量 方法一:SVD分解法的推导 方法二:最小二乘法求解 二.ORB_SLAM2 三角测量源码: 三.利用Eigen源码实现三角测量: 方法一:SVD分解法 方法二:最小二乘法求解(速度 ...

  2. 深度相机Kinect2.0三维点云拼接实验(三)

    文章目录 概要 刚体空间旋转的描述 旋转矩阵 欧拉角 四元数 刚体空间平移的描述 总结 概要   Kinect2.0是微软推出的一款RGB-D相机,它即支持普通相机的拍摄,也支持脉冲测量深度信息.本系 ...

  3. 深度相机Kinect2.0三维点云拼接实验(二)

    文章目录 摘要 Linux系统下的环境搭建 Ubuntu系统安装 ROS-Melodic安装 Kinect2.0驱动安装 PCL库安装 Open-CV库安装 注意事项 Windows10系统下的环境搭 ...

  4. PCL三维点云拼接融合技术

    转自:https://blog.csdn.net/dcba2014/article/details/71859375?locationNum=2&fps=1 本例使用pcd格式点云文件进行配准 ...

  5. 三维点云语义分割总览

    点云PCL免费知识星球,点云论文速读. 标题:三维点云语义分割总览 作者:吉祥街 欢迎各位加入免费知识星球,获取PDF文档,欢迎转发朋友圈,分享快乐. 希望有更多的小伙伴能够加入我们,一起开启论文阅读 ...

  6. 三维点云的深度学习研究综述

    作者丨aaa 来源丨https://zhuanlan.zhihu.com/p/455210291 编辑丨3D视觉工坊 摘要 点云学习由于在计算机视觉.自动驾驶.机器人等领域的广泛应用,近年来受到越来越 ...

  7. TPAMI三维点云深度学习技术综述

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨单博 来源丨 笑傲算法江湖 点击进入->3D视觉工坊学习交流群 国防科大 IEEE TPA ...

  8. 二十八. 智能驾驶笔记之基于PointNet++的三维点云分类和语义分割

    第一部分 基于三维点云的分类和语义分割介绍 第二部分 PointNet和PointNet++ 第三部分 PointNet++关键代码分析 第一部分 基于三维点云的分类和语义分割介绍 基于二维图像的神经 ...

  9. 三维点云学习(9)5-实现RANSAC Registration配准

    三维点云学习(9)5-实现RANSAC Registration配准 参考博客: 机器视觉之 ICP算法和RANSAC算法 三维点云配准 ICP点云配准原理及优化 本章因个人能力有限,大部分代码摘自g ...

最新文章

  1. 计算机书籍-机器学习入门之道
  2. 农村黑产,才是真正的硬核朋克!
  3. AV1为何有信心打败H.265?
  4. 如何在Jsp上传图片
  5. 浅谈Vue.js的优势
  6. C语言1013山东理工大学试题,山东理工大学史上最全C语言PPTC程序设计(2基本数据与运算).ppt...
  7. java取multipart_spring的multipartResolver和java后端获取的MultipartHttpServletRequest方法对比...
  8. 开源软件史上最大收购案!IBM340亿美元收购Linux分销商Red Hat
  9. linux-jmeter负载机配置记录
  10. 怎样加入社区项目Karbor的Review?
  11. 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件
  12. Shine——更简单的Android网络请求库封装
  13. C语言实现客房管理系统
  14. backtrader_plotting报错Unexpected data type
  15. 计算机系统(六):应用层(上篇)
  16. laravel+ajax分页操作
  17. 成都榆熙:拼多多产地直发模式如何解决了流通环节多的问题?
  18. matlab 一元方程程序,用牛顿方法解一元非线性方程的根(Matlab实现)
  19. 服务器出错的原因有哪些 原
  20. windows操作系统知识点

热门文章

  1. java sql timestamp_java.sql.timestamp
  2. checkbox选中时如何改变默认样式
  3. const int *,const int * const和int const *之间的区别
  4. 【转载】损失函数 - 交叉熵损失函数
  5. PyQt5 基本教程
  6. 引言-知识技能树(数据分析相关)
  7. 【JS】JSON.stringify( )
  8. Linux 登录MySQL出现 unknown variable...错误
  9. 攻防世界_Crypto_Decrypt-the-Message
  10. linux内核级调用时间delay函数,及常用文件头