原文链接

背景

两个点云要注册在一块,一般分两个步骤:先做一个大致的对齐,也就是所谓的初始注册,一般可以通过一些可靠的点对来计算得到(如图3所示);然后在初始注册的基础上进行精细注册,提升注册的精度(如图4所示)。精细注册的方法,一般采用ICP算法,也就是最近点迭代的方法。


ICP算法总览

下面先总的介绍一下ICP算法,之后再详细介绍里面的一些重要步骤。

算法输入是两片有部分重叠的点云a和b,并且已经初始注册好了,输出是ICP注册的刚体变换T:

1. 对b进行点采样,得到采样点集s

2. 在a中寻找采样点集s的最近对应点,得到点对集合c

3. 对c中的点云进行加权处理,并删掉一些不好的点对

4. 应用目标能量来优化点对距离,得到刚体变换Ti。Ti对采样点集进行刚体变换

5. 迭代步骤2-4,直到目标能量优化停止。T=Tn * ...... T1 * T0


点采样

由于计算速度的要求,一般是需要对点云b进行采样。然后用采样点去找对应进行优化。除了计算上的要求,如果用全点云进行匹配的话,精度也不会更加的好。因为更好的采样方法可以避免陷入能量局部极小的情况。常见的采样方法有均匀采样和几何采样。

  • 均匀采样:采样点分布均匀,采样速度快,适合几何特征比较多的点云。因为这样的点云,均匀采样总能采样到几何特征。如果几何特征少的话,如下左图所示,有可能就采样不到几何特征。
  • 几何采样:采样点会在几何特征明显的地方被采样到,如下右图所示。它能够抓住点云的几何特征,使得注册精度更高,更稳定。计算速度可能会慢一些,并且不太适合噪音比较大的点云,因为噪音其实就是几何特征了。

一个比较理想的采样方法,既能够采样到点云的几何特征,分布上也能做到局部均匀,然后就是计算速度要快。下面是一个采样示例,左图是原始点云,中间图是均匀采样,右图是几何采样。


点对应

从ICP的名字,就能看出点对应怎么去找,也就是给每个采样点找最近点。查找最近点是比较简单的,一般用KD Tree来加速查找。这些点对,有些是无效的,需要剔除掉。常用的剔除策略有距离和法线:

  • 距离:点云a和b一般只有部分重叠,b的采样点集里,有部分点在a里是没有对应的。记这部分点为c,那么c的对应点对是需要剔除掉的。经过观察,我们发现c的点对距离一般是比较大的,所以可以设置一个距离阈值,来过滤掉这些点对。这个阈值算是一个参数了,可以根据点云的平均距离来设置,迭代开始的时候设置的大一些,如果找到的点对数目太少,可以适当的增大这个距离阈值。ICP迭代过程中,点云距离会逐渐减小,这个距离阈值也可以随之动态减小。
  • 法线:在ICP迭代初期,点云位姿相差比较大,很多距离相近的点对也是错误的无效点对。我们可以根据点的一些属性来过滤掉这些无效的点对。常用的属性就是点云法线。比如点法线夹角要小于一个角度阈值。这个阈值和距离阈值一样,也是动态变换的。

目标能量

常用的目标能量有两种:点到点的能量和点到平面的能量。直观上讲,点到点的能量如左图所示,优化的是有效点对之间的距离;点到平面的能量,如右图所示,优化的是点到点云局部平面的距离。

  • 点到点的能量:∑ || a - T(s) ||:其中s是点云b的有效采样点,a是s对应的点,T是刚体变换
  • 点到平面的能量:∑ || (a - T(s)) * n(s) ||:其中n(s)是采样点s的法线

这两个能量,各有优缺点:

  • 速度:本质上两个能量都是优化两个点云曲面的距离,点到点能量是线性收敛,点到平面能量的迭代等价于Gauss-Newton迭代,它的收敛速度是优于线性收敛的,情况好的时候,可以达到二阶收敛速度。
  • 点到点能量不需要法线信息。有时候可靠的法线信息不容易得到,比如曲面严重不光滑,噪音十分严重,或者点云相对于物体采样非常稀疏等。不可靠的法线会使得点到平面的能量优化不稳定。

求解目标能量

能量里面只有T的旋转变换是非线性的,可以转化成线性最小二乘求解。常用的两种转化方式:

  • 一种是把T当作仿射变换,对求解得到的T做SVD分解,求得仿射变换在刚体变换空间中的投影
  • 另一种是把旋转矩阵用欧拉角的方式来表示,这样T里面的非线性部分就是sin和cos。我们假设每次迭代刚体变换的旋转角度不大,则cos(theta) = 1, sin(theta) = theta。这样就把T转化为线性矩阵了。

迭代停止条件

迭代算法总要有个停止条件。这个看似平凡的步骤,却是所有迭代算法的关键。它能影响算法最终的效果和性能。ICP常见的迭代停止条件:

  • 最大迭代次数
  • 迭代过程中,刚体变换近似恒等变换了
  • 迭代过程中,点云之间的距离小于一定的阈值
  • 迭代过程中,点云之间的距离越来越大了,需要中止无效迭代。或者更新算法参数重新迭代。

