点云配准--gicp原理与其在pcl中的使用

这篇具有很好参考价值的文章主要介绍了点云配准--gicp原理与其在pcl中的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


总结:gicp引入了概率信息(使用协方差阵),提出了icp的统一模型,既可以解释点到点和点到面的icp,也在新模型理论的基础上,提出了一种面到面的icp。
论文原文:《Generalized-ICP》

gicp统一模型(Generalized-ICP)

在概率模型中假设存在配准中两个点集, A ^ = { a i ^ } \hat{A}=\left\{\hat{a_{i}}\right\} A^={ai^} and B ^ = { b i ^ } \hat{B}=\left\{\hat{b_{i}}\right\} B^={bi^},并且假设 A A A and B B B 分别服从 a i ∼ N ( a i ^ , C i A ) a_{i} \sim \mathcal{N}\left(\hat{a_{i}}, C_{i}^{A}\right) aiN(ai^,CiA)and b i ∼ N ( b ^ i , C i B ) b_{i} \sim \mathcal{N}\left(\hat{b}_{i}, C_{i}^{B}\right) biN(b^i,CiB)正态分布. { C i A } \left\{C_{i}^{A}\right\} {CiA} and { C i B } \left\{C_{i}^{B}\right\} {CiB} 分别是点对应的协方差阵. 我们假设以及匹配完成,假设变换矩阵为 T ∗ \mathbf{T}^{*} T, 因此:
b ^ i = T ∗ a ^ i (1) \hat{b}_{i}=\mathbf{T}^{*} \hat{a}_{i}\tag{1} b^i=Ta^i(1)
对于变换矩阵, T \mathbf{T} T , 定义误差量 d i ( T ) = b i − T a i d_{i}^{(\mathbf{T})}= b_{i}-\mathbf{T} a_{i} di(T)=biTai, 因为假设 a i a_{i} ai and b i b_{i} bi 服从正态分布(NDT也是假设服从正态分布), 因此 d i ( T ∗ ) d_{i}^{\left(\mathrm{T}^{*}\right)} di(T) 也服从正态分布:
d i ( T ∗ ) ∼ N ( b ^ i − ( T ∗ ) a ^ i , C i B + ( T ∗ ) C i A ( T ∗ ) T ) = N ( 0 , C i B + ( T ∗ ) C i A ( T ∗ ) T ) (2) \begin{aligned} d_{i}^{\left(\mathbf{T}^{*}\right)} & \sim \mathcal{N}\left(\hat{b}_{i}-\left(\mathbf{T}^{*}\right) \hat{a}_{i}, C_{i}^{B}+\left(\mathbf{T}^{*}\right) C_{i}^{A}\left(\mathbf{T}^{*}\right)^{T}\right) \\ &=\mathcal{N}\left(0, C_{i}^{B}+\left(\mathbf{T}^{*}\right) C_{i}^{A}\left(\mathbf{T}^{*}\right)^{T}\right) \end{aligned}\tag{2} di(T)N(b^i(T)a^i,CiB+(T)CiA(T)T)=N(0,CiB+(T)CiA(T)T)(2)

使用最大似然估计( MLE)计算 T \mathbf{T} T
T = argmax ⁡ T ∏ i p ( d i ( T ) ) = argmax ⁡ T ∑ i log ⁡ ( p ( d i ( T ) ) ) (3) \mathbf{T}=\underset{\mathbf{T}}{\operatorname{argmax}} \prod_{i} p\left(d_{i}^{(\mathrm{T})}\right)=\underset{\mathbf{T}}{\operatorname{argmax}} \sum_{i} \log \left(p\left(d_{i}^{(\mathrm{T})}\right)\right)\tag{3} T=Targmaxip(di(T))=Targmaxilog(p(di(T)))(3)

进一步简化为:(这里从最大似然估计推导,具体过程需要研究)
T = argmin ⁡ T ∑ i d i ( T ) T ( C i B + T C i A T T ) − 1 d i ( T ) (4) \mathbf{T}=\underset{\mathrm{T}}{\operatorname{argmin}} \sum_{i} d_{i}^{(\mathbf{T})^{T}}\left(C_{i}^{B}+\mathbf{T} C_{i}^{A} \mathbf{T}^{T}\right)^{-1} d_{i}^{(\mathbf{T})}\tag{4} T=Targminidi(T)T(CiB+TCiATT)1di(T)(4)

