3D视觉绕不开的点云配准!一文搞懂所有主流方案与挑战

点击下方卡片,关注“自动驾驶之心”公众号

戳我-> 领取自动驾驶近15个方向学习路线

>>点击进入→自动驾驶之心点云处理技术交流群

论文作者 | 3D视觉之心

编辑 | 自动驾驶之心

作为点集合的点云有望在3D重建、工业检测和机器人操作中,在获取和生成物体的三维(3D)表面信息方面带来一场改变。最具挑战性但必不可少的过程是点云配准,即获得一个空间变换,该变换将在两个不同坐标中获取的两个点云对齐并匹配。这篇综述介绍了点云配准的概述和基本原理,对各种方法进行了系统的分类和比较,并解决了点云配准中存在的技术问题,试图为该领域以外的学术研究人员和工程师提供指导,并促进对点云配准统一愿景的讨论。

也欢迎大家加入【3D视觉之心】点云处理技术交流群

f2ec50b15b3477df9ee4a1f884f92fc5.jpeg

点云获取的一般方式

分为主动和被动方式,由传感器主动获取的点云为主动方式,后期通过重建的方式为被动。

5fdebb5cab316cea3bb5c072b5a59777.png

从SFM到MVS的密集重建。(a) SFM。(b) SfM生成的点云示例。(c) PMVS算法流程图,一种基于patch的多视角立体算法。(d) PMVS生成的密集点云示例。

cd2c941f6c9a3189f46eb44295851f20.png

结构光重建方法:

ca574234155fa599de8d124897d53103.png

刚性配准和非刚性配准

刚性配准假设在一个环境中,变换可以分解为旋转和平移,从而在适当的刚性变换后,一个点云被映射到另一点云,同时保持相同的形状和大小。

在非刚性配准中,建立非刚性变换以将扫描数据wrap到目标点云。非刚性变换包含反射、旋转、缩放和平移,而不是刚性配准中仅包含平移和旋转。非刚性配准的使用主要有两个原因:(1) 数据采集的非线性和校准误差会导致刚性物体扫描的低频扭曲;(2) 对随着时间改变其形状的和移动场景或目标执行配准。

dfa806d935f86bc5b4c58f524e43c410.png

刚性配准的示例:(a)两个点云:读取点云(绿色)和参考点云(红色);在不使用(b)和使用(c)刚性配准算法的情况下,点云融合到公共坐标系中。

209ac32a1aabd6fd5751ca39c2740e5b.png 3448e49f134c0f637b3bb98385453fa7.png

然而,点云配准的性能被Variant Overlap、噪声和异常值、高计算成本、配准成功的各种指标受限。

配准的方法有哪些?

在过去的几十年里,人们提出了越来越多的点云配准方法,从经典的ICP算法到与深度学习技术相结合的解决方案。

1)ICP方案

ICP算法是一种迭代算法,可以在理想条件下确保配准的准确性、收敛速度和稳定性。从某种意义上说,ICP可以被视为期望最大化(EM)问题,因此它基于对应关系计算和更新新的变换,然后应用于读取数据,直到误差度量收敛。然而,这不能保证ICP达到全局最优,ICP算法可以大致分为四个步骤:如下图所示,点选择、点匹配、点拒绝和误差度量最小化。

fc04b67951926df9a0e26c9f05d064f4.png dd1819adb203fe2d77397f49ccc8c772.png

2)基于特征的方法

正如我们在基于ICP的算法中所看到的,在变换估计之前,建立对应关系是至关重要的。如果我们获得描述两个点云之间正确关系的适当对应关系,则可以保证最终结果。因此,我们可以在扫描目标上粘贴地标,或者在后处理中手动拾取等效点对,以计算感兴趣点(拾取点)的变换,这种变换最终可以应用于读取点云。如图12(c)所示,点云加载在同一坐标系中,并绘制成不同的颜色。图12(a)和12(b)显示了在不同视点捕获的两个点云,分别从参考数据和读取数据中选择点对,配准结果如图12(d)所示。然而,这些方法对不能附着地标的测量对象既不友好,也不能应用于需要自动配准的应用。同时,为了最小化对应关系的搜索空间,并避免在基于ICP的算法中假设初始变换,引入了基于特征的配准,其中提取了研究人员设计的关键点。通常,关键点检测和对应关系建立是该方法的主要步骤。