有兴趣的读者,欢迎参考视频版本

点云ICP注册的更多相关文章

  1. AWS、Azure和Google的云容器注册表有什么区别?

    亚马逊云计算服务(AWS).谷歌云服务和微软Azure,这三大公共云平台都提供Docker容器注册表.虽然他们的产品看起来很相似,但开发人员在做出选择之前,应该先了解价格和功能方面的差异. 公共云供应 ...

  2. bmob云 实现注册和登录的功能

    向大家介绍一款我感觉非常溜的一款后端云服务bmob云 借助bmob云我们可以实现注册和登录页面的功能,下面就让我给大家演示一下借助bmob云服务实现这两个功能吧.  1. 用户是一个应用程序的核心.对 ...

  3. 阿里云域名注册详解与Github绑定

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 今教一篇如何注册域名,拥有自己的域名是不是很爽呢?答案是是的,那 ...

  4. git的基本操作命令和码云的注册使用

    Git文件操作文件的四种状态版本控制就是对文件的版本控制,要对文件进行修改.提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上. Untracke ...

  5. KinectFusion 介绍

    原文链接 KinectFusion简介 KinectFusion是微软在2011年发表的一篇论文里提到的点云重建的方法,论文题目是:KinectFusion: Real-Time Dense Surf ...

  6. 潭州课堂25班:Ph201805201 django 项目 第三课 码云注册,django项目 (课堂笔记)

    d码云注册,登录, 创建项目: 生成秘钥 想看秘钥: 添加公钥 复制 ssh 连接 通过  git clone <ssh> 连接 在服务器上创建 python3 虚拟环境, 创建项目  p ...

  7. PCL点云配准(2)

    (1)正态分布变换进行配准(normal Distributions Transform) 介绍关于如何使用正态分布算法来确定两个大型点云之间的刚体变换,正态分布变换算法是一个配准算法,它应用于三维点 ...

  8. iOS:融云即时通讯快速集成

    一.介绍 即时通讯在众多社交软件.生活软件以及教育软件中已经是必备的功能了,在当前国内,即时通讯SDK做的比较不错的有那么几家,例如环信SDK.融云SDK...,这两家做的都很不错,各有千秋吧,要是真 ...

  9. 阿里云产品介绍(二):云服务器ECS的孪生兄弟们

    上一篇介绍的云服务器ECS,是阿里云最基础的产品,也是每一个云计算厂商最基础的产品,俗称爆款.除了标准的云服务器,阿里云也不停的在推出面向特殊业务场地的云服务器,可以说是ECS的孪生兄弟们. 这一篇就 ...

随机推荐

  1. 关于深度学习之TensorFlow简单实例

    1.对TensorFlow的基本操作 import tensorflow as tf import os os.environ[" a=tf.constant(2) b=tf.constan ...

  2. fedora 29 安装ALSA声音驱动

    centos系列解决 安装utils时遇到的问题 configure: error: this packages requires a curses library yum install ncurs ...

  3. python基础(while、运算符、编码初始)

    ------------恢复内容开始------------ <!doctype html> while循环 while循环 循环:不断重复着某件事就是循环 while 关键字 死循环:w ...

  4. Python 面向对象Ⅱ

    创建实例对象 实例化类其他编程语言中一http://www.xuanhe.net/般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式. 以下使用类的名称 Empl ...

  5. C# 常用方法——生成验证码

    其他常用方法详见:https://www.cnblogs.com/zhuanjiao/p/12060937.html 原文链接:https://www.cnblogs.com/morang/p/405 ...

  6. springfox-swagger

    swagger简介 swagger确实是个好东西,可以跟据业务代码自动生成相关的api接口文档,尤其用于restful风格中的项目,开发人员几乎可以不用专门去维护rest api,这个框架可以自动为你 ...

  7. DOM 修改与DOM元素

    ㈠HTML DOM - 修改 修改 HTML = 改变元素.属性.样式和事件.   ①创建 HTML 内容 改变元素内容的最简单的方法是使用 innerHTML 属性. 下面的例子改变一个 <p ...

  8. 《剑指offer》算法题第三天

    今日题目: 斐波那契数列 青蛙跳台阶问题(及其变种:变态跳台阶) 矩形覆盖 旋转数组的最小数字 矩阵中的路径 机器人的运动范围 细心的同学会发现,第1,2,3题其实对应的是<剑指>书上的同 ...

  9. TTTTTTTTTTTTTTTTTTTTT POJ 3690 0与* 二维哈希 模板 +multiset

    Constellations Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5923   Accepted: 1164 De ...

  10. Linux如何永久打开端口

    由于防火墙导致同局域网无法通过IP访问,Linux有多种防火墙,需要查看当前使用的防火墙(开机自启),再进行配置  以下是 iptables 和 firewall 防火墙的相关配置,切忌将自己配置的防 ...