0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

三维点云配准算法,包括4PCS、K-4PCS、SAC-IA、ICP、PCA、深度学习方法等

3D视觉工坊 来源:3DCV 2023-07-10 15:16 次阅读

1 什么是点云配准

点云配准指的是输入两幅点云 Ps (source) 和 Pt (target),输出一个变换矩阵T(即旋转R和平移t)使得 T(Ps)和Pt的重合程度尽可能高。我们可以把点云想象成由无数个三维点组成的云彩,而点云配准就是要把这些云彩按照它们实际的位置和姿态拼接在一起,就像把多个拼图拼接在一起,最终形成一个完整的三维模型。粗配准(Coarse Registration)在两幅点云之间的变换完全未知的情况下进行较为粗糙的配准,目的主要是为精配准提供较好的变换初值。精配准(Fine Registration)精配准是给定一个初始变换,进一步优化得到更精确的变换。粗配准和精配准流程如下图所示:8dd41c96-1ec8-11ee-962d-dac502259ad0.png

2 常见的配准算法

2.1 4PCS配准

1 原理

并非全共线的共面四点a,b,c,d,定义了两个独立的比率r1和r2,其在仿射变化中是不变且唯一的。现在给定一个具有n个点的点集Q,以及两个由点P得到的仿射不变的比率r1,r2,对每一对点q1,q2⊂ Q,计算他们的中间点:8def955c-1ec8-11ee-962d-dac502259ad0.png若任意两对这样的点,一对由 r1计算得到的中间点和另一对由 r2计算得到的中间点在允许范围内一致,那么可以认为这两对点可能是 P中基础点的仿射对应点。将四点转化应用到全局点云转化,计算点云的匹配重叠度,若达到设置的阈值,则完成点云粗配准。8dffa370-1ec8-11ee-962d-dac502259ad0.png2 核心代码

pcl::FPCSInitialAlignmentfpcs;
fpcs.setInputSource(source_cloud);//源点云
fpcs.setInputTarget(target_cloud);//目标点云
fpcs.setApproxOverlap(0.7);//设置源和目标之间的近似重叠度。
fpcs.setDelta(0.01);//设置常数因子delta,用于对内部计算的参数进行加权。
fpcs.setNumberOfSamples(100);//设置验证配准效果时要使用的采样点数量

2.2 K-4PCS配准

1 步骤

K-4PCS方法主要分为两个步骤:

(1)利用VoxelGrid滤波器对点云Q进行下采样,然后使用标准方法进行3D关键点检测

(2)通过4PCS算法使用关键点集合而非原始点云进行数据的匹配,降低了搜索点集的规模,提高了运算效率

2 核心代码

pcl::KFPCSInitialAlignmentkfpcs;
kfpcs.setInputSource(source);//源点云
kfpcs.setInputTarget(target);//目标点云
kfpcs.setApproxOverlap(0.7);//源和目标之间的近似重叠。
kfpcs.setLambda(0.5);//平移矩阵的加权系数。
kfpcs.setDelta(0.002,false);//配准后源点云和目标点云之间的距离
kfpcs.setNumberOfThreads(6);//OpenMP多线程加速的线程数
kfpcs.setNumberOfSamples(200);//配准时要使用的随机采样点数量
pcl::PointCloud::Ptrkpcs(newpcl::PointCloud);
kfpcs.align(*kpcs);

2.3 SAC-IA配准

1 步骤SAC-IA配准的实现流程:

①分别计算源点云和目标点云的FPFH特征描述子

②基于FPFH特征描述子对两个点云中的点进行匹配;

③随机选择 n (n >= 3) 对匹配点;

④求解该匹配情况下的旋转与平移矩阵;

⑤计算此时对应的误差;重复步骤3-5,直到满足条件,将最小误差对应的旋转和位移作为最终结果。

2 核心代码

pcl::SampleConsensusInitialAlignmentsac_ia;
sac_ia.setInputSource(source);
sac_ia.setSourceFeatures(source_fpfh);
sac_ia.setInputTarget(target);
sac_ia.setTargetFeatures(target_fpfh);
sac_ia.setMinSampleDistance(0.1);//设置样本之间的最小距离
sac_ia.setCorrespondenceRandomness(6);//在选择随机特征对应时,设置要使用的邻居的数量;
pointcloud::Ptralign(newpointcloud);
sac_ia.align(*align);

