【学习记录】ICP类点云配准算法总结

2024-08-25 20:20

本文主要是介绍【学习记录】ICP类点云配准算法总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

〇、ICP

在点云配准或者激光SLAM领域,ICP类算法一直是一个比较经典的算法。研二时写的那篇综述也有过总结,对于激光SLAM而言,ICP类算法属于是scan-to-scan里面基于距离的一种配准算法。对于最纯粹的ICP算法,其基本思想就是用整帧点云,用一个初始的变换矩阵T进行投影,将当前帧点云投影到前一帧点云,之后利用kd-tree结构,利用距离这一指标筛选出一个最近点,计算投影点到所有最近点的距离和,通过调整变换矩阵T来实现距离和的最小化,进而得到最优化的变换矩阵T。

这种利用点云中每个点进行配准的方法,好处是充分利用了点云中的所有信息,所以按道理计算出来的变换矩阵会更加准确。但缺点也比较致命,所有点参与计算,即使是使用了kd-tree来加速最近点搜索,时间的开销也很大,其次投影的过程过分依赖于初始的变换矩阵,一旦初始值不好,很可能产生较为严重的偏离,最后,整个过程完全以距离作为唯一的筛选指标,这可能会导致根据距离筛选出的最近点,并不是实际的匹配点。正是因为ICP算法存在的这些不足,引出了后人对该算法的一系列改进,但是并没有改动ICP基本的思想。

一、PL-ICP

在ICP中,进行筛选的是投影点云中的一个点和前一帧点云中的另一个点,这种属于是点到点的匹配关系,硬要说的话这个匹配关系是很死板的,点到点的匹配是不存在移动的。为了让匹配过程更加灵活,PL-ICP将ICP中点到点的距离,更换为点到线的距离。在完成投影之后,投影点云中的点要选择前一帧点云两个最近点,之后再计算距离时,计算投影点到两个最近点组成的线的距离。
在这里插入图片描述
通过将点到点的距离改为点到线的距离,PL-ICP给予ICP算法一定的“滑动”空间,只要初始的变换矩阵偏差不是太离谱,最近点就算不是完全匹配,真正的匹配点也会在两个最近点的连线之上。

二、PP-ICP

既然有PL-ICP,那么理所应当也会有PP-ICP,其实这两个改进ICP改进的地方都是在点到点距离这个地方。PL-ICP将点到点换为点到线,PP-ICP则是将点到点换为点到切平面。依然是在完成投影之后,根据距离选择一个最近点,之后计算最近点所在的切平面,将投影点到切平面的距离和作为优化的对象。
在这里插入图片描述
其实PP-ICP和PL-ICP改进是类似的,都是切换了距离计算的方法,PP-ICP选用切平面,其实当PL-ICP中两个点距离足够近的时候,其连线也会趋近于切平面。

三、NICP

前面两类都是对距离计算进行了改进,除了这个改进点,也有一些变体从仅考虑几何距离这个不足下手。NICP采用的方法就是在筛选最近点的时候,将投影点和待选最近点之间的曲率、法向量纳入考虑。要求两个点不仅距离要足够近,其曲率、法向量等几何性质也要保持近似。这种筛选其实也是用局部的几何指标来弥补距离这个唯一指标的不足。类似的在一些语义ICP的改进中,也使用了这种策略,要求投影点和待选最近点之间的语义必须保持一致。
在这里插入图片描述NICP代表的,实际上是增加指标以优化传统ICP仅仅考虑距离这唯一指标的不足,与现在语义ICP的改进思路是类似的。

四、GICP

GICP全名应该叫广义ICP,它的改进实际上是将计算距离的过程,改为了最大后验。从他的文章来看,其主要是将ICP问题进行了概率化,调整后优化函数也不再是许多点对距离的和,而是一个概率值。利用概率模型,作者同时还将PP-ICP的内容也进行了概率化,提升了算法的鲁棒性。
在这里插入图片描述
从优化函数可以看出,GICP中将点满足的高斯分布纳入了其中,di里面是两个点距离的差异,而Ci里面则是两个点协方差的差异。

五、VGICP

VGICP则是在GICP的基础上又进行了改进,其中的V指的是体素化voxelization,从其论文来看,他主要是借鉴了NDT类算法将点云划分为体素的策略,既然GICP已经将ICP算法与概率相结合,那么也可以将NDT选多个点的思想结合进来。在VGICP中,投影点会根据距离选择多个点参与计算,利用这多个点计算协方差矩阵,代替GICP中一个点的协方差。
在这里插入图片描述
从公式的角度来看,GICP的公式应该为:
在这里插入图片描述
di也就是公式(2)(3)表示的实际上就是两个高斯分布的叠加,叠加后均值为0,协方差为两个原始协方差矩阵的叠加。之后再公式(5)中,我们也就得到了概率化后ICP的表示方法。这其中从公式(1)可以看出,有关di的定义是基于点对的,依然是一对一的关系。
在这里插入图片描述
而在VGICP中,di的定义被扩大到一对多,也就是公式(6)(11)写的那样,只要是距离小于阈值r的点,都会被纳入到di的计算过程,也就是说投影点ai会有多个点bj与之对应,但是整体依然保持公式(7)(8)(9)所示的高斯分布。

六、总结

其实所有的ICP类算法,本质上都是找匹配点然后最小化一个损失函数,其大体的区别可以总结为:

ICP:点对点最小化距离和
PL-ICP:点到线最小化距离和
PP-ICP:点到切平面最小化距离和
NICP:点到点距离+曲率+法向量
GICP:将ICP的距离和转换为概率问题
VGICP: 在GICP概率计算的基础上,将一对一变为一对多

参考链接:
ICP与kdtree:https://blog.csdn.net/weixin_43849505/article/details/121356403?spm=1001.2014.3001.5501
GICP:https://zhuanlan.zhihu.com/p/679429950
GICP:https://baijiahao.baidu.com/s?id=1780256734339605179&wfr=spider&for=pc
GICP:https://blog.csdn.net/u014509577/article/details/86912909
ICP及其变体:https://blog.csdn.net/zhaoliang38/article/details/127636206
NICP:https://blog.csdn.net/weixin_41469272/article/details/105522443

这篇关于【学习记录】ICP类点云配准算法总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106565

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li