点云配准--4PCS原理与应用

25 篇文章 17 订阅
16 篇文章 7 订阅


总结:4PCS不同于icp和ndt,其是一种基于局部特征(特征描述子)的全局配准方法,对于噪点和异常值、低重叠度具有稳健性,对于配准初值不敏感。

1预备知识

1.0 wide base

4pcs算法的关键是选取一个宽基集(wide-base),如图。(就是选取的点的距离相对大些,算法才更稳定,明显上面的配准效果比下面的好,因为上面的点隔得远,但是最远距离要受重叠度的限制)。1

1.1 LCP(largest common pointset)

即通过一个刚体变换,使得重叠区域内所有点对之间的距离小于δ,这个重叠区域就是要求的最大公共点集.
简单来说就是,给定两个处于任意初始位置的点集P和Q,找到两个点集之间的最佳刚性变换,使得P,Q中两点间距离小于δ的点数最多.
δ \delta δ为常数, T T T变换矩阵, P max ⁡ ⊆ P , P_{\max } \subseteq P , \quad PmaxP 满足 ∀ P i ∈ P max ⁡ , ∥ T ( p i ) → − q i → ∥ ≤ δ \forall P_{i} \in P_{\max },\left\|\overrightarrow{T\left(p_{i}\right)}-\overrightarrow{q_{i}}\right\| \leq \delta PiPmax,T(pi) qi δ都成立,则满足最多数量的那个 P M A X P_{MAX} PMAX称为最大公共集 (largest common pointset LCP)2
即可以利用LCP做为代价函数,求解变换矩阵,4pcs就是利用LCP做为求解变换矩阵的度量
wide-base和LCP度量的组合使得4PCS配准方法能应对噪点和异常值

1.2 RANSAC配准过程

基于RANSAC的对齐过程很简单:从P中随机选择三个不同的点,从Q中随机选择三个不同的点,形成对应的一对基,计算对齐基对的候选变换Ti,然后计算距离Q中点δ-距离内的P中的点ki的数量。如果ki足够大,则接受Ti作为一个好的解决方案。否则,通过随机选择另一个三个点来重复该过程,从而导出可能改进当前最佳拟合的不同候选变换。

1.3 Randomized Alignment

该配准方法是RANSAC算法的一种变体。该过程从P中随机选取一个基,计算将该基与Q中所有可能的基对齐的变换,并验证配准结果。如在RANSAC中一样,为了获得一定的成功概率,该方法重复从P中选择L个不同的基。此外,验证阶段也是随机化的:首先,只验证P中数量恒定的随机点,并且仅当该子集的显著部分匹配良好时,才测试其余点。
p g p_{g} pg是从点云 P P P中随机选择一点,该点恰好也出现在点云 Q Q Q中的概率,(即该点在重叠区域内)。用于配准的基(base)的数量为 N N N p f p_{f} pf是在尝试L次后找不到存在的良好拟合时,算法退出的概率。因为我们从 P P P中随机选择基,假设: p f = ( 1 − p g N ) L p_{f}=\left(1-p_{g}^{N}\right)^{L} pf=(1pgN)L,设 p s p_{s} ps为配准成功的概率,则有迭代次数 L L L

L > log ⁡ ( 1 − p s ) / log ⁡ ( 1 − p g N ) (1) L>\log \left(1-p_{s}\right) / \log \left(1-p_{g}^{N}\right)\tag{1} L>log(1ps)/log(1pgN)(1)

For rigid transforms, it is sufficient to have N = 3 N=3 N=3

4PCS算法流程是基于Randomized Alignment方法。然而,文中引入了平面全等集的思想,从Q中只选择一小部分可能与P中给定的基相匹配的基,而不是从Q中测试所有可能的基.

2 Approximate Congruent 4-Points近似共面四点(4PCS特征)

仿射变换具有以下性质:给定三个共线点{a,b,c},比率‖a− ∥ a − b ∥ / ∥ a − c ∥ \|\mathbf{a}-\mathbf{b}\| /\|\mathbf{a}-\mathbf{c}\| ab/ac是不变的。Huttenlocher[1991]使用该不变量提取平面上4个点的所有二维仿射不变量集,这些不变量在仿射变换下是等价的。我们在三维空间中采用类似的方法。给定一个共面4点基,在另外一个点云数据中寻找其仿射等价(全等)4点集。所有仿射不变4点集是3维空间中4点全等点的超集。随后,我们验证这样的4点集是否(近似)与所选的基集一致。首先简要介绍了二维仿射不变四点集的提取方法,然后详细介绍了三维仿射不变四点集的提取过程。

2.1 4点对的仿射不变性