1a33c84015bb3be8c64594869fd3df86.png

关键点提取的常用方法包括PFH、SHOT等,设计一种算法来去除异常值和有效地基于inliers的估计变换同样很重要。

3)基于学习的方法

在使用点云作为输入的应用程序中,估计特征描述符的传统策略在很大程度上依赖于点云中目标的独特几何特性。然而,现实世界的数据往往因目标而异,可能包含平面、异常值和噪声。此外,去除的失配通常包含有用的信息,可以用于学习。基于学习的技术可以适用于对语义信息进行编码,并且可以在特定任务中推广。大多数与机器学习技术集成的配准策略比经典方法更快、更稳健,并灵活地扩展到其他任务,如物体姿态估计和物体分类。同样,基于学习的点云配准的一个关键挑战是如何提取对点云的空间变化不变、对噪声和异常值更具鲁棒性的特征。

基于学习的方法代表作为:PointNet 、PointNet++ 、PCRNet  、Deep Global Registration 、Deep Closest Point、Partial Registration Network 、Robust Point Matching 、PointNetLK 、3DRegNet。

4)具有概率密度函数的方法

基于概率密度函数(PDF)的点云配准,使得使用统计模型进行配准是一个研究得很好的问题,该方法的关键思想是用特定的概率密度函数表示数据,如高斯混合模型(GMM)和正态分布(ND)。配准任务被重新表述为对齐两个相应分布的问题,然后是测量和最小化它们之间的统计差异的目标函数。同时,由于PDF的表示,点云可以被视为一个分布,而不是许多单独的点,因此它避免了对对应关系的估计,并具有良好的抗噪声性能,但通常比基于ICP的方法慢。

5)其它方法

Fast Global Registration  。快速全局配准(FGR)为点云配准提供了一种无需初始化的快速策略。具体来说,FGR对覆盖的表面的候选匹配进行操作并且不执行对应关系更新或最近点查询,该方法的特殊之处在于,可以直接通过在表面上密集定义的鲁棒目标的单个优化来产生联合配准。然而,现有的解决点云配准的方法通常在两个点云之间产生候选或多个对应关系,然后计算和更新全局结果。此外,在快速全局配准中,在优化中会立即建立对应关系,并且不会在以下步骤中再次进行估计。因此,避免了昂贵的最近邻查找,以保持低的计算成本。结果,迭代步骤中用于每个对应关系的线性处理和用于姿态估计的线性系统是有效的。FGR在多个数据集上进行评估,如UWA基准和Stanford Bunny,与点对点和点顶线的ICP以及Go ICP等ICP变体进行比较。实验表明FGR在存在噪声的情况下表现出色!

892f759fa2647cf76c599083bf9a125e.png

四点一致集算法:4点全等集(4PCS)提供了用于读取数据的初始变换,而不需要起始位置假设。通常,两点云之间的刚性配准变换可以由一对三元组唯一定义,其中一个来自参考数据,另一个来自读取数据。然而,在这种方法中,它通过在小的潜在集合中搜索来寻找特殊的 4-points bases,即每个点云中的4共面全等点,如图27所示。在最大公共点集(LCP)问题中求解最佳刚性变换。当成对点云的重叠率较低并且存在异常值时,该算法实现了接近的性能。为了适应不同的应用,许多研究人员介绍了与经典4PCS解决方案相关的更重要的工作。

c9b6810c8c1533d596d00092eecfb871.png

参考

[1] A Tutorial Review on Point Cloud Registrations: Principle, Classification, Comparison, and Technology Challenges

投稿作者为『自动驾驶之心知识星球』特邀嘉宾,欢迎加入交流!

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测车道线检测轨迹预测在线高精地图世界模型点云3D目标检测目标跟踪Occupancy、cuda与TensorRT模型部署大模型与自动驾驶Nerf语义分割自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

a339c043b04145e42562f0fcdc53238d.png 网页端官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

