机器人学在Python中的实现(8):迭代最近点算法

Hello,大家好!我是MPIG2018级研究生陈守钊。今天我给大家讲解的是迭代最近点算法(ICP,Iterative Closest Point迭代最近点),ICP是一种点集对点集配准方法。在计算机应用领域,三维点集配准是一个非常重要的中间步骤,它在表面重建、三维物体识别、相机定位等问题中有着极其重要的应用。

我们先预览一下本章讲解的主要内容:

(1)ICP算法原理

(2)ICP算法具体步骤

(3)代码示例演示

一. ICP算法原理

ICP算法的实质是基于最小二乘法的最优匹配算法,它重复进行“确定对应关系点集—计算最优刚体变换”的过程,直到某个表示正确匹配的收敛准则得到满足。ICP 算法的母的是找到目标点集与参考点之间的旋转R和平移T变换,使得两匹配数据中间满足某种程度度量准则下的最优匹配。

二. ICP算法具体步骤

(2.1) 算法整体流程:

(2.2 )为了更好理解ICP算法的执行过程,我们将ICP算法分为配准元素的选择、配准策略的确定和误差函数的求解等三个方面进行讨论。

1. 配准元素的选择:

利用各种各样的方法来选择配准元素,其主要目的是为了减小点集元素的数目,即对匹配点集进行采样。涉及到采样,可知有多种采样方法被尝试使用。本实验代码示例采用的是随机采样方法,每一次的迭代过程中都要进行随机采样获取不同的采样点进行计算。

2. 配准策略的确定:

寻找对应点对,就必须寻找场景数据点和模型数据点的特征差异,这需要对特征进行度量。在利用特征度量获得对应点以后,还需要利用特征度量建立迭代优化的目标函数,为误差函数的求解奠定基础,ICP算法被提出来时,采用的是欧氏距离作为特征度量。本实验代码代码示例采用的也是欧式距离。

3. 误差函数的求解

误差函数的求解,也就是目标函数的最小化,是ICP算法的最后一个阶段。在求得目标函数后应该采用什么样的方法来求解目标函数,使其值能最快最准的的收敛到最小,也是一个比较重要的问题。传统的ICP算法的目标函数是通过点对点的距离建立的,其求解方法有基于奇异值分解的方法、四元数方法、正交矩阵法和双四元数方法。本实验示例采用奇异值分解法。

上述SVD求解旋转矩阵R,与平移向量T是有严格的数学推导过程的,由于我们只是应用,在这里我并没有做详细的介绍,有疑问的话可以在文章末尾进行留言。

三. 代码示例演示

代码运行结果:

由于没有设置实验误差,最后的匹配结果是完全重合的,两种颜色的点对应两个不同的点集,红色叉叉代表原点。

想要更加详细了解本讲更多细节的内容吗?那就一起来观看下面的Presentation的具体讲解吧:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181219G1HWV500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券