PCL点云配准(3)
(1)关于点云的配准
1.首先给定源点云与目标点云。
2.提取特征确定对应点
3.估计匹配点对应的变换矩阵
4.应用变换矩阵到源点云到目标点云的变换

配准的流程图

通过特征点的匹配步骤
(1)计算源点云与目标点云的关键点
(2)计算关键点的特征描述子(比如:FPFH等等)
(3)匹配特征点计算出对应关系
(4)从特征点之间的对应关系估算变换矩阵

与Opencv中使用harris 角点等特征点来计算两幅图像之间的变换矩阵的原理是一样的,所以其中用到的算法的思路和工作流程也都很相似
有很多中方法来计算转换矩阵T = (R,t),如果给定了配对点(Di,Mi):
(1)通过点对点的方式
(2)点对平面的方式
(3)平面到平面之间的配对,等等
基于SVD分解的最小化点对点的最小距离的方法(最小方差误差的公式):

那么肯定会有误匹配,去除错误匹配点(局外点)的方法采用RANSAC方法
(1)找出三对对应的匹配点(Di ,Mi)
(2)根据这些点估算转换矩阵(R,t)
(3)对于匹配点满足
一定条件的设为内点
(4)重复上面的步骤N次,直到(R,t)有很多的内点

初始匹配(可以看见非常多的误匹配)

经过RANSAC算法计算后的匹配
找到了特征点之间的转换矩阵之后我们想完全的的对应源点云与目标点云还要用到ICP 算法
如图所示

我们认为M作为模型设置点,S作为对应的场景,我们认为S上的每一个点都有与之对应的M上的点。如果有正确的配准点我们是已知的,就可以找到两者之间的旋转与平移,那么如果找到一个误差最小的配准呢?就要用到ICP算法,其算法流程

算法的伪码如下:

关注微信公众号,加入群聊

PCL点云配准(3)的更多相关文章
- PCL点云配准(1)
在逆向工程,计算机视觉,文物数字化等领域中,由于点云的不完整,旋转错位,平移错位等,使得要得到的完整的点云就需要对局部点云进行配准,为了得到被测物体的完整数据模型,需要确定一个合适的坐标系,将从各个视 ...
- PCL点云配准(2)
(1)正态分布变换进行配准(normal Distributions Transform) 介绍关于如何使用正态分布算法来确定两个大型点云之间的刚体变换,正态分布变换算法是一个配准算法,它应用于三维点 ...
- PCL点云库:ICP算法
ICP(Iterative Closest Point迭代最近点)算法是一种点集对点集配准方法.在VTK.PCL.MRPT.MeshLab等C++库或软件中都有实现,可以参见维基百科中的ICP Alg ...
- 使用正态分布变换(Normal Distributions Transform)进行点云配准
正态分布变换算法是一个配准算法,它应用于三维点的统计模型,使用标准优化技术来确定两个点云间的最优的匹配,因为其在配准过程中不利用对应点的特征计算和匹配,所以时间比其他方法快.下面是PCL官网上的一个例 ...
- PCL点云特征描述与提取(1)
3D点云特征描述与提取是点云信息处理中最基础也是最关键的一部分,点云的识别.分割,重采样,配准曲面重建等处理大部分算法,都严重依赖特征描述与提取的结果.从尺度上来分,一般分为局部特征的描述和全局特征的 ...
- PCL点云库(Point Cloud Library)简介
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=29 什么是PCL PCL(Point Cloud Library)是在吸收了 ...
- MeshLab中进行点云配准
MeshLab是一个开源.可移植和可扩展的三维几何处理系统,主要用于交互处理和非结构化编辑三维三角形网格.它支持多种文件格式: import:PLY, STL, OFF, OBJ, 3DS, COLL ...
- PCL中点云数据格式之间的转化
(1) 关于pcl::PCLPointCloud2::Ptr和pcl::PointCloud<pcl::PointXYZ>两中数据结构的区别 pcl::PointXYZ::PointXYZ ...
- PCL点云库中的坐标系(CoordinateSystem)
博客转载自:https://blog.csdn.net/qq_33624918/article/details/80488590 引言 世上本没有坐标系,用的人多了,便定义了坐标系统用来定位.地理坐标 ...
随机推荐
- 用java写图片
登录注册的时候都会有图片验证,这是为了防止暴力破解和恶意注册.写一个思路来实现验证图片的实现,只是一个思路,随机生成文字并没有写. import java.awt.Color; import java ...
- MySQL(五)
关系 创建成绩表scores,结构如下 id 学生 科目 成绩 思考:学生列应该存什么信息呢? 答:学生列的数据不是在这里新建的,而应该从学生表引用过来,关系也是一条数据:根据范式要求应该存储学生的编 ...
- Space Elevator [POJ2392] [DP][优化]
题目大意 n件物品,第i件hi高,有ci件,最高的一件不能超过ai的高度.问最高能堆多高 输入: 第一行,一个n 接下来每一行,为hi,ai,ci 输出,最高堆多高 样例输入: 37 40 35 23 ...
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C. String Reconstruction 并查集
C. String Reconstruction 题目连接: http://codeforces.com/contest/828/problem/C Description Ivan had stri ...
- word2vec skip-gram系列2
Word2Vec的CBOW模型和Skip-gram模型 故事先从NNLM模型说起,网络结构图如下图所示,接下来先具体阐述下这个网络, 输入是个one-hot representation的向量.比如你 ...
- svn提交报错Previous operation has not finished; run 'cleanup' if it was interrupted
从SVN上拉下来Document文档(word和excel),在本地修改后,准备通过TortoiseSVN提交,发现报错. Error: Previous operation has not fini ...
- zepto 选中select option 的值
1,网上搜的,感觉蛮好用的,先存着 $('#sel').find('option').not(function() {return !this.selected;}).val();
- kvm部署
第一:安装前准备 vmware workstation的虚拟机做kvm实验,需要开启嵌套虚拟化 1.首先在物理机BIOS设置里开启虚拟化功能 2.其次需要在vm里面开启一下两个功能,(关闭虚拟机勾选即 ...
- pygame-KidsCanCode系列jumpy-part9-使用spritesheet
做过前端的兄弟应该都知道css sprite(也称css精灵),这是一种常用的减少http请求次数的优化手段.把很多小图拼成一张大图,只加载1次,然后用css定位到不区的区域,从而展示不同的图片.游戏 ...
- strncpy, strncpy_s
Defined in header <string.h> (1) char *strncpy( char *dest, const char *src, size_t co ...