三维点云配准过程详解:算法原理及推导

‍‍作者 | 刘缘, 编辑 | 深蓝AI、 自动驾驶Daily

1

点云配准过程

就是求一个两个点云之间的旋转平移矩阵(rigid transform or euclidean transform 刚性变换或欧式变换),将源点云(source cloud)变换到目标点云(target cloud)相同的坐标系下。

可以表示为以下的方程:

outside_default.png

其中outside_default.pngoutside_default.png就是target cloud与source cloud中的一对对应点。

而我们要求的就是其中的R与T旋转平移矩阵。

这里,我们并不知道两个点集中点的对应关系。这也就是配准的核心问题。

2

配准分为粗配准与精配准两步

粗配准就是再两个点云还差得十万八千里、完全不清楚两个点云的相对位置关系的情况下,找到一个这两个点云近似的旋转平移矩阵(不一定很精确,但是已经大概是对的了)。

精配准就是在已知一个旋转平移的初值的情况下(这个初值大概已经是正确的了),进一步计算得到更加精确的旋转平移矩阵。

这里从精配准开始讲起。

精配准的模式基本上已经固定为使用ICP算法及其各种变种。ICP算法由Besl and McKay 1992, Method for registration of 3-D shapes文章提出。

文中提到的算法不仅仅考虑了点集与点集之间的配准,还有点集到模型、模型到模型的配准等。

简要介绍一下点集到点集ICP配准的算法:

1) ICP算法核心是最小化一个目标函数:

outside_default.png

(这里的表述与原文略微有些不同,原文是用四元数加上一个偏移向量来表达旋转平移变换。)outside_default.png就是一对对应点,总共有outside_default.png对对应点。这个目标函数实际上就是所有对应点之间的欧式距离的平方和。

2) 寻找对应点

可是,我们现在并不知道有哪些对应点。因此,我们在有初值的情况下,假设用初始的旋转平移矩阵对source cloud进行变换,得到的一个变换后的点云。

然后将这个变换后的点云与target cloud进行比较,只要两个点云中存在距离小于一定阈值(这就是题主所说的ICP中的一个参数),我们就认为这两个点就是对应点。这也是"最邻近点"这个说法的来源。

3) R、T优化

有了对应点之后,我们就可以用对应点对旋转R与平移T进行估计。这里R和T中只有6个自由度,而我们的对应点数量是庞大的(存在多余观测值)。因此,我们可以采用最小二乘等方法求解最优的旋转平移矩阵。一个数值优化问题,这里就不详细讲了。

4) 迭代

我们优化得到了一个新的R与T,导致了一些点转换后的位置发生变化,一些最邻近点对也相应的发生了变化。

因此,我们又回到了步骤2)中的寻找最邻近点方法。2)3)步骤不停迭代进行,直到满足一些迭代终止条件,如R、T的变化量小于一定值,或者上述目标函数的变化小于一定值,或者邻近点对不再变化等。(这里也是题主所说的ICP算法中的一个参数)

算法大致流程就是上面这样。这里的优化过程是一个贪心的策略。首先固定R跟T利用最邻近算法找到最优的点对,然后固定最优的点对来优化R和T,依次反复迭代进行。

这两个步骤都使得目标函数值下降,所以ICP算法总是收敛的,这也就是原文中收敛性的证明过程。这种优化思想与K均值聚类的优化思想非常相似,固定类中心优化每个点的类别,固定每个点的类别优化类中心。

关于参数的选择:

ICP算法的参数主要有两个。一个是ICP的邻近距离,另外一个是迭代的终止条件。这些参数的选择,与实际的工程应用相关。比如说你的仪器精度是5mm,那么小于5mm是可以认为是对应点,而最终的迭代终止条件也就是匹配点之间平均距离小于5mm。

而且这些参数可以由算法逐步迭代减小,最初使用较大的对应点距离参数,然后逐步减小到一个较小的值。(问过师兄才知道实际过程这样操作会比较合适。)需要手动调整一些参数。(这跟机器学习调参比起来,简直不是事~)

3

粗配准

前面介绍到了,ICP算法的基本原理。它需要一个旋转平移矩阵的初值。这个初值如果不太正确,那么由于它的greedy优化的策略,会使其目标函数下降到某一个局部最优点(当然也是一个错误的旋转平移矩阵)。因此,我们需要找到一个比较准确的初值,这也就是粗配准需要做的。

