三维扫描仪[12]——大型扫描平台,贴点还是ICP?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/coder_ma_14/article/details/73832809

我觉得有必要专门把这段心路历程拿出来分享一下。
在这个简易三维扫描项目中,我们并没有实战拼接。但是我提到了贴点以及其他的拼接办法。现在,我将简单介绍ICP——迭代最近点(Iterative Closest Point, ICP)算法。

ICP算法简介

ICP算法是点云精确匹配中一种重要的算法。 1992年,由Besl首先提出,该算法是通过迭代计算,使两片点云上对应点对或点面距离的均方误差最小。其核心算法步骤主要包括:
1)需要找到两幅要匹配点云的最近匹配点。
2)计算两幅匹配点云的旋转矩阵。
3)计算两幅图像的平移矩阵。
4)如果两组点云距离小于给定的阈值或超过最大迭代次数,迭代停止。
放在本项目中,整体会经历四个过程:
1)对原始点云数据进行采样
2)确定初始对应点集
3)去除错误对应点对
4)坐标变换的求解。
其实你只需要百度一下 ICP算法 就可以得到很多很多很详细的说明了。

唯一需要注意的一点!
PCL自带OpenNI,和我博客里给出的,也就是MIT那个SampleOpenNI库以及同时安装的OpenNI有冲突!想安装PCL得先把你之前安装的开源玩意删干净。

贴点

在被测物体上贴点,或是在被测物体旁边贴点,在拼接时就可以不用ICP迭代迭代再迭代,效率高得很。
但是贴点的话实在是太累了…
最累的其实还不是往上贴的时候,而是向下撕的时候……那个丧心病狂啊!
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

但是效果还是很好的。
那么什么时候效果不算好呢?
想像一下,有一台这样子的人体扫描仪。
这里写图片描述
如果我们只在底下的台子上贴点,会怎么样?拼接出来会歪!可能下面拼得很好,但上面的人就是一片朝里,一片朝外,一片左扭一点,一片右扭一点了。

总结

如果设计上图这种大型扫描平台,在平台上提前贴好点,被扫描到的地方都贴上点,可想而知是很多很多点,使用多台扫描仪,在瞬间完成扫描,即可完成拼接。但是如果扫描时间过长,有可能被测物体会移动,导致拼接不准。但是如果不会动就没有这个问题了。
同样是大型扫描平台,如果是要扫汽车,还要贴点,那么就是先贴编码点(理解为大点),再贴小圆点(小点),拿个单反拍整个大点,把大半辆车都拍进去,得到稀疏框架/轮廓点,再拿扫描仪扫小点,最后依靠编码点和小圆点实现拼接。
这里写图片描述
这里写图片描述
还是大型扫描平台,还是扫汽车,可以用手持扫描仪,但是除了我之前提到过的手持式扫描仪外,其实还有一个设备才能组成一套完整的扫描系统:必须有一个摄像头,实时看着你的手持扫描设备,来确定世界坐标系。当车太大,手持扫描系统需要移动时,这个摄像头就可以定下新的手持扫描仪的位置。
这里写图片描述

回到ICP和贴点上来。
就经验来说,没有个80%-90%的重合度就不要用什么ICP了,50%的重合度那几乎一定会错误的,纵使他能返回结果也是错误的,退一步来说,如果我们已经有了这种平台,
这里写图片描述
那么,可想而知扫描仪的角度以及其他参数都固定了,那么我们只需要标定好所有扫描仪,把它们都标定在一个坐标系下(这里可以回顾一下我之前的那个转盘扫描仪的项目),就可以很好的完成扫描,之后取点云子集,子集的位置就是两片点云的重合处,如果你3台扫描仪扫,肯定会有重合的地方的,那就拿出重合的地方ICP,这样就准了。

至于贴点……真的好麻烦啊……

没有更多推荐了,返回首页