简介

4PCS算法是一种快速的、鲁棒的三维点云配准方案,该方案使用宽基底,对噪声和异常值具有良好的适应性,该算法允许对有噪声的原始数据进行配准,而无需对数据进行预过滤或去噪。此外,该方法大大减少了在噪声存在的情况下在潜在表面的可靠配准之间所需的试验次数,也无需对开始对准进行任何假设。我们的方法是基于一种新的技术,即我们从一个三点集(3D point set)中提取出的共面四点集(4-points sets)对于给点的另一个四点集在刚性变换下近似全等(后文细说,不懂没关系)。这个提取过程大致时间复杂度为O(n^2 + k)时间,其中n为候选点的数量,k为申明的4点集的数量(k也是计算得到的),在实际应用中,当噪声水平较低且有足够的重叠时,利用局部描述子将时间复杂度降低到O(n + k),我们还提出了一种处理相似性和仿射变换的扩展。与常见的随机配准技术相比,我们的技术实现了一个数量级的渐近加速。我们证明了我们的算法的鲁棒性通过多趟扫描每趟受不同程度的噪声,异常值,和重叠程度的影响。

近似全等四点集怎么定义?

利用刚性变换后交点所占线段比例不变以及点之间的欧几里得距离不变的特性,在目标点云中尽可能寻找4个近似共面点(近似全等四点集)与之对应,从而利用最小二乘法计算得到变换矩阵,基于RANSAC算法框架迭代选取多组基,根据最大公共点集(LCP)的评价准则进行比较得到最优变换。

上图阐释了对于全等4点集的仿射不变比性质。给定表面S1上的点,设点a, b, c, d共面,直线ab和cd相交于点e。在任意的仿射变换下,保持比值 r1 = lla - ell / lla - bll 和比值 r2 = llc- ell / Ilc - dll 不变。如果S2是另一个与S1(部分)匹配的曲面,且4点共面基底位于重叠区域内,则S2对应的点集也是共面的,且满足以下关系: lla' - e'll / lla' - b'll= r1,llc' - e'll / Ilc' - d'll = r2。

怎样生成我们需要的四点集?

step1:首先在源点云中随机选择三个点,要求这三点所构成的三角形面积尽量的大(三点确定一个平面,向量叉积可以计算面积),但是三点间的距离不能超过一定的阈值上限,该上限由两片点云的给定重叠率 f 确定。因为三点之间距离越大,配准的鲁棒性越高;但距离过大,三点均在两点云的重叠区域之外了,配准效果又不好。因此需要在满足上限的基础之上,尽可能保证大的三级形面积。若没有给定点云重叠率f,则可以进行f=1.0,0.75,0.5...重叠率递减测试,选择最优变换。

step2:确定三点后,源点云四点集中第四点的选择方式为:遍历源点云中所有的点,对每一个点进行计算验证选择最优的第四点。第四点需要与其他三点组成的平面尽可能的共面(即不强制要求四点共面,但第四点到其他三点平面的距离尽可能小),并且第四点与其他三点的距离也要满足距离阈值范围(不能太近不能太远)。

step3:源点云中的四点集选择完成后,就可以计算其四点构成的两线段交点的变换不变比,根据不变比在目标点云中遍历搜索对应的满足该约束所有四点集(即下文的4PCS算法),这就是(近似)全等四点集。

4PCS算法

上图中:提取仿射不变性全等四点集,(左边)给了一个基底B = {a, b, c, d} 由四个近似共面点组成,我们提取两个比率r1和r2。(中间)对任意点对{q1, q2},可以有两个配准,一个对应于{a,b},一个对应于{c, d},导致四个可能的中间点。这些点计算为e1 = q1 + r1(q2−q1)和e2 = q1 +r2(q2−q1)。(右边)现在,给定一组共面点Q,我们想要提取出一个4点集合它在仿射变换中与给定的基底B全等。对于每一对点{q1, q2}∈Q,我们按所述计算四个中间点。为了简单起见,我们只在图中表示每个点对的两个点,如果e1≈e2, 4点集则约全等于给定的B。在这个例子中,{a, b, c, d}近似全等于{q5, q3, q4, q1}。