粗配准目前来说还是一个难点。针对于不同的数据,有许多不同的方法被提出。
我们先介绍配准的评价标准,再在这个标准下提出一些搜索策略。

评价标准:比较通用的一个是LCP(Largetst Common Pointset)。给定两个点集P,Q,找到一个变换T(P),使得变换后的P与Q的重叠度最大。在变换后的P内任意一点,如果在容差范围内有另外一个Q的点,则认为该点是重合点。重合点占所有点数量的比例就是重叠度。

解决上述LCP问题,最简单粗暴的方法就是遍历。假设点集P,Q的大小分别为m,n。而找到一个刚体变换需要3对对应点。

那么brute force 搜索的需要outside_default.png的复杂度。对于动辄几百万个点的点云,这种时间复杂度是不可接受的。

因此,许多搜索策略被提出。比较容易想到的是RANSAC之类的搜索方法。而对于不同的场景特点,可以利用需配准点云的特定信息加快搜索。(例如知道点云是由特定形状的面构成的)这里先介绍一个适用于各种点云,不需要先验信息的搜索策略,称为4PC(4 Point Congruent)。

搜索策略:4PC搜索策略是在P,Q中找到四个共面的对应点。

857ad7eb7cf2d6e0de4699fb9dc12ff6.jpeg

如上图所示(来自4PC原文),这四个共面的点相交于e。这里有两个比例在刚体变化下是不变的。(实际上在仿射变换下也是不变的)

outside_default.pngoutside_default.png

而4PC将对于三个点的搜索转换为对e,e'的搜索,从而将复杂度降低到了outside_default.png

这四个点的距离越远,计算得到的转换越稳健。但是这里的四个点的搜索依赖于两个点云的重叠度。

具体的算法可以参考4-Points Congruent Sets for Robust Pairwise Surface Registration的原文。

4PC算法通用性较好,但是对于重叠度较小、或是噪声较大的数据也会出现配准错误或是运行时间过长的问题。针对于不同的场景很多其他的搜索策略也被提出。

这里安利一下我师兄的论文吧~Automatic registration of large-scale urban scene point clouds based on semantic feature points

我们课题组主要是研究室外地面站LiDAR获取的点云配准问题。这种情形下,由于扫描仪内有自动安平装置,Z轴都是竖直方向(重力方向),刚体变换只存在三维平移与平面(XoY面上的)旋转。我们就在场景中搜索竖直的特征线并且得到它们与地面的交点。

48bc0b276398f3928d9f5f16afef7f7e.jpeg

再将这些交点构建出三角形,以三角形的全等关系来得到匹配。

b7428094d55267a97b60af74f9770cae.jpeg

找出其中一致性最好的三角形集合,作为匹配的集合,进行粗配准。

这种方法适用于竖直线较多的场景,比如城区的建筑物的边线、林区树木的树干等。设计的方法还是很巧妙的。当然如果场景内这种特征较少,就比较难以配准。

参考文献

[1] Besl P J, Mckay N D. Method for registration of 3-D shapes[C]// Robotics - DL tentative. International Society for Optics and Photonics, 1992:239-256.

[2] Aiger D, Mitra N J, Cohen-Or D. 4-points congruent sets for robust pairwise surface registration[J]. Acm Transactions on Graphics, 2008, 27(3):85.

[3] Yang B, Dong Z, Liang F, et al. Automatic registration of large-scale urban scene point clouds based on semantic feature points[J]. Isprs Journal of Photogrammetry & Remote Sensing, 2016, 113:43-58.

—END—

高效学习3D视觉三部曲

第一步 加入行业交流群,保持技术的先进性

目前工坊已经建立了3D视觉方向多个社群,包括SLAM、工业3D视觉、自动驾驶方向,细分群包括:[工业方向]三维点云、结构光、机械臂、缺陷检测、三维测量、TOF、相机标定、综合群;[SLAM方向]多传感器融合、ORB-SLAM、激光SLAM、机器人导航、RTK|GPS|UWB等传感器交流群、SLAM综合讨论群;[自动驾驶方向]深度估计、Transformer、毫米波|激光雷达|视觉摄像头传感器讨论群、多传感器标定、自动驾驶综合群等。[三维重建方向]NeRF、colmap、OpenMVS等。除了这些,还有求职、硬件选型、视觉产品落地等交流群。大家可以添加小助理微信: dddvisiona,备注:加群+方向+学校|公司, 小助理会拉你入群。

