Iterative closest point (ICP) 算法
引言
迭代最近点(Iterative closest point,ICP)是用于最小化两个点云之间的差异的算法。 ICP算法最初是由Chen和Medioni 以及Besl和McKay引入的。是对齐三维模型时广泛使用的算法之一,给出了对所需刚体转换的初步猜测。
ICP通常用于将从不同的扫描视图获取的点云数据进行配准,形成一个单一的点云模型,从而可以用于后续的处理步骤中,如定位机器人并实现最佳路径规划(特别是当车轮里程测量由于地形湿滑时不可靠),共同记录骨骼模型等。
算法步骤
输入:参考点云和源点云,转换的初始估计以使源与参考对齐(可选),停止迭代的标准。
输出:配准好的点云模型
计算步骤:
- 对于源点云中的每个点(通常来自称为密集的整个顶点集或来自每个模型的顶点对的选择),匹配参考点云(或选定集)中的最近点。
- 使用均方根点到点距离度量最小化估算旋转和平移的组合,最佳地将每个源点与其在上一步骤中找到的匹配点对齐。 该步骤还可以涉及在对准之前进行加权点和拒绝异常值。
- 使用获得的变换转换源点。
- 迭代(重新关联点,等等)。
另外存在许多ICP算法的变体,其中point-to-point和point-to-plane是最受欢迎的。 point-to-plane通常在结构化环境中表现更好。
算法实现
ICP算法的实现有很多,我这里就不重新实现一遍了,把几个较为常用的比较好的实现的库列出来供参考:
MeshLab:
一个开源网格处理工具,包括ICP算法的GNU通用公共许可证实现。
CloudCompare:
一个开源点和模型处理工具,包括ICP算法的实现。 根据GNU通用公共许可证发布。
PCL(Point Cloud Library):
是一个用于n维点云和3D几何处理的开源框架。 它包括ICP算法的几种变体。
libpointmatcher
在BSD许可下发布的点对点和点对面ICP的实现。
另外在VTK,ITK和Open3D库中提供了ICP算法的开源C ++实现。
Iterative closest point (ICP) 算法相关推荐
- 迭代最近点(Iterative Closest Point, ICP)算法
1. 定义 ICP(Iterative Closest Point,迭代最近点)算法是一种迭代计算方法,主要用于计算机视觉中深度图像的精确拼合,通过不断迭代最小化源数据与目标数据对应点来实现精确地拼合 ...
- 迭代最近点(Iterative Closest Point, ICP)算法及matlab实现
前言 通常,使用RGB-D相机或是其他方法获取到物体的三维点云后,由于采集设备不同.拍摄视角不同等等因素的影响,即使是同一个物体所得到的点云也会有较大的差异,主要是旋转或者平移的变化.对于一组图像数据 ...
- 迭代近邻算法Iterative Closest Point, ICP
参考的文章链接: https://zhuanlan.zhihu.com/p/35893884 https://blog.csdn.net/u014709760/article/details/9924 ...
- VTK修炼之道58:图形基本操作进阶_点云配准技术(迭代最近点ICP算法)
1.Iterative Closest Points算法 点云数据配准最经典的方法是迭代最近点算法(Iterative Closest Points,ICP).ICP算法是一个迭代的过程,每次迭代中对 ...
- 干货 | 三维点云配准:ICP 算法原理及推导
编者荐语 点云配准可以分为粗配准(Coarse Registration)和精配准(Fine Registration)两步.粗配准指的是在两幅点云之间的变换完全未知的情况下进行较为粗糙的配准,目的主 ...
- PCL学习笔记二:Registration (ICP算法)
ICP in PCL Registration 点云配准是什么,维基百科上这样介绍: Point cloud registration, is the process of finding a spa ...
- 点云匹配和ICP算法概述
[原文:http://www.cnblogs.com/yhlx125/p/4955337.html] Iterative Closest Point (ICP) [1][2][3] is an alg ...
- 论文翻译—ICP算法论文(节选1~4章)
标题:A Method for Registration of 3-D Shapes 作者: J. Besl, Neil D. McKay 目录: Ⅰ Introduction Ⅱ Literatur ...
- 迭代最近点算法Iterative Closest Point(ICP)以及c++实现代码
有两组对应的点集(corresponding point sets): 求欧式变换 使得: ICP 算法基于最小二乘法进行迭代计算,使得误差平方和达到极小值: 可通过以下三个步骤进行求解: (1)定 ...
- ICP算法(Iterative Closest Point迭代最近点算法)
最近在做点云匹配,需要用c++实现ICP算法,下面是简单理解,期待高手指正. ICP算法能够使不同的坐标下的点云数据合并到同一个坐标系统中,首先是找到一个可用的变换,配准操作实际是要找到从坐标系1到坐 ...
最新文章
- 第十五周程序阅读-范型程序设计(1)
- ORA-00031: session marked for kill 标记要终止的会话
- mysql模糊匹配like 之 %
- Mongodb和redis书籍调研
- 在Windows上编译MongoDB C Driver
- 【2007-3】【分硬币】
- 统计分组的原则是要体现什么_跨境选品有哪些方法,要遵循什么原则?
- js隐藏打开项目隐藏编辑 和删除按钮
- vue 前端png转pdf_Vue前端HTML保存为PDF的两种常用方式 「干货分享」
- 看电影学英语:不速之客[The Vistor] [二]
- JSP中用request.setAttribute()后,在action中为什么取不到值?
- 23号(一段很好的视频)
- 如何实现:GridView 控件中显示的文本不自动换行,隐藏超出宽度部分wj-wangjun
- AWS和阿里云对比研究二—阿里云
- 初探VBScript
- linux下svn命令使用大全
- html显示等宽字体
- MFC + MDI文件拖拽功能
- layui常用审核弹窗
- 基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理