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 引言 世上本没有坐标系,用的人多了,便定义了坐标系统用来定位.地理坐标 ...
随机推荐
- Shell脚本笔记(三)shell中的数学计算
shell中的数学计算 一.使用方括号 #!/bin/bash a= b= c= res=$[$a * ($c-$b)] echo $res 二.使用(()) +)) ((i=+)) b=$((-*) ...
- vue插槽,也就是子页面、父页面相互传值的另一写法
父页面: <template> <div class="parent"> <p>父组件</p> <child> < ...
- CallContext,ThreadStatic,AsyncLocal<T>,ThreadLocal<T>,学习笔记
1.CallContext 在当前调用上下文的线程数据槽里存储对象 2.ThreadStatic 是一个特性 3.AsyncLocal<T> 是一个类型,该字段应当为static,保证单例 ...
- 函数(二):input、raw_input、lambda、repr、map、filter、reduce、eval、exec、range、xrange
一.input()和raw_input(): input()支持用户输入数字或表达式,按类型存或存表达式的计算结果 raw_input():输入所有内容当成字符串存 二.lambda函数:匿名函数 l ...
- hiredis 使用 linux c++
1.linux下如何安装hiredis 1)下载地址 https://github.com/redis/hiredis 2)编译和安装 解压后的文件夹执行 make;make install; 3) ...
- 单向LSTM笔记, LSTM做minist数据集分类
单向LSTM笔记, LSTM做minist数据集分类 先介绍下torch.nn.LSTM()这个API 1.input_size: 每一个时步(time_step)输入到lstm单元的维度.(实际输入 ...
- 生命短暂,意识到开始使用python的重要性,python3.5.3安装和使用篇
原创文章,未经允许不得转载! 之前都是使用C++和R语言做事情.一直觉得c++挺好,好是好,就是有挺多车轱辘得自己造.细想下C++可以调用python,python也可以调用c++.那何不学学pyth ...
- Servlet(4)—一个简单的Servlet实例
简单实例 页面请求登陆,提交表单数据 <body> <form action="loginServlet" method="get"> ...
- ibatis中使用缓存
简单在ibatis中使用cache 首先设置SqlMapConfig.xml中<settings/>节点的属性cacheModelsEnabled="true" ...
- ACC自适应巡航控制系统介绍
本文是关于ACC自适应巡航控制系统的介绍,罗孚从个人视角出发,描述对ACC系统的理解,以及在一些使用场景下的思考. 什么是ACC? ACC系统是在定速巡航装置的基础上发展而来的,区别在于定速巡航只能限 ...