当:
C i B = I C i A = 0 (5) C_{i}^{B} = I \\ C_{i}^{A} = 0\tag{5} CiB=ICiA=0(5)
就得到标准ICP:
T = argmin ⁡ T ∑ i d i ( T ) T d i ( T ) = argmin ⁡ T ∑ i ∥ d i ( T ) ∥ 2 (6) \begin{aligned} \mathbf{T} &=\underset{\mathbf{T}}{\operatorname{argmin}} \sum_{i} d_{i}^{(\mathrm{T})^{T}} d_{i}^{(\mathrm{T})} \\ &=\underset{\mathbf{T}}{\operatorname{argmin}} \sum_{i}\left\|d_{i}^{(\mathrm{T})}\right\|^{2} \end{aligned}\tag{6} T=Targminidi(T)Tdi(T)=Targminidi(T)2(6)
当:
C i B = P i − 1 C i A = 0 (7) \begin{aligned} C_{i}^{B} &=\mathbf{P}_{\mathbf{i}}^{-1} \\ C_{i}^{A} &=0 \end{aligned}\tag{7} CiBCiA=Pi1=0(7)
得到点到面的ICP:
T = argmin ⁡ T { ∑ i ∥ P i ⋅ d i ∥ 2 } (8) \mathbf{T}=\underset{\mathbf{T}}{\operatorname{argmin}}\left\{\sum_{i}\left\|\mathbf{P}_{\mathbf{i}} \cdot d_{i}\right\|^{2}\right\}\tag{8} T=Targmin{iPidi2}(8)

plane to plane ICP(gicp:相对于点到点和点到面加入概率模型(协方差阵))

点到平面算法的做法是,假设点云具有平面特征,这意味着在3D空间处理采样2D流形。
由于现实世界的曲面至少是分段可微的,我们可以假设我们的数据集是局部平面的。此外,由于我们从两个不同的角度对流形进行采样,因此通常不会对完全相同的点进行采样(即,对应关系永远不会是精确的)。
本质上,每个测量点仅提供沿其曲面法线的约束。为了对这种结构进行建模,我们考虑每个采样点沿其局部平面以高协方差分布,而在曲面法线方向(垂直于平面方向)以极低协方差分布(即点云分布在局部平面上)。假设局部拟合平面上某一点的法向量e1是沿X轴的,链接1,则该点协方差矩阵变为:
( ϵ 0 0 0 1 0 0 0 1 ) (9) \left(\begin{array}{lll} \epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right)\tag{9} ϵ00010001(9)
ϵ \epsilon ϵ是沿着法线方向极小的常数。

因为实际上法向量并不一定是沿x轴方向,所以需要进行坐标转换。假设 b i , a i b_i,a_i bi,ai对应的法向量分别为 u i , v i u_i,v_i ui,vi,则它们对应的协方差阵为:
C i B = R μ i ⋅ ( ϵ 0 0 0 1 0 0 0 1 ) ⋅ R μ i T C i A = R ν i ⋅ ( ϵ 0 0 0 1 0 0 0 1 ) ⋅ R ν i T \begin{array}{l} C_{i}^{B}=\mathbf{R}_{\mu_{i}} \cdot\left(\begin{array}{ccc} \epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right) \cdot \mathbf{R}_{\mu_{i}}^{T} \\ C_{i}^{A}=\mathbf{R}_{\nu_{i}} \cdot\left(\begin{array}{ccc} \epsilon & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right) \cdot \mathbf{R}_{\nu_{i}}^{T} \end{array} CiB=Rμiϵ00010001RμiTCiA=Rνiϵ00010001RνiT
R ν i \mathbf{R}_{\nu_{i}} Rνi为e1到vi旋转矩阵。
上述协方差计算过程可以表述如下图,链接2:
gicp,点云,点云配准,pcl,概率论,机器学习,人工智能

确定协方差阵后利用公式(4)即为plane to plane ICP或者叫GICP。
这里其实就是怎么确定协方差阵。
显然可以通过pca计算协方差阵(代替上述求解过程):
C = 1 N ⋅ ∑ i = 1 N ⋅ ( p i − p ˉ ) ⋅ ( p i − p ˉ ) T C=\frac{1}{N} \cdot \sum_{i=1}^{N} \cdot\left(p_{i}-\bar{p}\right) \cdot\left(p_{i}-\bar{p}\right)^{T} C=N1i=1N(pipˉ)(pipˉ)T
pca求解时要注意公式(4)对协方差有个求逆过程,需要注意当协方差阵奇异时,用微小量替代0值(类似NDT中处理方式)。文章来源地址https://www.toymoban.com/news/detail-803385.html

PCL中GICP代码应用

#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/registration/gicp.h>
int gicp(const pcl::PointCloud<pcl::PointXYZ>::Ptr src_cloud, 
	const pcl::PointCloud<pcl::PointXYZ>::Ptr tgt_cloud, 
	 pcl::PointCloud<pcl::PointXYZ>::Ptr transformed_source)
{

	pcl::GeneralizedIterativeClosestPoint<pcl::PointXYZ, pcl::PointXYZ> gicp;
	gicp.setInputSource(src_cloud);
	gicp.setInputTarget(tgt_cloud);
	//gicp.setMaximumIterations(max_iter);
	gicp.align(*transformed_source);
	return 1;
}

