ICP的一点学习笔记

1. ICP算法相关
2.GICP算法笔记,参考http://www.roboticsproceedings.org/rss05/p21.pdf
Abstract:在本文中结合ICP和点云面ICP算法到一个概率框架。接下来要使用这个框架进行局部平面结构而不是通常的点面方法。这个可以认为是面到面方法。与标准的ICP和点到面方法相比,这种方法在误匹配方法有更强的鲁棒性,因此更容易调节最大匹配参数。此外在性能改进方面,这种方法允许在ICP框架中表达更多的概率模型。维持ICP的速度和简单化条件下,GICP也可以允许增加异常项、测量噪声和其他的概率方法来增强鲁棒性。由于遮挡和有限的传感器范围,点云和range图应用中的大多数需要精确的将多个范围的图像合并成一个单一的模型方法。
ScanMatching:在90s早期应用于扫描匹配的ICP算法有了很多变种。当时发表的三篇文章到现在仍然是最先进的扫描匹配解决方案。
Besl and McKay的文章直接阐述了几何形状和点云的匹配。Chen and Medioni考虑了对象建模中调整范围数据的更具体问题,他们的方法利用了点数据考虑为平面的趋势,并引入了点面ICP变种。Zhang几乎同时提出了ICP,但在算法的对应选择阶段增加了一种鲁棒的离群抑制方法。现在两种流行的是Iterative Dual Correspondence  和 Metric-BaseICP.IDC通过维护两组通信来改进点匹配过程。MbICP的设计目的是通过明确地将旋转误差作为距离度量的一部分来改善具有较大初始方向误差的收敛性。大多数基于ICP的方法的主要优点是简单和相对快速的性能,当用kd-tree实现近点查找时。缺点包括隐含的假设完全重叠的形状匹配和理论要求,点是从已知的几何表面,而不是测量。第一个假设被部分重叠的扫描(从不同的位置)打破。第二种方法会产生问题,因为不同的物理表面离散化使得即使在收敛之后也不可能得到各个点的精确重叠。点对面,如[7]中所建议的,通过不惩罚沿表面的偏移量来解决离散化问题。完全重叠假设通常通过在匹配中设置最大距离阈值来处理。除了点对面外,大多数ICP变体使用封闭形式的解决方案来迭代计算对应的对齐。这通常使用[10]或基于两个数据集的相互关系的类似技术来完成。最近,有兴趣使用一般的非线性优化技术,而不是更具体的封闭形式接近[9]。这些技术的优势在于,它们允许更一般的最小化函数,而不是欧氏距离的和。[9]使用非线性优化与稳健的统计,以显示更广泛的收敛区域。在这些技术中,概率技术是最有动力的,因为已经有大量的理论工作在支持它们。[2]应用了一个概率模型,它假设第二次扫描是通过一个随机过程从第一次扫描生成的。[4]应用射线跟踪技术来最大化对齐的概率。[8]构建一组兼容的对应,然后在这个分布上最大化对齐的概率。[17]引入了一个完整的概率框架,该框架考虑了运动模型,并允许估计注册的不确定性。该方法的一个有趣之处在于,它使用了广义霍夫变换的采样模拟来计算不需要显式对应的对齐,同时考虑了二维数据集的两个表面法线。还有大量的文献致力于解决多重扫描的全局对齐问题([18]和许多其他的)。许多实现此目的的方法(尤其是[18])使用成对匹配算法作为基本组件。这使得成对匹配的改进也适用于全局对齐问题。
我们的方法处在标准ICP和全部几率模型之间,这是使用最大似然估计作为非线性优化,使用kd树计算相关匹配。这是与从不同的,因为它给出对称性,加入了7中的结构化假设。由于最近邻查找是使用欧式距离计算,所以kd树可以用来在大的点云中提高性能。与8相比,我们认为数据应该被假设到面上,因为很多环境下的采样数据都是分段平滑的。通过对最小化过程进行概率解释,我们可以很容易地扩展该技术,使其包含来自两次扫描的结构信息,而不是像“点对面”ICP那样只包含一次扫描。我们证明了引入这种对称性可以提高精度并减少对参数的依赖。GICP 处理大型3D点云。
A.ICP:标准ICP算法的关键步骤主要有两步,1.计算两次扫描间的匹配,2,计算使匹配点距离最小的转换矩阵。
重复迭代这两步直到转换收敛。由于不使用全部重叠假设,必须添加一个最大匹配阈值dmax.这个阈值使一部分点参加与第二部分的匹配。在大部分的ICP实现中,dmax值的选择是收敛和精确度的折衷。太小会导致不好的收敛,太大会导致误匹配。