详细步骤

step1:在源点云P中,使用上述的四点集的选择方法随机选择一个四点集B={b1,b2,b3,b4},其中(b1,b2)确定线段1,(b3,b4)确定线段2。接着去计算不变量d1=|b1-b2|,d2=|b3-b4|(约束1),不变比r1=|b1-e| / |b1-b2|,r2=|b3-e| / |b3-b4|(约束2)。注意因为四点不一定共面,两条线段也不一定相交,所以可以使用连接两个线段的最近点的中心点作为“交点”。

step2:在目标点云Q中,遍历所有的点对,筛选满足约束1(允许有一定的误差)的点对集合R1,R2。其表示为:

计算R1 ={ (pi, pj) | pi, pj ∈ Q) },使|| pi - pj ||∈ [ d1- δ,d1+δ ].

计算R2 ={ (pi, pj) | pi, pj ∈ Q) },使|| pi - pj ||∈ [ d2- δ,d2+δ ].

step3: 遍历点对集合R1中的所有点对元素,计算其线段上满足不变比r1的目标交点,然后将所有计算结果e存入搜索树ANN Tree(近似最邻近搜索树,最常见的是K-D Tree算法),并构建相应的映射

step4:遍历点对集合R2中的所有点对元素,计算其线段上满足不变比r2的目标交点,并构建相应的映射。然后遍历所有的点,在之前构建的ANN Tree中搜索可接受误差范围内的重合点,若可找到则说明能在Q中找到一个对应的近似全等四点集。最终求得所有的近似全等四点集

step5:遍历所有的近似全等四点集,对每一个通过最小二乘法计算其与B的对应变换矩阵。然后使用该变换矩阵对源点云P进行变换得到P',统计P'与Q中的最大公共点集(LCP),记max(LCP)的变换矩阵为本次迭代的最优变换矩阵T并保留

step6:不断迭代这个过程,记录最优的变换。迭代结束后得到的变换矩阵即为最优变换矩阵。

算法步骤伪码(原文):

 原论文:​​​​​​4-points congruent sets for robust pairwise surface registration | ACM Transactions on Graphics​​​​​​4-points congruent sets for robust pairwise surface registration | ACM Transactions on Graphics

参考文章:点云配准(三) 传统点云配准算法概述_阿阿阿安的博客-CSDN博客_点云配准​​​​​​​​​​​

