PCL三维重建笔记

三维重建的三种方法:

  1. KinectFusion,直接获取人体的三维点云数据,但获得的点云分散而模糊

  2. Opencv、OpenNI,操作过程过于繁琐、配置环境过于复杂

  3. 利用Processing软件编程,通过导入SimpleOpenNI库,连接Kinect就可以直接获得三维模型

相机标定

相机标定得到的内参仅仅是对相机物理特性的“近似”

传统相机标定假设相机是小孔成像模型,一般使用两种畸变来模拟镜片的物理畸变。但实际相机的物理特性很可能没办法通过上述假设来得到完全的拟合。所以需要意识到,每一次相机标定仅仅只是对物理相机模型的一次近似,再具体一点来说,每一次标定仅仅是对相机物理模型在采样空间范围内的一次近似。

文献查询

https://www.zhihu.com/people/gai-yong-hu-wei-zhu-ce-72/activities

1. KinectFusion:

目的在于利用一台围绕物体移动的Kinect实时地三维重建。相比于简单的三维点云拼接,该项目支持GPU加速,快速便捷。另外,如果持续的对物体进行扫描,可以不断的提高重建

的精度,导出更为准确的三维数据格式文件。Kinect Fusion可以用于工业设计、3D打印机、室内设计、游戏制作、城市规划等领域。但是该项目对设备的硬件要求较高,基于GPU重建的系统要求支持DirectX 11的显卡,否则Kinect Fusion就运行不起来。

PCL模块:

可视化(visualization)、配准(registration)、关键点(keypoints)、检索(search)、输入/出(io)、滤波(filters)、分割(segmentation)、特征描述与提取(feature)、曲面重建(surface)、八叉树(octree)、采样一致性(sample_consensus)、K-d树(k-d tree)、深度图(range_image)、通用模块(common)

基于Kinect的物体三维重建:

Kinect的标定(棋盘标定);3D.X、3D.Y坐标的计算(真实世界坐标);R、G、B坐标的提取;点云数据配准(基于最小二乘法的最优匹配算法—ICP算法);降噪与滤波(均值滤波)

当相机位姿为0时
PCL三维重建笔记_第1张图片
当给出5张图的相机位姿时
PCL三维重建笔记_第2张图片

点云融合流程
PCL三维重建笔记_第3张图片

2. Kinect点云融合:

二代Kinect相对一代各方面都有了显著增强,Kinect1通过投射红外散斑获取场景的深度信息,Kinect2改进了获取深度的技术,增加了红外感应功能,除了深度图像和彩色图像,我们还可以直接采集其红外图像,这对于Kinect1是非常困难的。Kinect2提供了更高的图像分辨率(彩色相机达到1920*1080),视觉效果更好,同时SDK中自带识别手势、骨骼等特征信息的功能,sample给的小程序也很有趣,有兴趣可以体验一下。多Kinect定点点云融合

关于配置环境,Kinect1运行系统要求至高为windows7,其他要求对于目前的电脑基本没有压力,安装1系列的SDK即可(最高版本1.8);而Kinect2要求较高,运行系统需为windows8或windows10,USB接口必须是3.0,CPU主频和显卡不能太差,不然特别卡,目前其SDK只有2.0这个版本。由于Kinect2的特殊要求,暂时不支持单台电脑同时连接多个Kinect,而Kinect1是可以的。

关于我要做的这个实验,思路是非常简单清晰的,主要是点云的拼接配准工作。计划用三个定点的Kinect完成三个视角下的点云采集,最后完成点云拼接优化。固定好Kinect后,首先要做的是位置的标定,我用双目标定的方法用Matlab标定工具箱得到不同Kinect坐标系间的旋转平移矩阵,进而配准点云。在这里我折腾了较长时间,因为起初我用彩色相机采集的图像进行标定,结果第一个Kinect下采集的点云通过计算的变换矩阵转到第二个Kinect坐标系根本难以与该视角的点云对齐,后来才发现Kinect的彩色相机和深度相机采集的图像差别很大,所以转而寻求对深度图进行标定。一种方法是改进原来的标定板,因为深度图中黑白格几乎没差,检测不到角点,需要制作凹凸状的棋盘格,这无疑很麻烦。后来通过查找资料才发现,对于Kinect2,有一个很方便的功能是可以直接采集红外图像,而红外图像和深度图像是对齐的,随后的标定工作非常顺利。用红外图像计算的转换矩阵非常精确的将点云融合到了一起。由于拍摄的是人体模型,这方面就不放图了。关于点云的转换,我是通过一段简单的PCL程序完成的,有些软件貌似也可以做这项工作。点云融合的程序可在这里下载。

在不同视角点云采集方面,我用的是SDK自带的一个Kinect Fusion做的sample,将该视角的点云保存为ply格式,后又通过格式转换转为pcd格式,作为PCL程序的输入,输出同样是pcd格式,可根据需要再转为其他格式的点云。做完点云融合后,视需求再做后续渲染工作,比如通过泊松重建算法优化重建模型。

3. 三维点云的拼接:

在三维重建的过程中每次只能测量有限的区域,那么拼接的操作就再所难免了,最终拼接的效果往往觉得了你做的产品是否真的有价值。很多市面上的产品在比较的时候首先看的是整体的重建效果,而整体的效果就是拼接决定的。拼接的效果由精度和效率决定的,首先是精度主要看最终拼接的点云之间融合的好坏,其次的效率,效率主要考察的是在拼接的过程是否流畅,是否需要很多标记点,好的拼接效率就是在使用少量的标记点也能拼接出高精度的效果。

点云配准是指扫描采用装置获得的两组有重复区域的点云数据通过确定一个合适的坐标变换使两组数据点云在一个统一的坐标系下对齐以及合并。

各类pcd点云数据模型

https://github.com/PointCloudLibrary/data/tree/master/tutorials

Kinect实时采集场景(未加入RBG图像)

场景1:
PCL三维重建笔记_第4张图片

场景2:
PCL三维重建笔记_第5张图片

其他学习博客:

博客:RGB-D实时重建那点事

http://blog.csdn.net/fuxingyin/article/details/58624264

博客:RGB-D Camera汇总

http://blog.csdn.net/MyArrow/article/details/52678020

博客:三维重建基础

http://www.itboth.com/d/zUfEJrzMvQFf

Kinect的三维重建

http://www.itboth.com/d/vM7VJbyyEzea

tp://www.itboth.com/d/zUfEJrzMvQFf>

Kinect的三维重建

http://www.itboth.com/d/vM7VJbyyEzea

你可能感兴趣的:(计算机视觉,PCL,Kinect2.0,三维重建,点云)