C++实现经典的点云配准算法——ICP,根据高博视觉14讲的推导(具体过程看书,还是很好理解的),ICP的计算过程如下所示:

具体的C++代码实现如下:

void pose_estimation_3d3d (const vector<Point3f>& pts1,const vector<Point3f>& pts2,Mat& R, Mat& t
)
{Point3f p1, p2;     // center of massint N = pts1.size();for ( int i=0; i<N; i++ ){p1 += pts1[i];p2 += pts2[i];}p1 = Point3f( Vec3f(p1) /  N);p2 = Point3f( Vec3f(p2) / N);vector<Point3f>     q1 ( N ), q2 ( N ); // remove the centerfor ( int i=0; i<N; i++ ){q1[i] = pts1[i] - p1;q2[i] = pts2[i] - p2;}// compute q1*q2^TEigen::Matrix3d W = Eigen::Matrix3d::Zero();for ( int i=0; i<N; i++ ){W += Eigen::Vector3d ( q1[i].x, q1[i].y, q1[i].z ) * Eigen::Vector3d ( q2[i].x, q2[i].y, q2[i].z ).transpose();}cout<<"W="<<W<<endl;// SVD on WEigen::JacobiSVD<Eigen::Matrix3d> svd ( W, Eigen::ComputeFullU|Eigen::ComputeFullV );Eigen::Matrix3d U = svd.matrixU();Eigen::Matrix3d V = svd.matrixV();if (U.determinant() * V.determinant() < 0){for (int x = 0; x < 3; ++x){U(x, 2) *= -1;}}cout<<"U="<<U<<endl;cout<<"V="<<V<<endl;Eigen::Matrix3d R_ = U* ( V.transpose() );Eigen::Vector3d t_ = Eigen::Vector3d ( p1.x, p1.y, p1.z ) - R_ * Eigen::Vector3d ( p2.x, p2.y, p2.z );// convert to cv::MatR = ( Mat_<double> ( 3,3 ) <<R_ ( 0,0 ), R_ ( 0,1 ), R_ ( 0,2 ),R_ ( 1,0 ), R_ ( 1,1 ), R_ ( 1,2 ),R_ ( 2,0 ), R_ ( 2,1 ), R_ ( 2,2 ));t = ( Mat_<double> ( 3,1 ) << t_ ( 0,0 ), t_ ( 1,0 ), t_ ( 2,0 ) );
}

点云配准之icp的简单实现相关推荐

  1. 点云配准NDT+ICP

    点云配准NDT+ICP #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types. ...

  2. 干货 | 三维点云配准:ICP 算法原理及推导

    编者荐语 点云配准可以分为粗配准(Coarse Registration)和精配准(Fine Registration)两步.粗配准指的是在两幅点云之间的变换完全未知的情况下进行较为粗糙的配准,目的主 ...

  3. 点云配准算法ICP及其各种变体

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨流川峰 来源丨深蓝AI 介绍 点云配准(Point Cloud Registration)算法指 ...

  4. PCL点云配准(ICP)

    /*********************************** 点云配准 *****************************************/ #include <pc ...

  5. 点云配准(二)— python open3d ICP方法

    上一节中介绍了点云配准的基础知识.本节将采用python open3d来进行点云配准. open3d安装和点云配准介绍,请参考: Open3d读写ply点云文件_Coding的叶子的博客-CSDN博客 ...

  6. 点云配准网络 PCRNet: Point Cloud Registration Network using PointNet Encoding 2019

    本文使用PointNet对点云提取全局特征,不需要计算点云之间的一一对应关系,因此能够实现快速的点云配准. PCRNet根本没有用到局部特征,因此在速度上有优势,精度上会有所妥协.加入了局部特征信息的 ...

  7. 点云配准各种方法总结[不定时更新]

    本文主要用来记录我在学习过程中接触到的一些或新或旧的点云配准的方法,有些方法我可能还不怎么理解,如果有错误欢迎大家指出. 2018/04/15 添加LORAX 2018/04/08 添加DO法和结合法 ...

  8. 简述3D点云配准算法

    ​ 蝶恋花·槛菊愁烟兰泣露 槛菊愁烟兰泣露,罗幕轻寒,燕子双飞去. 明月不谙离恨苦,斜光到晓穿朱户. 昨夜西风凋碧树,独上高楼,望尽天涯路. 欲寄彩笺兼尺素.山长水阔知何处? --晏殊 导读: 3D点 ...

  9. 点云配准各种方法总结

    粗配准方案 LORAX 4点法(4-Points Congruent Sets,4PCS) Super 4PCS(Super 4-Points Congruent Sets) SK-4PCS(Sema ...

最新文章

  1. 30分钟,让你彻底明白Promise原理
  2. 【Java 虚拟机原理】Java 类中的类加载初始化细节 ( 只使用类中的常量时加载类不会执行到 ‘初始化‘ 阶段 )
  3. 魏桥集团创始人张士平去世,他是如何成为山东首富的?
  4. 【POJ - 2965】The Pilots Brothers' refrigerator(暴力枚举,思维)
  5. 参数变化_风机盘管参数变化对性能造成的影响
  6. mysql自建云盘_使用nextcloud自建私人云盘
  7. servlet的四种响应
  8. 关于返回一个整数数组中最大子数组的和的问题(续01)
  9. Guava CaseFormat
  10. Java 递归求后一个数是前两个数之和
  11. OpenSSL笔记-PKCS#1和PKCS#8的区别及分别调用的API
  12. PXE启动原理以及与普通Linux启动的对比
  13. Newton-Raphson算法
  14. 手机微信wifi怎么连接到服务器地址,出门在外用手机流量太贵,教你一招,用微信就能连接附近wifi...
  15. wordpress友联_WordPress添加友情链接功能
  16. excel怎么设置打印区域_用offset函数设置打印区域(有新增内容时自动扩展)
  17. ps顶级调色技术解密视频教程 终极大法
  18. jquery.SuperSlide
  19. 计算机组成-无符号数乘法
  20. Python:定时运行脚本

热门文章

  1. RDIFramework.NET平台代码生成器V3.2版本全新发布-更新于2017-02-27(提供下载-免费使用)...
  2. 支持向量机(SVM)原理及实现
  3. VR点亮元宇宙丨酷雷曼与你相约2022世界VR产业大会
  4. rust 从转移说起
  5. MATLAB给变量新加一行或者一列
  6. 华为数通笔记-MPLS virtual private network
  7. 【深入设计模式】迭代器模式模式—什么是迭代器模式?
  8. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
  9. [极客大挑战 2019]Http1
  10. 亚马逊、Reddit及Mozilla等公司下个月将举行“网络中立”抗议活动