APP下载

Kinect v2的三维物体重建系统设计

2019-06-17张志林苗兰芳

计算机应用与软件 2019年6期
关键词:对应点三维重建头像

张志林 苗兰芳

(浙江师范大学数理与信息工程学院 浙江 金华 321004)

0 引 言

传统的三维重建主要由以下三个步骤构成:获取数据并处理、点云配准以及曲面重建。已有大量的研究使用Kinect v1进行三维重建[2-4]。现阶段最为突出的是微软团队的Newcombe等提出Kinect Fusion[5]算法,其利用Kinect v1可以对任意的室内场景的任意光照条件下进行重建。文献[6-9]将Kinect Fusion算法扩展到适用于更大场景的重建,但是由于受到三维立方体的限制整个场景的重建范围很有限,没有对单个物体提取出来进行重建的模块。周瑾等[10]使用ICP算法寻找输入点云与可变人体模型之间的对应点对,使用可变形的人体模型来拟合采样点云,然后迭代获取具有高精度的人体三维模型。但是此方法只能用于重建人体,局限性很大。宫钰嵩等[11]使用Kinect获取不完整的点云数据,利用网络上已经存在的同类三维模型为参考进行三维重建。但是此方法依赖网络资源,限制了重建物体种类,且还原度低。李诗锐等[12]利用光滑表面作为物理表面平滑程度的先验知识,修正后面数据流的噪声,解决了累积误差问题,并且基于Kinect v2实现了一套三维重建系统,该系统可以实时、精确地重建物体和场景。但是此方法是在KinectFusion上进行改进,依然没有脱离全局立方体对重建范围的限制。

本文在设计基于Kinect v2三维物体重建系统时,主要分为三个模块:获取点云,点云拼接,物体重建。本文三维重建系统适合做离线的点云处理,不具有实时性。本系统的贡献主要有:第一,通过分析Kinect获取点云的噪声分布特点,将所要提取的物体点云放在较高精度的范围内,通过设计一种包围盒来获取高质量的物体点云,添加了物体点云获取模块的设计方案。第二,将粗配准的SAC-IA[13]和细配准的ICP[14]算法扩展到多片点云,并且设计一种可以从两边向中间逼近的点云配准策略,可以很好地消除累积误差。第三,实现了一套完整的使用Kinect v2的三维物体重建系统。实验表明,该系统具有重建精度高、操作方便且设备要求低等优点。

1 获取点云

在使用Kinect v2获取三维点云之前,需要对Kinect v2进行标定。现阶段被广泛地应用于相机标定的方法是张正友标定法[15]。文献[16]通过对比标定前和标定后的深度图像,发现误差很小,表明Kinect v2的内部芯片已经嵌入了对彩色摄像头和红外摄像头进行标定的程序。本文使用Kinect API中的MapDepthPointTo CameraSpace( )函数直接将深度图像转换为三维点云。所以本文并没有对Kinect v2进行额外的标定。图1获取的是展示台上放一把椅子的场景点云,可以看出最左边的墙体和边缘出现了大量的噪声和凸起的情况,采样效果很差。这是由于点到平面距离的标准方差x(mm)与传感器到平面的距离y(m)成如下线性关系[12]。

y=0.547 2x+1.258

(1)

式(1)表明在Kinect v2的有效范围内(0.5米到5.0米)随着传感器到平面距离的增大,采样点云边缘处的残差也随之增大。本文将Kinect v2与所要重建的物体的距离d设置为1米,Kinect v2正对着所要重建物体,即中心位置。这样可以保证所要重建物体的点云尽量精确且不会由于个别点没有深度数据而产生空洞。

图1 包含目标物体的场景点云

2 点云处理

从图1可以看出,目标物体点云包含在获取的场景点云中,需要将目标物体点云从整个场景中提取出来。所采样的是具有x、y、z坐标信息的点云。要想分离出这个椅子,需要保证这个椅子的三维坐标与所在场景及地面、三面墙体和天花板没有交集。本文通过设计一种三维包围盒来分离目标物体点云。具体是使用x、y、z三个方向的直通滤波器将椅子周围的点云过滤出去,得到只包含椅子的点云。在本文中在x、y、z三个方向上的直通滤波器取值范围为:

-0.8≤x≤0.8
-0.61≤y≤0.8
1.4≤z≤2.5

(2)

分离结果如图2所示,图2(a)是在初始位置分离出的点云,图2(b)是椅子旋转一定角度后分离出的点云。本文需要使用Kinect v2采集椅子360°全方位的点云。为了使得实验便于操作,本文使用物体绕中心自转360°来代替Kinect v2围绕物体旋转360°获取不同角度的点云。x的坐标范围要适当的大一点,因为其在旋转过程中x的最大值是椅子点云长和宽的对角线长度。

图2 处理之后的点云