102297235ccf6ab465f9bb7c68620778.jpeg
添加小助理微信:cv3d007, 拉你入群
第二步 加入知识星球,问题及时得到解答
3.1 「3D视觉从入门到精通」技术星球

针对3D视觉领域的视频课程(三维重建、三维点云、结构光、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)、源码分享、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答等进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业、项目对接为一体的铁杆粉丝聚集区,6000+星球成员为创造更好的AI世界共同进步,知识星球入口:「3D视觉从入门到精通」

学习3D视觉核心技术,扫描查看,3天内无条件退款 68ef9b48119369e46c4bfcb3bfccf81a.jpeg
高质量教程资料、答疑解惑、助你高效解决问题
3.2 3D视觉岗求职星球

本星球:3D视觉岗求职星球 依托于公众号「3D视觉工坊」和「计算机视觉工坊」、「3DCV」,旨在发布3D视觉项目、3D视觉产品、3D视觉算法招聘信息,具体内容主要包括:

  • 收集汇总并发布3D视觉领域优秀企业的最新招聘信息。

  • 发布项目需求,包括2D、3D视觉、深度学习、VSLAM,自动驾驶、三维重建、结构光、机械臂位姿估计与抓取、光场重建、无人机、AR/VR等。

  • 分享3D视觉算法岗的秋招、春招准备攻略,心得体会,内推机会、实习机会等,涉及计算机视觉、SLAM、深度学习、自动驾驶、大数据等方向。

  • 星球内含有多家企业HR及猎头提供就业机会。群主和嘉宾既有21届/22届/23届参与招聘拿到算法offer(含有海康威视、阿里、美团、华为等大厂offer)。

  • 发布3D视觉行业新科技产品,触及行业新动向。

e9d310b0aa221b1603cc69a70968cfc1.jpeg
扫码加入,3D视觉岗求职星球,简历投起来
第三步 系统学习3D视觉,对模块知识体系,深刻理解并运行

如果大家对3D视觉某一个细分方向想系统学习[从理论、代码到实战],推荐3D视觉精品课程学习网址:www.3dcver.com

科研论文写作:

[1]国内首个面向三维视觉的科研方法与学术论文写作教程

基础课程:

[1]面向三维视觉算法的C++重要模块精讲:从零基础入门到进阶

[2]面向三维视觉的Linux嵌入式系统教程[理论+代码+实战]

[3]如何学习相机模型与标定?(代码+实战)

[4]ROS2从入门到精通:理论与实战

[5]彻底理解dToF雷达系统设计[理论+代码+实战]

工业3D视觉方向课程:

[1](第二期)从零搭建一套结构光3D重建系统[理论+源码+实践]

[2]保姆级线结构光(单目&双目)三维重建系统教程

[3]机械臂抓取从入门到实战课程(理论+源码)

[4]三维点云处理:算法与实战汇总

[5]彻底搞懂基于Open3D的点云处理教程!

[6]3D视觉缺陷检测教程:理论与实战!

SLAM方向课程:

[1]深度剖析面向机器人领域的3D激光SLAM技术原理、代码与实战

[1]彻底剖析激光-视觉-IMU-GPS融合SLAM算法:理论推导、代码讲解和实战

[2](第二期)彻底搞懂基于LOAM框架的3D激光SLAM:源码剖析到算法优化

[3]彻底搞懂视觉-惯性SLAM:VINS-Fusion原理精讲与源码剖析

[4]彻底剖析室内、室外激光SLAM关键算法和实战(cartographer+LOAM+LIO-SAM)

[5](第二期)ORB-SLAM3理论讲解与代码精析

视觉三维重建:

[1]彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进

自动驾驶方向课程:

[1] 深度剖析面向自动驾驶领域的车载传感器空间同步(标定)

[2] 国内首个面向自动驾驶目标检测领域的Transformer原理与实战课程

[3]单目深度估计方法:算法梳理与代码实现

[4]面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)

[5]如何将深度学习模型部署到实际工程中?(分类+检测+分割)

无人机:

[1] 零基础入门四旋翼建模与控制(MATLAB仿真)[理论+实战]

最后

1、3D视觉文章投稿作者招募

2、3D视觉课程(自动驾驶、SLAM和工业3D视觉)主讲老师招募

3、顶会论文分享与3D视觉传感器行业直播邀请

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值