2.4 主成分分析法(PCA)配准

1 原理

主要利用点云数据的主轴方向进行配准。首先计算两组点云的协方差矩阵,根据协方差矩阵计算主要的特征分量,即点云数据的主轴方向,然后再通过主轴方向求出旋转矩阵,计算两组点云中心坐标的便移直接求出平移向量。

2 核心代码

voidComputeEigenVectorPCA(constpcl::PointCloud::Ptr&cloud,Eigen::Vector4f&pcaCentroid,Eigen::Matrix3f&eigenVectorsPCA)
{
pcl::compute3DCentroid(*cloud,pcaCentroid);
Eigen::Matrix3fcovariance;
pcl::computeCovarianceMatrixNormalized(*cloud,pcaCentroid,covariance);
Eigen::SelfAdjointEigenSolvereigen_solver(covariance,Eigen::ComputeEigenvectors);
eigenVectorsPCA=eigen_solver.eigenvectors();
}

2.5 ICP配准

1 原理

ICP算法的核心是最小化一个目标函数,实际上就是所有对应点之间的欧式距离的平方和8e1da50a-1ec8-11ee-962d-dac502259ad0.png2 步骤

①寻找对应点:我们在有初值的情况下,假设用初始的变换矩阵对source cloud进行变换,将变换后的点云与target cloud进行比较,只要两个点云距离小于一定阈值,我们就认为这两个点就是对应点。

②R、T优化:有了对应点之后,我们就可以用对应点对旋转R与平移T进行估计。这里R和T中只有6个自由度,而我们的对应点数量是庞大的。因此,我们可以采用最小二乘等方法求解最优的旋转平移矩阵,一个数值优化问题。

③迭代:我们优化得到了一个新的R与T,导致了一些点转换后的位置发生变化,一些对应点也相应的发生了变化。因此,我们又回到了步骤②中的寻找对应点方法。②③步骤不停迭代进行,直到满足一些迭代终止条件,如R、T的变化量小于一定值,或者上述目标函数的变化小于一定值,或者对应点不再变化等。

3 核心代码

icp.setInputSource(source);//源点云
icp.setInputTarget(target);//目标点云
icp.setTransformationEpsilon(1e-10);//为终止条件设置最小转换差异
icp.setMaxCorrespondenceDistance(1);//设置对应点对之间的最大距离(此值对配准结果影响较大)。
icp.setEuclideanFitnessEpsilon(0.05);//设置收敛条件是均方误差和小于阈值,停止迭代;
icp.setMaximumIterations(35);//最大迭代次数
pcl::PointCloud::Ptricp_cloud(newpcl::PointCloud);
icp.align(*icp_cloud);

3 深度学习的配准算法

①PointNetLK (Deep ICP)是基于 PointNet的改进版ICP算法。PointNet被用来提取点云的全局特征,然后使用牛顿法迭代近似相似性变换参数,并且使用这个过程中估计的点对映射来更新权重。

②Deep Closest Point (DCP)基于深度神经网络的点云配准算法,它先通过PointNet提取特征,然后计算每个点在目标点云中的最近邻点,并计算这两个点之间的距离。之后,它将这些信息传递到一个形状编码器来学习在两个点云之间寻找最优配准关系,并输出变换矩阵使得两个点云重合。

③PRNetPRNet是基于 PointNet++ 的点云配准算法。它的主要思想是将两个点云投射到一个球面上,然后计算在这个球面上的卷积特征。卷积完成后,PRNet使用粗配准阶段进行初始配准,再使用 RANSAC 进行细配准,最终输出配准矩阵。

④PPFNetPPFNet是基于局部点对特征(PPF)的点云配准算法,使用神经网络学习点对之间的相对变换,并输出变换矩阵使得两个点云对齐。这个算法使用卷积神经网络对点云进行编码,并学习 PPF 匹配关系的特征,并使用训练过的网络对新的点云对进行配准。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4599

    浏览量

    92642
  • 深度学习
    +关注

    关注

    73

    文章

    5492

    浏览量

    120975
  • 点云数据
    +关注

    关注

    0

    文章

    13

    浏览量

    1504