从图2(a)中可以看出在实际应用中由于受到视线遮挡、障碍物等因素的影响,点云数据中往往存在着一些离群点,这些离群点会使重建物体产生毛刺,降低还原度。本文使用PCL点云库中的去除离群点的滤波器来进行处理,效果如图2(c)所示,由于篇幅原因去除离群点的原理不再展开论述。

3 点云配准

本节中点云配准分为三步,第一步是对两片点云进行粗配准,使得两片点云中公共部分尽量重合,减少ICP算法的迭代次数。本文使用采样一致性初始配准算法(Sample Consensus Initial Alignment, SAC-IA)进行粗配准。第二步利用经典的ICP算法将已经具有较好位置的两片点云进行细配准。第三步设计一种可以减小累积误差从两边逼近的适合多片点云的配准算法,从而获得一个完整的全方位的物体点云。

3.1 点云粗配准

采样一致性初始配准算法(Sample Consensus Initial Alignment, SAC-IA)依赖特征直方图,所以需要先计算点云的快速特征点直方图描述器(FPFH)[17],假设待配准点云记为P,目标点云记为Q。算法一般流程如下:

1) 从P中选择n个采样点,两个相邻采样点之间的距离需要大于之前设定好的最小距离阈值d使得采样点具有不同的FPFH特征。

2) 在Q中寻找和P中采样点具有相似FPFH特征的点,当不止一个点时,就在这些点中随机挑选一个点作为P在Q中的对应点。

3) 计算这两片点云对应点之间刚体变换矩阵,使用变换后的距离误差和函数的大小作为当前配准变换后性能优劣的标准。距离误差和函数使用Huber罚函数表示,记为:

(3)

式中:

(4)

式(4)中ml为之前设定好的阈值,第i组对应点变换之后的距离差为li。当误差函数的值达到最小时,此时的配准变换矩阵[18]就是最优解。最后将P通过矩阵变换得到配准结果。具体流程如图3所示。

图3 SAC-IA 算法流程图

3.2 ICP算法简介

ICP算法将两个来自不同坐标系具有重叠部分的三维数据点集,通过迭代求解出两个点集之间的刚体变换矩阵来进行配准。迭代最近点算法的基本思想是:已知两个对应点集合为:

X={x1,x2,…,xn}

(5)

P={p1,p2,…,pn}

(6)

求解:旋转矩阵R和平移向量t,目标函数为:

(7)

算法流程概括如下:

1) 在点集P中寻找与点集X中的对应点:

y={y1,y2,…,yn}

(8)

2) 求解:旋转矩阵R和平移向量t,其目标函数为:

(9)

3) 更新点云模型:

(10)

4) 计算两个对应点集之间的距离:

(11)

5) 若dk+1

图4 ICP算法流程图

3.3 多片点云配准

无论是采样一致性初始配准算法还是ICP算法都是针对两片点云进行配准的,一个作为目标点云,一个作为待配准点云,通过计算一个刚体变换矩阵使得待配准点云尽可能地和目标点云重合。在物体重建的过程中不可能通过两片配准的点云来刻画整个物体所有的三维结构,因此本节将讨论如何将多片不同角度的点云进行拼接,并且设计一种可以消除累积误差的多片点云配准算法。如图5所示,将Kinect v2固定在椅子一米左右的正前方,然后将椅子绕圆心进行自转。每自转1/24圆的时候用Kinect v2采集一帧深度图像,转换为点云。记第一片即初始位置的点云为p1,第二片为p2,以此类推可以得到p3,…,p24,绕完一周之后可知点云p1和p24为同一个位置即初始位置上的相同点云。

图5 点云采集示意图

将多片点云进行配准时,由于点云采集误差,人为和所用算法的原因,多次两两配准时,会产生累积误差,使点云配准的精度随着点云数目的增多而逐渐降低,使得重建的模型没有很好的还原度。本文提出一种从两边向中间进行逼近的适合多片点云的配准算法。其主要思想如下:

将所采集的点云p1,p2,…,p24依次存入元素为PointXYZ的数组中。全局点云初始值psum为p1,p1为待配准点云,p2为目标点云,通过SAC-IA进行粗配准获得良好的初始位置,再利用ICP算法计算相邻两片点云即p1与p2的刚体变换矩阵H1。当全局点云psum经过p1与p2的变换矩阵H1时psum被移动到p2的位置上。psum更新为p1与p2的和,接着对psum进行降采样除去重叠部分的点云减少重影。以此类推,再用同样的方法将psum移动到p3,p4,…的位置上,当psum移动到p24的位置上时,即完成所有24片点云的配准,此时psum为一个完整的物体点云。使用这种方法,虽然一开始p1和p24在同一位置上,但是随着误差的累加,p1慢慢偏离初始位置,使其不能与p24完全重合,出现不能闭环的现象。由于无论是从轨迹圆的左边开始还是从右边开始,最终的目的位置都是一致的。在之前的算法中并没有利用这一特性,导累积致误差增大,在一些精细的物体进行重建时尤为明显。本文使用从两边向中间逼近的方法来减少累积误差。计算数组的中间值下标mid,设置一个容错尺度t。左边数组的长度sizeA为mid+t,右边数组的长度sizeB为mid-t,通过在中间值的左边和右边多拼接几片点云,来增加物体的重叠范围,达到闭环的目的。从pmid+t和pmid-t分别向终点位置p1和p24进行逼近,最后再将左右两边总的点云psumA和psumB相加即得到整个psum的点云模型,算法流程图如图6所示。

