APP下载

Kinect 生成点云的物体非实时三维重建方法

2020-01-10徐曦

科学技术创新 2020年16期
关键词:彩色图像体素三维重建

徐曦

(四川电影电视学院,四川 大邑611331)

1 绪论

1.1 三维重建概述

三维重建又称为三维重构,是通过特定设备,获取目标物体和目标场景的信息,并建立对应三维模型的过程。传统的三维模型获取过程一般都是通过人力,在3DMAX 以及MAYA 等建模软件中手工创建,三维重建课题就担负了将人力解放出来的责任,其目标就是通过使数据采集设备以及相关计算机软件算法完成模型的创建过程。在数据采集阶段,所使用的设备获取原始数据的方式决定了三维重建的过程与方法。设备获取原始数据的手段大致有两种:(1)通过光学相机获取彩色或者灰度图像。(2)通过激光或者结构光获取深度数据或点云。而图像信息、深度与点云信息是这两种手段所对应的原始数据。本文实验中使用的Kinect 设备即属于采用不可见的结构光数据采集方式。

1.2 Kinect 简介

Kinect 的内部结构包括:用于获取彩色图像的彩色摄像头,红外发射器与红外接收机,发射器将一组经过调制的红外点阵投射在目标物体上,当点阵反射回来后被接收器接收,由于物体各表面到接收器的距离不同,反射回来的点阵的疏密程度也不同,通过点之间的距离并结合三角测量法,就可以得出深度信息

2 点云的采集与生成

由于Kinect 自身并不能自动生成点云图像,笔者使用的点云数据是由Kinect 的红外深度摄像头和彩色摄像头分别获取的深度图像与彩色图像融合而成。

首先,需要获取深度数据,并将深度数据转换为灰度图像,以便于使用OpenCV 进行显示与观察。Kinect 使用一个16 位的二进制数表示深度,转化为整数后,数值越大离摄像机就越远,也可将其表示为8 位的256 灰度级图像。

其次,要获取彩色数据,Kinect 获取的彩色图像为1280*960,由于是RGB 图像,每个通道占据8 位,Alpha 通道占据8 位,形成了32 位真彩色图像,因此数据量较大,需要减小数据量。同时,为了能够更好的跟Kinect 捕捉到的分辨率为640*480 的深度图像进行配准,所以笔者将彩色图像的分辨率也设定为640*480。另外要注意的是由于彩色图像每个像素有3个分量,所以在将彩色数据流转换到数组中时,需要整合。

在得到所需的两幅图像以后,就可以通过交叉调用OpenCV 与KinectSDK 中的相关函数,将之前得到的深度数据与彩色数据存储在OpenCV 的图像数据中。然后使用PCL(Point Cloud Library)生成一个空数据结构,该数据结构与两幅图像大小相等,然后在程序中使用一个简单的循环结构,遍历每一个像素点,并利用深度数据为其匹配在三维空间中的对应点,然后再将彩色图像中的对应RGB 信息融合进来,最后将结果填充至前述的PCL 空数据结构中,即形成了彩色点云数据,至此已将两幅图像合成为一幅拥有三维信息的彩色点云目标场景图像。

3 点云的预处理

为了后续重建,有必要将已经获取的目标物体点云从整个场景的点云中提取出来,并滤除噪点。

我们要实现四个步骤:

第一,提取(分割)目标物体点云。使用随机采样一致性算法Random sample consensus(RANSAC)从点云中提取平面。其思想为:空间中同属一个平面的点在数学上都应该满足平面的参数方程:

ax+by+cz+d=0

此时,通过分区域随机采样方法,结合坐标可以计算出场景中点的法线,进而通过各个点的法线估算出平面的法线,也就得到了a,b,c。

第二,滤除提取结果中的离群点,采用统计滤波方法,该方法虽然用于传统图像处理,但其思想也可用于点云的统计滤波。设X 为点云中每个点到其自身临近点的平均距离,且X~N(μ,δ2),其中μ 为全局均值,而δ2为全局方差。当某个点的Xi 大于以方差为基准的某个阈值时,则被视为离群点并予以剔除。

第三,物体姿态校正,由于在获取数据过程中,Kinect 有一定的倾斜角,最后的点云在相机坐标系中也会倾斜,需要将其转换到世界坐标系。因此可以通过向量的点积运算找出相机的倾斜角度,将其表示为矩阵R,并通过乘以R-1 来将物体校正到与世界坐标系的z 轴平行。此时物体在屏幕上正对观察视角,利于我们后续的处理。

第四,缺失面弥补。缺失平面的弥补有多种方法,没有统一标准。笔者选择在云台上旋转物体,拍摄物体不同侧面的多个帧,然后采用传统图像拼接中的方法,将物体从这些帧中提取出来,根据旋转角度进行拼接。

4 生成三维网格模型

首先,进行点云平滑操作,该算法采用了移动最小二乘法MLS(Moving Least Square)。

其次,通过有效的下采样算法可以削减点云的数量,且不改变目标物体的拓扑结构。这一目标可以通过八叉树技术实现,原理是:将点云空间划分到不同的八叉树节点,每个节点都是一个体素(Voxel)。此时整个空间就形成了一个体素网格(VoxelGrid)。用每个体素的中心点来替代该体素内的所有其他点,那么整个点云的数量将大幅减少。

最后,重构阶段采用泊松算法,该算法由Michael Kazhdan,Matthew Bolitho,and Hugues Hoppe 联合提出。求泊松方程的最优解就代表了重建过程,与其他算法不同的是泊松算法求出的是全局解而非局部解。它将物体内部的点视为0,外部点为1,物体表面的点视为有向点并指向内部。因此梯度有变化的点就是表面上的点,没有变化的则是其他点。整个物体的表面形成了一个梯度场。此时将点云数据集穿过一个平面,平面上的截痕成为判断点与曲面之间关系的依据。同时可以在不同尺度下解泊松方程,使得曲面可以由粗到细逐渐向物体的表面收敛。

猜你喜欢

彩色图像体素三维重建
瘦体素决定肥瘦
Dividing cubes算法在数控仿真中的应用
三维重建的飞机机动动作库设计与可视化
基于体素模型的彩色3D打印上色算法研究
多层螺旋CT三维重建后处理技术在骨肿瘤影像诊断中的价值
基于二维直方图的彩色图像全局阈值分割方法研究
基于Mimics的CT三维重建应用分析
基于FPGA的实时彩色图像边缘检测
基于距离场的网格模型骨架提取
基于DCT—DWT—SVD的彩色图像安全存储方案