国内最大最专业,近2700人的交流社区,已得到大多数自动驾驶公司的认可!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知2D/3D检测、语义分割、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案大模型、端到端等,更有行业动态和岗位发布!欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频

44acd84c54577512441f7cefe3de6b55.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦2D/3D目标检测、语义分割、车道线检测、目标跟踪、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、在线地图、点云处理、端到端自动驾驶、SLAM与高精地图、深度估计、轨迹预测、NeRF、Gaussian Splatting、规划控制、模型部署落地、cuda加速、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

f879f721ba4e803068149026ef92f2de.jpeg

④【自动驾驶之心】平台矩阵,欢迎联系我们!

790a1496e942e93d1abc13f20ca00821.jpeg

### PointNet 点云方法及实现 #### 方法概述 PointNet 是一种直接处理无序点集的有效神经网络架构,适用于多种三维数据处理任务。对于点云而言,PointNet 及其变体通过提取局部和全局特征来建立两个不同视角下的点云之间的对应关系[^1]。 #### 特征提取机制 为了使模型具备旋转和平移不变性,PointNet 设计了一种特殊的最大池化层(Max Pooling),该操作可以在输入点集中找到最具代表性的特征并将其作为整个集合的全局描述符。这种设计使得即使面对杂乱的数据分布也能稳定工作。具体来说,在前馈过程中,每个点都会被映射成高维空间中的一个向量;随后这些向量经过共享MLP计算后送入最大池化单元得到最终的全局特征表示。 #### 流程详解 在实际应用中,基于PointNet 的点云则依赖于迭代最近邻算法(ICP)的思想来进行优化求解: - **初始化阶段**:给定源点云 \( P_s \) 和目标点云 \( P_t \),先利用随机方式选取初始变换矩阵 \( T_0 \)[^1]。 - **特征匹环节**:采用PointNet 提取两组点云各自的全局特征,并以此为基础构建相似度测量函数以寻找最佳匹对\( (p_i^{(s)}, p_j^{(t)})\) 。此步骤通常会引入额外的空间约束条件确保合理性。 - **更新转换参数**:根据已知的匹结果调整当前估计的姿态变化\[T_k\], 使用最小二乘法或其他数值优化技术最小化误差项直到收敛为止。 ```python import numpy as np from sklearn.neighbors import NearestNeighbors def icp_pointnet(source_points, target_points, init_transform=np.eye(4)): """ Perform ICP with PointNet features. Args: source_points: Source point cloud array of shape (N, 3). target_points: Target point cloud array of shape (M, 3). init_transform: Initial transformation matrix. Returns: Final transformation matrix aligning the source to the target. """ # Extract global descriptors from both clouds using pre-trained PointNet model src_desc = extract_global_descriptor(source_points) tgt_desc = extract_global_descriptor(target_points) prev_error = float('inf') transform = init_transform.copy() while True: # Find nearest neighbors based on descriptor similarity nn_indices = find_nearest_neighbors(src_desc, tgt_desc) # Compute new alignment between corresponding points pairs updated_transform = compute_rigid_transformation( source_points, target_points[nn_indices], initial_guess=transform ) transformed_src = apply_transform(source_points, updated_transform) current_error = calculate_registration_error(transformed_src, target_points) if abs(prev_error - current_error) < 1e-6 or iteration >= max_iterations: break prev_error = current_error transform = updated_transform return transform def extract_global_descriptor(points): """Placeholder function simulating extraction via a trained PointNet.""" pass def find_nearest_neighbors(desc_a, desc_b): """Find closest matches across two sets of descriptors.""" nbrs = NearestNeighbors(n_neighbors=1).fit(desc_b) distances, indices = nbrs.kneighbors(desc_a) return indices.flatten() def compute_rigid_transformation(pts_from, pts_to, initial_guess=None): """Compute optimal rigid body motion mapping one set onto another.""" pass def apply_transform(points, trans_matrix): """Apply homogeneous coordinate transformation.""" homog_coords = np.hstack([points, np.ones((len(points), 1))]) transf_pts = (trans_matrix @ homog_coords.T).T[:, :3] return transf_pts def calculate_registration_error(moved_source, fixed_target): """Measure how well aligned two point clouds are after applying estimated transform.""" pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值