3D点云配准算法-4PCS(4点全等集配准算法)相关推荐

  1. 深度学习在计算机视觉领域(图像,视频,3D点云,深度图等)应用全览

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨黄浴@知乎 来源丨https://zhuanlan.zhihu.com/p/55747295 编 ...

  2. 算法24:LeetCode_并查集相关算法

    目录 题目一:力扣547题,求省份数量 题目二:岛屿数量 题目三:岛屿数量拓展 什么是并查集,举个简单的例子.学生考试通常会以60分为及格分数,我们将60分及以上的人归类为及格学生,而60分以下归类为 ...

  3. 用c语言实现knn算法要有训练集和测试集,KNN算法实战:手写字体识别

    我们已经知道手写字体数据集是一个8×8的矩阵,共有64个特征.让我们看一下K最近邻算法对手写字体数据集处理的效果. 1) 导入相关包 这里我们将用到 datasets 中的手写字体数据,使用 trai ...

  4. 基于激光雷达的里程计及3D点云地图中的定位方法

    本文转载自公众号@点云PCL,基于激光雷达的里程计及3D点云地图中的定位方法 :https://mp.weixin.qq.com/s/laA1YAPBCpqlzdGi0yb2cQ 论文:LOL: Li ...

  5. Python3: fp-growth频繁项集求解算法代码(提供py文件,可直接调用)

    一.写在前面 fp-growth算法是一个生成频繁项集的算法,其主要利用了FP树的数据结构,整个生成过程只需要遍历数据集2次. 本fp-growth代码是基于开源代码fp-growth的实现(gith ...

  6. 简述3D点云配准算法

    ​ 蝶恋花·槛菊愁烟兰泣露 槛菊愁烟兰泣露,罗幕轻寒,燕子双飞去. 明月不谙离恨苦,斜光到晓穿朱户. 昨夜西风凋碧树,独上高楼,望尽天涯路. 欲寄彩笺兼尺素.山长水阔知何处? --晏殊 导读: 3D点 ...

  7. 点云粗配准算法-4pcs

    4pcs粗配准算法 一,简介 4PCS[1]配准算法使用的是RANSAC算法框架,通过构建与匹配全等四点对(啥意思)的方式来减少空间匹配运算,进而加速配准过程. 4PCS不同于icp和ndt,其是一种 ...

  8. Patchwork++论文阅读——基于3D点云的快速鲁棒地面分割算法

    文章目录 摘要 1. 介绍 2. 相关工作 A. 基于学习的地面分割方法 B. 传统的地面分割方法 C. 地面分割的应用 3. PATCHWORK++:快速.稳健.自适应的地面分割 A. 问题定义 B ...

  9. 激光雷达和3D点云算法

    文章目录 1.1 激光雷达硬件平台 1.2 激光雷达原理 1.3 三维激光系统研发难点 1.4 点云应用方向 1.5 点云分类,点云分割,点云特征提取(pointnet++) 1.6 点云补全(PF- ...

最新文章

  1. enumeration学习
  2. 【EventBus】事件通信框架 ( 订阅方法注册 | 注册 事件类型 - 订阅类 + 订阅方法 到指定集合 | 取消注册 数据准备 )
  3. 管理Exchange服务器
  4. python写订单管理系统_利用Python快速搭建钉钉和邮件数据推送系统
  5. html placehonlder属性,HTML input placeholder 属性
  6. C语言课程设计题库及答案,C语言课程设计题目.docx
  7. Aprior算法简化算法——FP-Tree思想与实现
  8. JavaEE班第四天
  9. 计算机启动硬盘响,电脑开机时硬盘响个不停是什么原因?原因分析与解决方法介绍...
  10. 给网站设置ICO图标
  11. Ubuntu 设置 samba共享文件夹
  12. Android 扫码枪 读取(外接键盘读取)
  13. 【Windows】Mathpix Snip-公式神器
  14. o2o模式主要利用在哪些领域 企业怎么发展o2o模式?
  15. Java简繁体汉字转化
  16. Autolisp:利用AuoCAD之Lisp编程案例之智能加工齿轮的演示程序
  17. 恒指期货交易5分钟技巧
  18. 第七届ArcGIS暨ERDAS用户大会
  19. Mybatis查询oracle之clob类型
  20. 51单片机(STC)串口无阻塞发送函数

热门文章

  1. oracle中to_date详解
  2. 实验室智能化管理系统建立步骤
  3. 76、基于STM32的电动车小车蓄电池/锂电池充电桩系统设计
  4. 英语思维导图大全 非谓语(十二)
  5. 宜宾地震,物联网发挥了怎样的作用?
  6. linux ac3165驱动下载,驱动程序无线网卡固件( 英特尔 3165 iwlwifi ) 仅适用于内核 4.1 +: 在内核 3.19的办法?...
  7. 网易云信IM小程序上线?我们是这么做的!
  8. Mac开发配置各种问题记录(安装VSCode、安装postman、安装git、git生成SSH公钥、安装NVM和Homebrew、安装NVM和Homebrew)
  9. 超好用的编程字体推荐!!!以及vsCode的配置使用
  10. 2016第四套人民币荧光币价格表一览