Iterative closest point (ICP) 算法

引言

迭代最近点(Iterative closest point,ICP)是用于最小化两个点云之间的差异的算法。 ICP算法最初是由Chen和Medioni 以及Besl和McKay引入的。是对齐三维模型时广泛使用的算法之一,给出了对所需刚体转换的初步猜测。
ICP通常用于将从不同的扫描视图获取的点云数据进行配准,形成一个单一的点云模型,从而可以用于后续的处理步骤中,如定位机器人并实现最佳路径规划(特别是当车轮里程测量由于地形湿滑时不可靠),共同记录骨骼模型等。

算法步骤

输入:参考点云和源点云,转换的初始估计以使源与参考对齐(可选),停止迭代的标准。
输出:配准好的点云模型
计算步骤:

  1. 对于源点云中的每个点(通常来自称为密集的整个顶点集或来自每个模型的顶点对的选择),匹配参考点云(或选定集)中的最近点。
  2. 使用均方根点到点距离度量最小化估算旋转和平移的组合,最佳地将每个源点与其在上一步骤中找到的匹配点对齐。 该步骤还可以涉及在对准之前进行加权点和拒绝异常值。
  3. 使用获得的变换转换源点。
  4. 迭代(重新关联点,等等)。

另外存在许多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 ++实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值