ICP点云配准原理及优化
ICP算法简介
根据点云数据所包含的空间信息,可以直接利用点云数据进行配准。主流算法为最近迭代算法(ICP,Iterative Closest Point),该算法是根据点云数据首先构造局部几何特征,然后再根据局部几何特征进行点云数据重定位。
一、 ICP原理
假设两个点云数据集合P和G,要通过P转换到G(假设两组点云存在局部几何特征相似的部分),可以通过P叉乘四元矩阵进行旋转平移变换到G,或者SVD法将P转换到G位置,总体思想都是需要一个4x4的旋转平移矩阵。对于每次旋转平移变换后计算P的所有(采样)点到G对应(最近)点的距离,用最小二乘法(求方差)求出最小二乘误差,看是否在要求的范围内,如果最小二乘误差小于设定的值,(或迭代次数达到上限,或每次重新迭代后最小二乘误差总在一个很小的范围内不再发生变化),则计算结束,否则继续进行迭代。
粗配准优化方法:主成分分析法
精配准优化方法:基于正交投影的ICp算法改进
二、粗配准优化
PCA是一种有效的检测数据集简化分析方法,用于减少数据集的维数,同时保持数据集对方差贡献最大特征,对于点集P(x1,x2,…,xn),其中,xi是n维数据,均值和协方差矩阵分别为:
$\bar x = \frac{{\mathop \sum \nolimits_{i = 1}^n {x_i}}}{n}$
${\rm{cov}} = \frac{{\mathop \sum \nolimits_{i = 1}^n \left( {{x_i} - \bar x} \right){{\left( {{x_i} - \bar x} \right)}^T}}}{n}$
协方差矩阵cov的特征向量,即为点集P的主轴。对于三维点云数据,以均值为坐标系的原点,PCA求得的三个特征向量对应XYZ轴,建立点云的参考坐标系。
由于PCA反应了数据集对方差贡献的最大特征,相似度大的两片点云,只要把其参考坐标系调整到一致,即可达到初始配准的目的。由于可能出现坐标轴的两个方向相差180o的情况,需要建立最小包围盒来测试两片点云是否调整重合,通过坐标变换可以将数据点云包围盒变换到模型点云参考坐标系中,使两包围盒的空间位置大体一致。计算包围盒的重合体积,如果大于某一设定的容差,则两片点云大致重合,如果小于设定容差,则反转数据点云参考坐标系坐标轴再次尝试。通过坐标系调整后,即可达到点云的初始配准目的,为下一步的精确配准提供较好的初值。
三、精配准优化
通过初始配准,两片点云大致重合但是误差精度还远远达不到实际应用中的精度要求。为了使用点云间的误差达到最小,还需要对其进行精确配准。ICP算法是最常用的数据精确配准方法,算法在每次迭代的过程中,对数据点云的每一点,在模型点云中寻找欧氏距离最近点作为对应点,通过这组对应点使目标函数s2最小化:
${{\rm{s}}^2} = {\rm{min}}\mathop \sum \limits_{i = 1}^N {\left\| {{Q_i} - \left( {R{P_i} + t} \right)} \right\|^2}$
来得到最优的四维转换矩阵(包含平移和旋转),将四维变换矩阵作用到点云数据上,得到新的数据点云带入下次迭代过程。但是ICP算法具有比较明显的缺陷,要求数据点云上的每一点在模型点云上都要找到对应点,为了寻找对应点,算法需要遍历模型点云上的每一点,配准速度很慢,且容易陷入局部最优解。
由于ICP算法的时间消耗主要花费在计算对应点集上,如果能降低此步骤的时间消耗,即可以提高ICP算法效率,具体计算请参考博客点云对齐。
ICP点云配准原理及优化的更多相关文章
- FPFH+ICP点云配准
A, UniformSampling降噪 B, ISS计算关键点, FPFH特征 在FeatureCloud::setInputCloud中读入点云,并调用processInput进行处理: proc ...
- 使用正态分布变换(Normal Distributions Transform)进行点云配准
正态分布变换算法是一个配准算法,它应用于三维点的统计模型,使用标准优化技术来确定两个点云间的最优的匹配,因为其在配准过程中不利用对应点的特征计算和匹配,所以时间比其他方法快.下面是PCL官网上的一个例 ...
- PCL点云配准(1)
在逆向工程,计算机视觉,文物数字化等领域中,由于点云的不完整,旋转错位,平移错位等,使得要得到的完整的点云就需要对局部点云进行配准,为了得到被测物体的完整数据模型,需要确定一个合适的坐标系,将从各个视 ...
- 3D点云配准算法简述
蝶恋花·槛菊愁烟兰泣露 槛菊愁烟兰泣露,罗幕轻寒,燕子双飞去. 明月不谙离恨苦,斜光到晓穿朱户. 昨夜西风凋碧树,独上高楼,望尽天涯路. 欲寄彩笺兼尺素.山长水阔知何处? --晏殊 导读: 3D点云 ...
- CVPR2020:训练多视图三维点云配准
CVPR2020:训练多视图三维点云配准 Learning Multiview 3D Point Cloud Registration 源代码和预训练模型:https://github.com/zgo ...
- MeshLab中进行点云配准
MeshLab是一个开源.可移植和可扩展的三维几何处理系统,主要用于交互处理和非结构化编辑三维三角形网格.它支持多种文件格式: import:PLY, STL, OFF, OBJ, 3DS, COLL ...
- 点云配准的端到端深度神经网络:ICCV2019论文解读
点云配准的端到端深度神经网络:ICCV2019论文解读 DeepVCP: An End-to-End Deep Neural Network for Point Cloud Registration ...
- 3D点云重建原理及Pytorch实现
3D点云重建原理及Pytorch实现 Pytorch: Learning Efficient Point Cloud Generation for Dense 3D Object Reconstruc ...
- 【实战分享】又拍云 OpenResty / Nginx 服务优化实践
2018 年 11 月 17 日,由 OpenResty 主办的 OpenResty Con 2018 在杭州举行.本次 OpenResty Con 的主题涉及 OpenResty 的新开源特性.业界 ...
随机推荐
- UVa 11988 Broken Keyboard(数组模拟链表)
题目链接: https://cn.vjudge.net/problem/UVA-11988 /* 问题 将一段文本经过一定的规则处理后输出,规则就是[表示home键,表示光标跳到行首,]表示end键, ...
- 【Linux】apt-get 源地址汇总
修改etc/apt/sources.list文件 deb http://mirrors.163.com/ubuntu/ lucid main restricted universe multivers ...
- 【C#数据结构系列】查找
一:查找 1.1 基本概念和术语 查找(Search)是在数据结构中确定是否存在关键码等于给定关键码的记录的过程.关键码有主关键码和次关键码.主关键码能够唯一区分各个不同的记录,次关键码通常不能唯一区 ...
- Java - 数组解析
java提高篇(十八)-----数组之一:认识JAVA数组 一.什么是数组 数组?什么是数组?在我印象中的数组是应该这样的:通过new关键字创建并组装他们,通过使用整形索引值访问它的元素,并且它的尺寸 ...
- Hibernate中的事务隔离问题(脏读、不可重复读、幻读)
Hibernate中的事务隔离问题(脏读.不可重复读.幻读) 1.事务的特性 事务的四个特性: 1)原子性:事务是进行数据库操作的最小单位,所以组成事务的各种操作是不可分割的 2)一致性:组成事务的各 ...
- SpingBoot —— 多线程
Spring 通过任务执行器(TaskExecutor)来实现多线程和并发编程.使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.而实际开发中任务一般是非 ...
- CentOS 7开启防火墙端口
1.开启防火墙 systemctl start firewalld 2.添加 firewall-cmd --zone=public --add-port=80/tcp --permanent 3.重新 ...
- JS代理模式实现图片预加载
---恢复内容开始--- 刚刚说了懒加载,现在我们来搞搞预加载吧 预加载的核心: 图片等静态资源在使用前提前请求. 资源后续使用可以直接从缓存中加载,提升用户体验. 几个误区: 预加载不是为了减少页面 ...
- 【代码笔记】iOS-将字符串中特定后的字变成红色
一,效果图. 二,代码. ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup ...
- Linux nohup命令应用简介--让Linux的进程不受终端影响
nohup命令应用简介--让Linux的进程不受终端影响 by:授客 QQ:1033553122 #开启ping进程 [root@localhost ~]# ping localhost & ...