基本的ICP算法可分为以下几个关键步骤:
(1)选取:在输入点集中采用某种采样策略,选择一定的点作为下一步计算的点集对象
(2)匹配:利用某种匹配算法,实现两个所选点集中点的对应
(3)权重:利用评价函数,计算所得匹配点的权重
(4)删除:按照某种丢弃算法,将某些误差过大的匹配点对剔除
(5)计算点集距离误差:按照特定的几何方法,计算匹配点对在旋转平移后总的误差值
(6)最优化:利用最优化算法,不断迭代,最终得到使得两个点对集之间距离均方差最小的旋转平移矩阵  

B.点面ICP:点面ICP通过使用面法线信息提高了性能,最小化沿着表面向量的误差。这个将上式改成:T^*=arg \underset{T}{min} \sum_i w_i \left \| \eta_i\times(T\times q_i-m_i)\right \|^2, 其中\eta_i是mi上的表面法线。
泛化ICP(GICP):
A.Derivation:GICP是使用概率模型来最小化算法中的优化项,其他算法保持不变。其中匹配仍是计算标准欧式距离而不是几率测量。这使得可用 kd树的最近邻查找方法,因此来保证ICP的优势而不是全几率方法。T^*=arg \underset{T}{min} \sum_i d_i^{(T)^T}(C_i^B+TC_i^A)^{-1}d_i^{(T)} (2)。为了简化,我们假定最近邻的已经查询,两个点云A={ai}i=1,...N,B={bi}i=1,..根据他们的对应关系建立的索引序列。其中也假定移除||mi-T ·bi|| > dmax的数据。在几率模型中,我们假定存在潜在点集A={ai},B={bi}根据ai ∼ N(aˆi, CiA),bi ∼ N(bˆi, CiB)产生A ,B.



B.面到面:为了提高点面ICP性能和这个模型的对称性,GICP是考虑两次扫描的面信息。最直观的方法是考虑点面中第二次扫描的面信息,但在数学上不可行,因为所涉及的矩阵是奇异的。相反我们用点面来产生几率模型。点面算法使点云比任意空间点有了更多结构(实际上是测距传感器测的表面模型的集合 ),这意味着着我们处理空间中扫描的二维流形。由于真实世界至少是分段可微的,我们假定数据是局部平面的。由于是从两个角度获取的流形,因此一般情况下获取的不是同一个点。本质上,每个测量点在它的面上只提供一个约束。为了构造这种结构,我们考虑了每个采样点在其局部平面上具有高协方差分布,在其表面法线方向上具有低协方差分布。表面法线为e1的点的协方差矩阵是(e 1 1,0 1 0,0 0 1), 其中e是沿着法线方向的小常数。这表明沿着法线方向有很高的可信度,但在表面方向上不确定。我们采样的点ai,bi就是这种分布。给定了ai,bi点的法向量ui,vi,CiA,CiB是通过旋转上述协方差矩阵计算得到的,因此e代表沿着表面法线的不确定性。 Rx代表基向量e1到x方向的转换。变换矩阵是通过公式(2)计算得来的。