Huttenlocher(1991)介绍了一种提取二维仿射不变的4点集的方法。设一组共面点X≡ {a,b,c,d},非所有点共线,定义了三个共线点的两个独立比率。设ab和cd为相交于点e的两条线。这两个比率 r 1 , r 2 r_1,r_2 r1,r2
r 1 = ∥ a − e ∥ / ∥ a − b ∥ r 2 = ∥ c − e ∥ / ∥ c − d ∥ r_{1}=\|\mathbf{a}-\mathbf{e}\| /\|\mathbf{a}-\mathbf{b}\|\\ r_{2}=\|\mathbf{c}-\mathbf{e}\| /\|\mathbf{c}-\mathbf{d}\| r1=ae/abr2=ce/cd
这两个比率 r 1 , r 2 r_1,r_2 r1,r2,具有仿射变换不变性,并且能唯一定义四个点。
如下图:
在这里插入图片描述

现在,给定一个由n个点组成的集Q,以及两个仿射不变比r1和r2,我们可以有效地提取由这两个不变量定义的所有4个点集,其中k是4个点集的数目,如下所示:对于每对点q1,q2∈ Q、 计算两个中间点:
e 1 = q 1 + r 1 ( q 2 − q 1 ) \mathbf{e}_{1}=\mathbf{q}_{1}+r_{1}\left(\mathbf{q}_{2}-\mathbf{q}_{1}\right) e1=q1+r1(q2q1)
e 2 = q 1 + r 2 ( q 2 − q 1 ) \mathbf{e}_{2}=\mathbf{q}_{1}+r_{2}\left(\mathbf{q}_{2}-\mathbf{q}_{1}\right) e2=q1+r2(q2q1)
如下图的中间图所示:对于基准点云任意4个点中得到的 r 1 , r 2 r_1,r_2 r1,r2,在待配准点云任意两点 q 1 , q 2 {q}_{1},{q}_{2} q1q2,由上式可以得到2个 e 1 e_1 e1(由 r1计算得到),2个 e 2 e_2 e2点(由 r2计算得到)。如下图中的右边图所示:对于两条线段(4个点)而言,若第一个线段中的任意一个 e 1 e_1 e1(一个线段两个 e 1 e_1 e1)与第二条线段中任意一个 e 2 e_2 e2(一个线段两个 e 2 e_2 e2)重合或者在很小距离范围内,那么可以认为这两个线段对应的四个端点,可能是基准点云中4个点的对应点。
如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8OAGx31j-1655646190413)(./4points.png)]

2.2在3维空间中寻找4个共面点集对

给定从点集P和另一点集Q中选择的(近似)共面点的4点基B∈ R3,我们的目标是从Q中提取与B近似相等的所有4个点的集合。首先给出B,我们计算它在这个平面上的两个仿射不变量比,如前所述。
然后,使用第3.2节中描述的方法,从点Q中,通过仿射变换提取与B相关的所有点集。虽然此方法能够获得所需4点的共面点集,但是会存在一定数量的虚假匹配。
为了去除非全等基,我们查看它们在点云中的原始位置,并验证相应的集是否在某个距离阈值内与基集B一致。然后,使用基B和Q中的每个基,通过最小二乘计算最佳对齐刚性变换。

上述程序需要大量内存,对于大量点云是不合适的。做出以下改进:刚性变换保持点间欧氏距离。给定基数B≡ {a,b,c,d},我们首先计算距离d1=‖a− b‖和d2=‖c− d‖。现在我们只考虑Q中的的距离为d1或d2的点对,最大误差为δ。

3 4PCS算法

我们给出了两个点集P和Q,这些点的位置精度的不确定性度量(δ>0),以及P中可与Q重叠区域分数f的估计方法。我们的目标是找到一种刚性变换,使P中的最大点数与Q中某个点之间的距离小于δ。我们提出了一种算法(见算法1),其运行时间取决于给定点集之间匹配点数的最大值,并将其随机化,以很高的概率发现正确的刚体变换。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WuXT13Ov-1655646190413)(./4pcs.png)]

我们首先选择一个由由4个共面点组成的基B⊆ P。实际上,我们允许一些非平面性,因为不太可能存在4个共面点。我们随机选取三个点,并选择剩余点,使四个点一起形成一个widebase,该base(近似)共面。通过选择彼此相距较远的点来创建widebase,从而产生更稳定的共面点。然而,如果我们选择的点相距太远,所选的点可能不会全部位于重叠区域(用于部分匹配)。我们使用重叠分数f来估计这个最大距离。如果没有提供f的估计值,我们将在f=1,0.5,0.25,…的情况下以减少猜测的方式运行该算法。直到我们达到所需的误差容限。在f已知的情况下,我们首先选择一组可能位于重叠区域的三个点,然后如前所述选择第四个点。

