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

    文章

    4458

    浏览量

    90762
  • 深度学习
    +关注

    关注

    73

    文章

    5239

    浏览量

    119922
  • 点云数据
    +关注

    关注

    0

    文章

    13

    浏览量

    1472

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

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

收藏 人收藏

    评论

    相关推荐

    基于深度学习三维点云配准方法

    基于深度学习三维点云配准方法成为研究的主流,并随之诞生了DeepVCP、DGR、Predator等著名的方法
    发表于 11-29 11:41 1406次阅读

    转:MotioSuit-体感三维实时跟踪

    游戏控制器,也可用在一些动画三维模型设计中。四肢分别安装4个传感器,传感器的数据通过蓝牙发送到PC上,PC上的上位机分析这些数据,并将三维动作展示在显示屏上。惯性测量单元(IMUs)使用的是博士
    发表于 07-27 10:59

    精密铸造+三维扫描=机械制造完美解决方案

    ;step3.数模与扫描数据进行拟合对齐,进行三维检测分析;step4.根据检测数据对产品外形进行修正优化。/ 04 /扫描数据结果▼铸件连杆扫描数据▲铸件连杆的数据▲铸件连杆的s
    发表于 08-09 11:17

    高薪聘请-Serdes PCS/DDR3/4 PHY

    电路Bandgap/LDO/OSC/PLL/Serdes的设计和仿真;3. 负责与版图工程师沟通并完成电路的版图设计;4. 制定芯片的测试计划,并在流片后配合芯片测试;5. 负责芯片设计过程中相关
    发表于 11-13 14:46

    三维快速建模技术与三维扫描建模的应用

    的HANDYSCAN三维激光扫描仪采集它的三维信息,然后利用Vxelements软件对多站式
    发表于 08-07 11:14

    基于stm32f4三维旋转显示平台设计资料(原理图、代码)

    现实的世界是一个拥有宽度、高度和深度三维立体世界。在平面二显示技术已经成熟的今天,三维立体显示技术首当其冲的成为了当今显示技术领域的研究热点。 本作品搭建了基于stm32f
    发表于 08-30 14:42

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

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

    基于FPGA+DSP的三维图像信息处理系统设计

      三维图像信息处理一直是图像视频处理领域的热点和难点,目前国内外成熟的三维信息处理系统不多,已有的系统主要依赖高性能通用PC完成图像采集、预处理、重建、构型囊括底层和高层的处理工作。三维
    发表于 06-24 06:11

    三维立体数字沙盘是是什么?

    `  那什么是三维立体数字沙盘呢?三维立体数字沙盘又叫三维数字沙盘、立体数字沙盘,是利用三维技术、地理遥控技术、虚拟现实技术、触控技术实现
    发表于 08-28 14:40

    双向储能变流器PCS储能变流器(PCS)是由哪些部分组成的?

    光伏储能系统关键设备之双向储能变流器PCS储能变流器(PCS)由功率、控制、保护、监控软硬件电组成。分为单相机和相机,单相PCS通常由双
    发表于 07-07 07:07

    如何导入机械臂的三维模型

    目的   本文手把手教你如何在 Mathematica 软件中搭建机械臂的三维仿真环境,包括以下几部分:   1. 如何导入机械臂的三维模型;   2. 如何进行(正/逆)运动学仿真;   3.
    发表于 09-07 09:25

    深度学习技术的开发与应用

    时间安排大纲具体内容实操案例天关键1.强化学习的发展历程2.马尔可夫决策过程3.动态规划4.无模型预测学习5.无模型控制
    发表于 04-21 14:57

    模型驱动深度学习的标准流程与学习方法解析

    模型驱动的深度学习方法近年来,深度学习在人工智能领域一系列困难问题上取得了突破性成功应用。
    的头像 发表于 01-24 11:30 4651次阅读
    模型驱动<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的标准流程与<b class='flag-5'>学习方法</b>解析

    PCS与WinCC区别

    PCS与WinCC的区别介绍。
    发表于 04-29 15:02 10次下载

    什么是PCS储能变流器?PCS的主要指标和系统框图

    储能系统中,BMS和PCS是最重要的两大组成,之前文章对BMS介绍较多,今天总结下PCS部分
    的头像 发表于 08-29 10:21 1.6w次阅读
    什么是<b class='flag-5'>PCS</b>储能变流器?<b class='flag-5'>PCS</b>的主要指标和系统框图