图给出算法在极端情况下的解释。在这种情况下,绿色扫描的垂直部分上的所有点都与红色扫描中的一个点不正确相关。由于表面取向是不一致的,平面与平面将自动对这些匹配进行折衷:每个对应的最终求和协方差矩阵将是各向同性的,也是稀疏和明确定义的对应协方差矩阵,它对目标函数的贡献非常小。这种行为从另一角度来看是对每一个匹配都是一个软约束。不一致的匹配允许红色扫描点沿着x轴移动,而绿色扫描点可以沿着y轴自由移动。这种不正确匹配对整体配准的约束是很弱且无信息的。计算表面协方差矩阵需要两次扫描所有点的表面法线。从点云恢复表面法线的技术很多,法线的精度自然地在算法的性能中起着重要的作用。本文中,我们使用每个扫描点的最近20个点的协方差矩阵进行主成分分析PCA。在这种情况下,本征矢量与表面法线的最小特征值有关。这种方法用于计算点到面和GICP的法线。对于GICP,构造旋转矩阵,使方差的分量与表面法线一致。
Result:我们比较了三种算法来测试所提技术的性能。虽然标准ICP中存在有效的T封闭解,但为了简化比较,我们利用共轭梯度实现了最小化。在两次扫描之间引入一个已知的偏移量后,根据收敛到正确的解决方案来分析性能。我们将标准ICP的测试次数限制在250次以内,并且另外两种算法的迭代次数为50次,因为在此之前通常会达到收敛。
模拟(图3)和真实(图4)的数据均用于演示理论和实际性能。模拟数据集还允许在更大范围的环境中进行测试,并且具有绝对已知的地面真实度。室外模拟环境与收集到的数据的主要区别在于遮挡的数量,以及地面更多的丘陵特征。真实世界的室外测试也展示了更详细的特性和更有代表性的测量噪声的性能。
模拟数据由安装在旋转接头上的病态扫描仪进行射线追踪生成。创建了两个3D环境,分别在室内(图2(a))和室外(图2(b))场景中测试性能。室内环境以办公室走廊为基础,而室外环境则反映了建筑周围的典型景观。在这两种情况下,我们模拟了一个装备了激光扫描仪的机器人沿着轨迹移动,并在轨迹上的定点进行测量。为了使测试更加真实,加入了高斯噪声。还对来自一辆装有仪器的汽车的日志的真实数据进行了测试。这些日志包括车顶安装的Velodyne测距仪记录的数据,当时这辆车正在郊区环境中绕行,并使用GPS和IMU数据进行了注释。这使得应用基于成对约束的SLAM技术来生成地面真实位置成为可能。
尽管标准ICP本身已经被用在成对匹配上来产生真实数据,SLAM方法扫描间隔是一个小的数量级。相反,为了增加挑战的难度性,测试用的扫描对之间的空间更大15-20m。为了测量性能,所有的算法都在三组数据集中成对scan。对每个扫描对, 初始偏移量设置为真偏移量,并添加统一生成的误差项。  通过对特定算法的所有扫描对平均定位误差来衡量性能。在所有测试中,忽略旋转误差。之前提到过,dmax的选取在ICP中起到很大的作用。
设置一个较低的值可以减少收敛的机会,但是可以提高精度。设置一个过高的值会增加收敛半径,但会降低精度,因为会产生更多不正确的对应。本文提出的算法通过对不正确对应的影响进行折现,大大降低了选择较大dmax值的代价。这使它更容易在广泛的环境中获得良好的性能,而不必手动为每个环境选择一个dmax值。除了提高了精度外,新算法在计算转换时对两种扫描都给予了同等的考虑。图6和图7显示了使用这两种扫描结构去除点对面存在的局部极小值的两种情况。这些图像代表了从上到下的维洛戴恩扫描图像,它们之间的距离大约为30米,并且是对齐的。图8显示了相同扫描对的一些附加视图,以更好地说明场景的结构。从传感器到户外环境的扫描范围为70-100米,就像从一辆正在行驶的汽车上看到的那样。
由于这种最小化仍然在ICP框架内执行,因此该方法将标准算法的速度和简单性与EM等全概率技术的一些优点结合在一起。理论框架还允许标准鲁棒性技术被纳入。例如,可以将高斯核函数与均匀分布相混合来建立离群点模型。高斯函数
RVs也可以被一个分布所代替,该分布考虑到匹配中的一定松弛量,以显式地对不精确对应进行建模(通过指定diT是在0周围的某个区域的恒定密度).虽然我们考虑了其中的一些变化,但它们都没有一个明显的易于最小化的闭合形式。这使得它们过于复杂,无法包含在当前的工作中,但却是未来研究的一个好主题。
V.结论
在本文中我们考虑了GICP,它考虑概率模型中两次扫描的局部平面结构。为了保持速度和准确型,ICP框架的大部分都没有改变。所提出的泛化方法只涉及转换矩阵的迭代计算。我们假定所有测量点都是服从中心在真实点的高斯分布,这样会有完美匹配。接下来使用MLE迭代计算匹配扫描的转换矩阵。一些列的模拟和实验结果表明,GICP提高了精度。同时,两次匹配的结构信息减少了误匹配的影响。因此选择最大匹配距离参数对性能的影响越小。这些改变保持了ICP的速度和简便性,同时提高性能消除参数选取带来的影响。

********************************************************************************************************************************
3.PCL中的icp, 参考PCL学习笔记二:Registration (ICP算法)_pcl::registration<pointt, pointt>::ptr registratio-CSDN博客
PCL的icp里的transformation estimation是基于SVD的, SVD是奇异值分解Singular Value Decomposition;使用举例如下:

void PairwiseICP(const pcl::PointCloud<PointT>::Ptr &cloud_target, const pcl::PointCloud<PointT>::Ptr &cloud_source, pcl::PointCloud<PointT>::Ptr &output ){PointCloud<PointT>::Ptr src(new PointCloud<PointT>);PointCloud<PointT>::Ptr tgt(new PointCloud<PointT>);tgt = cloud_target;src = cloud_source;pcl::IterativeClosestPoint<PointT, PointT> icp;icp.setMaxCorrespondenceDistance(0.1);icp.setTransformationEpsilon(1e-10);icp.setEuclideanFitnessEpsilon(0.01);icp.setMaximumIterations (100);icp.setInputSource (src);icp.setInputTarget (tgt);icp.align (*output);//执行icp
//	std::cout << "has converged:" << icp.hasConverged() << " score: " <<icp.getFitnessScore() << std::endl;output->resize(tgt->size()+output->size());for (int i=0;i<tgt->size();i++){ output->push_back(tgt->points[i]);	}cout<<"After registration using ICP:"<<output->size()<<endl;
}

 PCL中gicp的迭代使用的是BFGS的拟牛顿算法。它的参数如下:
setTransformationEpsilon();
setMaxCorrespondenceDistance();
setMaximumIterations();
setRANSACIterations();
setInputSource();   
setInputTarget();
align();
getFinalTransformation();
 在文件pcl/registration/impl/registration.hpp中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm版本切换工具nvm

有了nvm&#xff0c;可以在一台机器上同时安装多个版本的nodejs&#xff0c;然后指定使用某个版本。 前端开发的时候&#xff0c;安装依赖一直是个令我头痛的问题。总是报错&#xff0c;或者不是少了这样就是少了那样&#xff0c;鸡飞狗走。以往&#xff0c;一般要装个enpm&am…

安卓java打包uniapp原生插件 和 uniapp使用安卓android原生插件

1.uniapp dcloud官方文档 简介 | uni小程序SDK 2.前提&#xff0c;需要有经验的安卓java开发人员&#xff0c;并且同时具备uniapp移动端开发经验。说明&#xff1a;android打包的.aar和uniapp需要的.aar是不一样的&#xff0c;uniapp需要的.aar是需要有一些特定配置的&#x…

HarmonyOS实战开发DLP-如何实现一个安全类App。

介绍 本示例是一个安全类App&#xff0c;使用ohos.dlpPermission 接口展示了在eTS中普通文件加密受限的过程。 效果预览 使用说明: 1.启动应用后点击“”按钮可以添加一个普通文件; 2.长按点击加密按钮&#xff0c;出现加密权限弹窗&#xff0c;选择需要设置的权限并点击确定…

《从零开始学架构》读书笔记(一)

目录 软件架构设计产生的历史背景 软件架构设计的目的 系统复杂度来源 追求高性能 一、单机高性能 二、集群的高性能 追求高可用 一、计算高可用 二、存储高可用 追求可扩展性 一、预测变化 二、应对变化 追求安全、低成本、规模 一、安全 二、低成本 三、规模…

蓝桥杯 历届真题 杨辉三角形【第十二届】【省赛】【C组】

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 思路&#xff1a; 由于我第一写没考虑到大数据的原因&#xff0c;直接判断导致只得了40分&#xff0c;下面是我的代码&#xff1a; #…

uniapp中uni.navigateTo传递变量

效果展示&#xff1a; 核心代码&#xff1a; uniapp中uni.navigateTo传递变量 methods: {changePages(item) {setDatas("maintenanceFunName", JSON.stringify(item)).then((res) > {uni.navigateTo({url: /pages/PMS/maintenance/maintenanceTypes/maintenanceT…

vscode教程

个人笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔&#xff1a;工作总结随笔_8、以前工作中都接触过哪些类型的测试文档-CSDN博客 目录 一&#xff1a…

Mac安装Docker提示Another application changed your Desktop configuration解决方案

1. 问题描述 Mac安装Docker后&#xff0c;提示Another application changed your Desktop configuration&#xff0c;Re-apply configurations无效 2. 解决方案 在终端执行下述命令即可解决&#xff1a; sudo ln -sf /Applications/Docker.app/Contents/Resources/bin/docke…

neo4j图数据库下载安装配置

neo4j下载地址Index of /doc/neo4j/3.5.8/ 1.说明&#xff1a;jdk 1.8 版本对应的 neo4j 数据库版本 推荐安装3.X版本 2.配置系统环境变量 3.启动 neo4j.bat console 4.访问