原文标题:汇总!三维点云配准算法,包括4PCS、K-4PCS、SAC-IA、ICP、PCA、深度学习方法等

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于深度学习三维方法

    基于深度学习三维
    发表于 11-29 11:41 1764次阅读

    机器视觉之ICP算法和RANSAC算法

    迭代最近ICP(Iterative Closest Point迭代最近算法是一种集对
    发表于 06-19 08:00

    一种快速的三维自动方法

    采用主成分分析方法(PCA)定义了简单的数学模型和轴向确定方法来实现。大量实验证明,
    发表于 09-23 17:59 25次下载

    三维颅骨自动非刚性方法

    针对三维颅骨模型在初始姿态相差较大以及存在较多缺失情况下自动困难的问题,提出一种基于边缘对应的三维颅骨非刚性自动
    发表于 12-09 10:23 0次下载

    基于平移域估计的全局算法

    针对迭代最近ICP算法需要两幅具有良好的初始位置,否则易陷入局部最优的问题,提出了一种基于平移域估计的
    发表于 12-18 13:50 0次下载
    基于平移域估计的<b class='flag-5'>点</b><b class='flag-5'>云</b>全局<b class='flag-5'>配</b><b class='flag-5'>准</b><b class='flag-5'>算法</b>

    基于分层策略的三维非刚性模型算法

    三维非刚性模型分析中,通常需要对不同姿态下的模型进行。针对传统配算法存在复杂度高、计算量大、精确度低等问题,提出一种新的基于分层策略
    发表于 01-23 14:50 3次下载
    基于分层策略的<b class='flag-5'>三维</b>非刚性模型<b class='flag-5'>配</b><b class='flag-5'>准</b><b class='flag-5'>算法</b>

    使用PCL进行数据粗算法的研究资料分析

    传统ICP算法精度受点初始位姿影响较大,收敛速度慢,不能满足精细化建模的要求。基于此问题,通过基于快速
    发表于 03-01 09:34 14次下载
    使用PCL进行<b class='flag-5'>点</b><b class='flag-5'>云</b>数据粗<b class='flag-5'>配</b><b class='flag-5'>准</b><b class='flag-5'>算法</b>的研究资料分析

    匹配与ICP算法基本思想

    ICP(Iterative Closest Point迭代最近算法是一种集对
    的头像 发表于 09-24 12:43 3827次阅读
    <b class='flag-5'>点</b><b class='flag-5'>云</b>匹配与<b class='flag-5'>ICP</b><b class='flag-5'>算法</b>基本思想

    计算机视觉:三维数据处理学习内容总结

    三维匹配的目的就是把相邻扫描的数据拼接在一起。三维匹配重点关注匹配算法,常用的算法有最近
    的头像 发表于 11-27 10:32 4802次阅读

    基于深度学习三维语义分割研究分析

    近年来,深度传感器和三维激光扫描仪的普及推动了三维处理方法的快速发展。
    发表于 04-01 14:48 16次下载
    基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的<b class='flag-5'>三维</b><b class='flag-5'>点</b><b class='flag-5'>云</b>语义分割研究分析

    自动驾驶圈黑话:常用的方法以及未来发展方向

    深度学习在自动驾驶领域可谓无往不利,领域也不例外。基于
    发表于 11-11 14:18 1991次阅读

    三维过程及集到点集ICP算法研究

    的模式基本上已经固定为使用ICP算法及其各种变种。ICP算法由Besl and McKay
    的头像 发表于 11-28 16:12 1437次阅读

    三维的相关知识学习技巧

    过程就是求一个两个之间的旋转平移矩阵(rigid transform or eucl
    的头像 发表于 12-02 09:40 1891次阅读

    基于深度学习三维方法

    一、摘要 本文介绍了一种基于深度学习三维
    的头像 发表于 06-17 09:54 1328次阅读
    基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的<b class='flag-5'>三维</b><b class='flag-5'>点</b><b class='flag-5'>云</b><b class='flag-5'>配</b><b class='flag-5'>准</b>新<b class='flag-5'>方法</b>

    三维算法原理及推导

    就是再两个还差得十万八千里、完全不清楚两个的相对位置关系的情况下,找到一个这两个
    的头像 发表于 09-25 11:31 935次阅读