点云配准——(1)几种点云配准算法比较

几种点云配准算法比较

参考许多博客,看了点云配准的好多算法,决定对这几天搞得点云配准做一个总结,主要也防止自己忘掉。主要参考下面这个博客,链接已经附上。
https://blog.youkuaiyun.com/peach_blossom/article/details/78506184

一、算法实现软硬件环境

CPU:intel corei5-5200 @2.20Hz

显卡:Nvidia GeForce GTX 850M

内存:8GB

操作系统:Windows 10 专业版

开发环境:Vs2013 +pcl1.8.0(release)

点云配准数据集:不同角度下的bunny rabbit

二、点云配准比较

2.1 配准目标
根据原始点云和目标点云,通过配准求出变换矩阵,即旋转矩阵R和平移矩阵T,并计算误差,来比较匹配结果。主要有以下几种比较
(1)基于局部特征描述子(PFH、FPFH、3Dsc);
(2)基于概率分布 (NDT);
(3)icp粗配准比较 。

2.2 配准目标
(1)提取关键点
(2)特征描述
(3)一致性估计
(4)精配准
(5)误差分析:有一片点云,通过一直的旋转变换得到目标点云,让后通过下面几种配准方法,求出R、T,和实际变换矩阵比较,得到误差。

2.3 粗配准比较
粗配准的各种算法原理不加以介绍,好多博客中已经给出了详解。配准中,由于不同点云数据集的特性,需要提取不同关键点。本文统一对数据集进行滤波采样,减少点的数量,来提高算法的效率。

2.3.1 结果图分析
原始图
**a原始图**
pfh粗配准
pfh
fpfh粗配准
在这里插入图片描述
3Dsc粗配准
在这里插入图片描述
ndt粗配准
在这里插入图片描述

2.3.2 时间分析

时间分析

2.3.3变换矩阵分析
变换矩阵结构为

R3*3T1*3
01

在这里插入图片描述

2.3.4误差分析
在这里插入图片描述

2.4 粗配准中的icp用法

icp配准一般用于精配准中,我看了看网上博客,似乎可以直接进行配准,所以对两组不同角度的点云数据集进行配准。得到的结果如下:
在这里插入图片描述
t=0.063s
在这里插入图片描述
t=0.05s

在icp粗配准,当给不同的数据集时(R、T不同时的点云),icp可能陷入局部最优解,故icp一般用于精配准中,且需要提供良好的初值。

综上,粗配准方案中,算法耗时时间依次为NDT<FPFH<PFH<3Dsc;其中FPFH特征为PFH特征描述子的改进。NDT耗时少,但从上述图中观察,初值提供不够精确。其中旋转矩阵R和平移矩阵T已经列出。

2.4 完全配准比较
下面对上述几种粗配准方案中,加上精配准。然后对结果进行比较。
2.4.1 结果图分析
在这里插入图片描述
pfh+icp
在这里插入图片描述
fpfh+icp
在这里插入图片描述
3Dsc+icp
在这里插入图片描述
ndt+icp

2.4.2 时间分析
在这里插入图片描述
2.4.3变换矩阵分析
在这里插入图片描述

2.4.4误差分析
在这里插入图片描述
可以得出,配准精度最高的是3Dsc,但耗时最长。
耗时:ndt<fpfh<pfh<3dsc

代码下载链接
https://download.youkuaiyun.com/download/weixin_43236944/10997992
https://download.youkuaiyun.com/download/weixin_43236944/10998014

后续两个月更新完
基于PCL的QT开发

### 点云模型及相关实现方法 #### 一、点云概述 点云的核心目标是将来自不同视角或传感器的多组三维点云数据对齐到同一坐标系下,从而构建完整的三维几何模型。这一技术广泛应用于机器人导航、自动驾驶、医疗影像等领域[^1]。 #### 二、经典点云算法——ICP ICP(Iterative Closest Point)是最经典的点云算法之一。它通过反复执行以下几个步骤完成点云对齐: - **初始对齐**:设定初步猜测的姿态作为起始条件。 - **最近点查找**:为源点云中的每个点找到目标点云中最接近的对应点。 - **变换矩阵计算**:基于对应的点对,求解最优刚体变换矩阵。 - **应用变换**:更新源点云的位置。 - **误差评估**:判断当前对齐状态是否满足收敛条件。如果未达到,则重复上述流程直至收敛。 尽管 ICP 方法简单高效,但它对初值敏感,在存在较大噪声或离群点的情况下表现较差。 #### 三、改进的 RANSAC 方法 为了克服传统 ICP 对初值依赖性强的问题,可以采用基于特征描述符的方法进行粗,随后再利用 ICP 进行精调。其中一种常用的技术是结合 FPFH 特征与改进版 RANSAC 的策略: - **FPFH 特征提取**:快速点特征直方图能够有效捕捉局部几何结构信息,适用于大规模点云数据集。 - **RANSAC 参数估计**:随机采样一致性算法通过对候选匹集合多次抽样验证的方式筛选出最可能的真实对应关系,并据此推导全局变换矩阵[^2]。 这种方法显著提高了鲁棒性和效率,尤其适合于具有复杂形状或者部分重叠区域较少的情况。 #### 四、实际开发工具推荐 对于希望深入研究并实践点云的研究者来说,以下开源库值得考虑: - PCL (Point Cloud Library): 提供全面支持各种类型操作的功能模块,包括但不限于滤波、分割以及等功能; - Open3D: 新兴跨平台可视化框架,易于集成现代 C++ 和 Python 生态系统; 以下是使用 PCL 库实现基本 ICP 的一个示例代码片段: ```cpp #include <pcl/point_cloud.h> #include <pcl/io/pcd_io.h> #include <pcl/features/fpfh.h> #include <pcl/sample_consensus/ransac.h> #include <pcl/registration/icp.h> int main() { pcl::PointCloud<pcl::PointXYZ>::Ptr source(new pcl::PointCloud<pcl::PointXYZ>()); pcl::PointCloud<pcl::PointXYZ>::Ptr target(new pcl::PointCloud<pcl::PointXYZ>()); // 加载输入文件 pcl::io::loadPCDFile("source.pcd", *source); pcl::io::loadPCDFile("target.pcd", *target); // 创建 ICP 实例对象 pcl::IterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> icp; icp.setInputSource(source); icp.setInputTarget(target); pcl::PointCloud<pcl::PointXYZ> final; icp.align(final); std::cout << "Has converged:" << icp.hasConverged() << " score: " << icp.getFitnessScore() << std::endl; return 0; } ``` 此程序展示了如何加载两份独立扫描件并通过标迭代方式调整它们之间的相对位置直到完全吻合为止的过程。 ---
评论 68
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小修勾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值