系统监测工具-tcpdump的使用

一个简单的tcpdump抓包过程。主要抓包观察三次握手&#xff0c;四次挥手的数据包 有两个程序&#xff1a;客户端和服务器两个程序 服务器端的ip地址使用的是回环地址127.0.0.1 端口号使用的是6000 tcpdump -i 指定用哪个网卡等&#xff0c;dstip地址端口指定抓取目的地址…

[图像处理] MFC载入图片并绘制ROI矩形

上一篇&#xff1a; [图像处理] MFC载入图片并进行二值化处理和灰度处理及其效果显示 文章目录 前言完整代码重要代码效果 前言 上一篇实现了MFC通过Picture控件载入图片。 这一篇实现ROI功能的第一部分&#xff0c;在Picture控件中&#xff0c;通过鼠标拖拽画出一个矩形。 完…

前端:SVG绘制流程图

效果 代码 html代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>SVG流程图示例</title><style>/* CSS 样式 */</style><script src"js/index.js"></script…

浪潮信息边缘服务器NE5260G7焕新升级 算力系统更开放、更强大

随着边缘计算场景的增加&#xff0c;再加上用户需求的升级&#xff0c;边缘服务器市场亦迎来了新的挑战&#xff0c;紧跟需求&#xff0c;浪潮信息亦有序通过技术创新提升服务器性能。日前&#xff0c;浪潮信息边缘服务器NE5260G7焕新升级&#xff0c;完成第五代英特尔至强处理…

JVM 全景图

今天我重新复习了一下 jvm 的一些知识点。我以前觉得 jvm 的知识点很多很碎&#xff0c;而且记起来很困难&#xff0c;但是今天我重新复习了一下&#xff0c;对这些知识点进行了简单的梳理之后&#xff0c;产生了不一样的看法。虽然 jvm 的知识点很碎&#xff0c;但是如果你真的…

基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

第一章、理论篇&#xff1a;以问题导入的方式&#xff0c;深入掌握原理基础 什么是MaxEnt模型&#xff1f; MaxEnt模型的原理是什么&#xff1f;有哪些用途&#xff1f; MaxEnt运行需要哪些输入文件&#xff1f;注意那些事项&#xff1f; 融合R语言的MaxEnt模型的优势&…

科技云报道:卷完参数卷应用,大模型落地有眉目了?

科技云报道原创。 国内大模型战场的比拼正在进入新的阶段。 随着产业界对模型落地的态度逐渐回归理性&#xff0c;企业客户的认知从原来的“觉得大模型什么都能做”的阶段&#xff0c;已经收敛到“大模型能够给自身业务带来什么价值上了”。 2023 年下半年&#xff0c;不少企…

[羊城杯 2020]Easyphp2 ---不会编程的崽

摆烂一周了&#xff0c;继续更&#xff01;&#xff01;题目还是简单哦。 提示明显要我们修改数据包&#xff0c;第一反应是修改referer。试了一下不太对。url很可能存在文件包含 使用伪协议读取一下源码吧。它过滤了base64关键字。尝试url编码绕过&#xff0c;这里可以使用二…

uniApp移动端安卓中使用webview打开pdf文件是下载而不是预览解决方案

关键 使用到 pdf.js 第一步&#xff1a; 下载pdf.js 文件到项目根目录 也就是这个文件 附下载地址&#xff1a;uni-app-pdf: 在uni-app中使用pdf.js实现在手机上打开pdf 也可通过其他方法下载 如npm 第二步&#xff1a; 拷贝hybrid文件到项目根目录 第三步&#xff1a;…

HarmonyOS实战开发-通过screenshot模块实现屏幕截图 。

介绍 本示例展示全屏截图和屏幕局部截图。 本示例通过screenshot模块实现屏幕截图 &#xff0c;通过window模块实现隐私窗口切换&#xff0c;通过display模块查询当前隐私窗口。 效果预览 使用说明&#xff1a; 点击右上角图标打开弹窗&#xff0c;选择截屏&#xff0c;展示…

stable-diffusion-webui安装教程

现在AI开始进入绘画领域,并且能自动根据文本来创建图片出来,这是一个划时代的进步。 这时候,我也不能落后,要紧跟上时代的步伐,那么也来学习一下stable-diffusion的使用,这样也算多一项对技术的认识,提高对AI的认知。 从网上看到很多stable-diffusion-webui的安装,其…