图6 多片点云配准流程图

4 Kinect v2物体重建系统

Kinect v2对平台的要求如下,Win8/ Win8.1操作系统, Visual Studio 2012以上软件开发平台,显卡支持DX11,内置USB 3.0,4 GB以上内存,64位的CPU,i7,2.5 GHz以上更佳。本文系统构建的环境是,Win 8.1/Visual Studio 2013/AMD RADEON R9 M290X/ USB3.0/8 GB/i5-4690 3.5 GHz。

本系统使用C++程序开发语言,利用Kinect v2内置接口获取点云数据,以及PCL1.8.0版本[18]的点云库对点云数据进行处理。以上都需要在Visual Studio 2013的开发环境下进行编译使用。为了使重建效果更好地表现出来,本文使用MeshLab2016对配准好的点云进行曲面重建。

本文重建的物体为一个高约80 cm,长约55 cm,宽约45 cm的靠椅。如图7(a)所示是左半部分psumA的点云配准效果图,右边的扶手和椅子腿没有重建完整,点云较为稀疏。图7(b)是右半部分psumB的点云配准效果图,左边的扶手和椅子腿有所缺失。图7(c)是左右两边进行相加之后psum的点云结果,可以看到椅子已经完整地配准好。图7(d)是使用本文算法的椅子重建效果的细节图,可以看到椅子背部的曲线,轮廓几乎一致的,没有出现重影现象。图7(e)是仅仅使用ICP算法将多片点云依次叠加进行配准的椅子局部效果图,可以看到椅子的背部并没有被完全配准。由于误差的累积,之后的点云与初始点云的偏差越来越大,导致后面的点云配准的效果越来越差。为了验证本文算法的一般性,本文选择了一个精细的高约29 cm,肩宽约20 cm完全纯白的大卫石膏头像。由于石膏头像具有以下两个特点:(1) 体积较小,面部精细,头发的部分特征相似且重复性较高。(2) Kinect v2本身采样的分辨率较低,对面部细节刻画较为模糊。这些都给石膏头像点云配准增加了难度,更容易比较出本文算法在点云配准效果的优越性。本文将大卫头像每次旋转10°采集一次场景点云,然后设计三维包围盒将石膏头像点云从场景中分离出来。当石膏头像旋转一周之后,将得到36片不同角度的大卫石膏头像点云,图7(f)是使用传统的ICP算法进行配准的效果图。可以看到肩部和背部叠加在一起,当配准到第6片点云时由于psum误差累积过多ICP算法完全失效,导致整个石膏头像配准失败。图7(g)是使用本文算法所配准好的石膏头像点云。可以看出,石膏头像面部轮廓较为明显和清晰,石膏头像的肩部平滑,轮廓清晰。由此可以得出本文算法比传统的ICP算法进行叠加配准物体的准确度更高。为了使得物体的还原度更好,本文使用MeshLab来对物体点云进行实体显示。图7(h)、图7(i)为使用本文算法对椅子点云和石膏头像点云在MeshLab中进行曲面重建的效果图。可以看出,本文所重建的物体具有一般性,且重建的物体还原度高。

图7 物体重建效果图

5 结 语

通过分析Kinect获取点云的成像特点,将所要提取的物体点云放在采样精度高的范围内,获取高质量的物体点云,增加了物体点云获取模块的设计方案。本文着重提出一种适用于多片点云的配准算法,该算法策略配准精度高、适用性好。本文的系统适用于各种物体的重建,不受到三维立方体约束,重建物体的体积不受限制且还原度高。下一步的工作重点将使用GPU加速,实现一种实时三维重建系统。

猜你喜欢

对应点三维重建头像
三点定形找对应点
三维重建的飞机机动动作库设计与可视化
以“点”为核 感悟本质
“一定一找”话旋转
基于Mimics的CT三维重建应用分析
你多久换一次头像和昵称
黄爱民 作品欣赏
比较大小有诀窍
光编码技术在犯罪现场重建中的应用
三维重建结合3D打印技术在腔镜甲状腺手术中的临床应用