对于从算法的SELECTCOPLANARBASE阶段获得的平面基B,我们可以使用基点定义仿射不变比率。然而,对于近似平面基底,我们使用位于连接点对的的最近点来定义不变比率。现在,我们应用第2.1和2.2节中描述的方法来提取集合U≡ Q中的4个点的所有子集的{U1,U2,…,Us},它们可能与B一致。对于每个Ui,使用B和Ui之间的对应信息,我们计算使B在最小二乘意义上接近Ui的最佳对齐刚性变换Ti【Horn 1987年】。为了验证Ti,我们计算Ti*(P),并计算Ti*(P)中有多少点比δ更接近Q中的某个点。为Ti评分(参见[Irani和Raghavan 1996])。选取评分最高的Ti,为最终的变换T。

给定一个基Bi,我们描述了如何计算与其对应的最佳变换Ti。根据对齐的点数,为每个对齐变换Ti分配一个分数。使用该程序,我们现在执行Randomized Alignment过程,并根据重叠分数f的估计值,测试出L个不同的基(见公式1)。在所有这些试验中,我们选择得分最高的变换矩阵Topt。

4 一些加速技术

配合局部特征描述子和局部特征(曲率,法线),加速4点共面点集的选择过程。

5 4pcs在pcl中应用


#pragma once
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <iostream>
#include <pcl/registration/ia_fpcs.h>
#include <pcl/registration/ia_kfpcs.h>
#include <time.h>
#include <boost/thread/thread.hpp>


using namespace std;
typedef pcl::PointXYZ PointT;
typedef pcl::PointCloud<PointT> PointCloud;



int fourpcs(const pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_source,
	const pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_target,
	pcl::PointCloud<pcl::PointXYZ>::Ptr transformed_source)
{




	//四点法配准
	PointCloud::Ptr pcs(new PointCloud);
	pcl::registration::FPCSInitialAlignment<pcl::PointXYZ, pcl::PointXYZ> fpcs;

	fpcs.setInputSource(cloud_source);//输入待配准点云
	fpcs.setInputTarget(cloud_target);//输入目标点云

	//参数设置
	fpcs.setApproxOverlap(0.6);//两点云重叠度
	fpcs.setDelta(0.5);//Bunny
	//fpcs.setDelta(0.5);//hippo
	fpcs.setMaxComputationTime(50);
	fpcs.setNumberOfSamples(int(cloud_source->size()/20));
	Eigen::Matrix4f tras;
	clock_t start = clock();
	fpcs.align(*pcs);
	clock_t end = clock();
	cout << "time:" << (double)(end - start) / (double)CLOCKS_PER_SEC << endl;
	cout << "score:" << fpcs.getFitnessScore() << endl;
	tras = fpcs.getFinalTransformation();
	cout << "matrix:" << endl << tras << endl << endl << endl;


	//PointCloud::Ptr cloud_end(new PointCloud);
	pcl::transformPointCloud(*cloud_source, *transformed_source, tras);
	//visualize_pcd(cloud_source, cloud_target, cloud_end);
	return (0);
}


参考:
《4-Points Congruent Sets for Robust Pairwise Surface Registration》
https://blog.csdn.net/qq_41102371/article/details/111293664
https://blog.csdn.net/Ha_ku/article/details/79480613
https://blog.csdn.net/renyuanxingxing/article/details/84662986
https://blog.csdn.net/qq_41102371/article/details/111715115

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
点云配准是三维数据处理的一项重要技术,可以将多个点云数据集对齐成为一个整体。在点云配准中,采用SAC-IA(Sample Consensus ICP with Applicable)算法进行配准,其优劣如下: 优点: 1. 高效性:SAC-IA算法通过使用采样一致性(Sample Consensus)策略来估计初始变换矩阵,并在此基础上进行迭代优化,因此具有较高的计算效率。 2. 鲁棒性:SAC-IA算法利用RANSAC(Random Sample Consensus)方法来鲁棒地估计初始变换矩阵,并通过迭代的方式最小化配准误差。由于采样和迭代操作的存在,SAC-IA对于局外点的干扰有一定的容忍性,对于噪声较多或局外点较多的情况下,仍能得到较好的配准结果。 3. 可适用性:SAC-IA算法可以用于各种不同类型的点云配准问题,无论是刚性配准还是非刚性配准,都能得到较好的效果。 缺点: 1. 参数选择的依赖性:SAC-IA算法中存在一些参数需要用户进行预设,例如采样率、迭代次数等。这些参数的选择对于配准结果的影响较大,但对于不同的点云数据集可能需要进行不同的设置,需要经验和调试来选择合适的参数。 2. 局部最优解问题:由于SAC-IA算法采用的是局部优化的方式,可能会陷入局部最优解而无法达到全局最优。这意味着在某些情况下,SAC-IA可能无法得到最佳的配准结果。 综上所述,SAC-IA算法具有高效性、鲁棒性和可适用性等优点,但也存在参数选择的依赖性和局部最优解问题。根据实际应用需求和数据特点,选择适合的算法进行点云配准是十分重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值