到了这里,关于点云配准--gicp原理与其在pcl中的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 点云配准--对称式ICP

    对称式ICP 针对于局部平面不完美的情况,提出了一种对称式ICP目标函数,相较于传统的ICP方法,增大了收敛域,提高了收敛速度。论文理论说明不甚清楚,实验较少,但代码开源。 对称目标函数 在icp中对于一对对应点p,q:在点到法线的度量中: ( p − q ) ⋅ n q (3) (p-q) cd

    2024年02月06日
    浏览(57)
  • 点云配准——经典配准算法及配准效果对比

    目录 点云配准基础知识 什么是点云配准? 点云配准的步骤 粗配准 精配准  点云配准的经典算法 ICP算法 NDT算法 3DSC算法 PFH FPFH 完全配准效果对比         点云配准技术即是通过寻找不同视角下不同点云之间的映射关系,利用一定的算法将同一目标场景的不同点云转换到

    2024年02月02日
    浏览(41)
  • 多视图点云配准算法综述

    作者:杨佳琪,张世坤,范世超等 转载自:华中科技大学学报(自然科学版) 编辑:东岸因为@一点人工一点智能 原文:​​多视图点云配准算法综述​​ 摘要: 以多视图点云配准为研究对象,对近二十余年的多视图点云配准相关研究工作进行了全面的分类归纳及总结。首先

    2024年02月05日
    浏览(47)
  • 激光雷达点云基础-点云滤波算法与点云配准算法

    激光雷达点云处理在五年前就做了较多的工作,最近有一些新的接触发现激光雷达代码原理五年前未见重大更新,或许C++与激光雷达结合本身就是比较高的技术门槛。深度学习调包侠在硬核激光雷达技术面前可以说是完全的自愧不如啊。 1、点云滤波 在获取点云数据时,由于

    2024年03月19日
    浏览(49)
  • 基于深度学习方法的点云算法1——PointNetLK(点云配准)

    请点点赞,会持续更新!!! 基于深度学习方法的点云算法2——PointNet(点云分类分割) 基于深度学习方法的点云算法3——PointNet++(点云分类分割) 基于深度学习方法的点云算法4——PCT: Point Cloud Transformer(点云分类分割) 作者将PointNet看成一个可学习的成像函数(learn

    2024年02月10日
    浏览(44)
  • 点云配准的传统算法ICP与NDT概述

    公众号致力于分享点云处理,SLAM,三维视觉,高精地图相关的文章与技术,欢迎各位加入我们,一起交流一起进步,有兴趣的可联系微信:920177957。 本文来自点云PCL博主的分享,未经作者允许请勿转载,欢迎各位同学积极分享和交流。 什么是点云配准 点云配准是指将多个点

    2024年02月05日
    浏览(41)
  • CVPR2023最佳论文候选:3D点云配准新方法

    文章:3D Registration with Maximal Cliques 作者:Xiyu Zhang Jiaqi Yang* Shikun Zhang Yanning Zhang 编辑:点云PCL 代码: https://github.com/zhangxy0517/3D-Registration-with-Maximal-Cliques.git 欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。 公众号致力于点云处

    2024年02月08日
    浏览(45)
  • MATLAB 基于NDT的点云配准实验(不同参数效果) (25)

    NDT点云配准与ICP一样,都是经典的点云配准算法,这里使用MATLAB进行ndt点云配准,对配准结果进行显示,并尝试不同参数,得到较好的实验结果。具体原理请自行查阅相关论文和原论文,这里重在使用。

    2024年02月15日
    浏览(69)
  • KSS-ICP: 基于形状分析技术的点云配准方法

    目录 1. 概述 2. 算法实现 3. 实验结果 总结 Reference 三维点云配准是三维视觉领域一个经典问题,涉及三维重建,定位,SLAM等具体应用问题。传统的配准可以被分为两条技术路线,即基于全局姿态匹配的方法以及基于特征点对应的方法。全局姿态匹配通过在全局范围查找变换矩

    2023年04月08日
    浏览(87)
  • CVPR2023新作:3D点云配准--3D Registration with Maximal Cliques

    Title: 3D Registration with Maximal Cliques Affiliation: School of Computer Science, Northwestern Polytechnical University, China Authors: Xiyu Zhang, Jiaqi Yang, Shikun Zhang, Yanning Zhang Keywords: 3D point cloud registration, maximal cliques, graph theory, SVD algorithm, deep learning Summary: (1): 本文主要解决3D点云配准的问题,并针对现有

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包