基于点云融合算法的Kinect三维重建技术及其应用研究

2018-08-15 08:02:46吴剑锋蒋濛婷马梦鑫
计算机应用与软件 2018年8期
关键词:三维重建三角形网格

吴剑锋 蒋濛婷 马梦鑫 罗 凯

(浙江工业大学 浙江 杭州 310023)

0 引 言

三维重建(3D Reconstruction)技术是指在计算机环境下对人物或物体建立能完整表示和处理的三维模型,它属于计算机视觉的一个分支。目前三维重建技术已在多个领域里面得到广泛应用,如医学、历史文化遗产保护、游戏、虚拟现实、逆向工程等。

现如今,三维重建的软硬件实现技术有很多,在不同的行业根据自身的特点也会选择不同的方法。例如在建筑行业,一般采用合成孔径雷达SAR(Synthetic Aperture Radar)技术、无人机航拍等获取三维重建数据,如黄佳彪等[1]的研究,冯荻[2]的三维重建技术研究。在医学领域,一般采用计算机断层扫描技术、超声图像、CT扫描等方式获取精确数据,如鲁媛媛等[3]在乳腺肿瘤领域的研究,万建省等[4]在复杂肾结石经皮肾镜取石术中的应用探讨。上述领域对三维重建精度有极高的要求,因此整个过程所需的硬件设备价格昂贵,重建技术复杂,无法普及。本文采用Kinect硬件设备用于获取三维重建数据,极大降低了设备成本以及技术复杂度,更加利于三维重建技在教学和生活上的广泛普及。

自微软发布Kinect的开发框架SDK后,国内外众多学者都参与研究其在三维重建技术领域上的实现方法和实际应用价值。由Newcombe等[5]开发的KinectFusion系统可以说是具有里程碑的意义,利用Kinect获取三维点云数据,并通过迭代最近点算法来进行配准,最后TSDF点云融合算法完成重建。此方法重建精度低,不适用大范围场景,对环境有一定限制,对进行重建技术的计算机要求高。针对KinectFusion的缺点,国内外的学者用不同方式进行了改进,并取得了一定进展。Whelan等[6]的Kintinuous对KinectFusion算法改进,使之能够用于大范围场景重建。Keller等[7]对KinectFusion算法进行了改进,采用基于点的重建方式代替原本基于体素的重建方式。Zeng等[8]用八叉树代替原有三维数组数据结构,减少了计算机存储空间浪费,提高了重建精度以及重建范围。朱笑笑等[9]通过添加环境边线特征点匹配以及地面点云,提高了原算法的鲁棒性以及重建精度。

本文通过Processing平台进行三维重建,相比其余平台,该平台操作更加便捷、简易,更利于在教育及生活中普及三维重建。本文首先对深度图像数据进行双边滤波处理,去除采集过程中产生的噪点,通过OpenNI坐标转移技术获取光滑三维点云。其次,在点云融合过程中,提出通过ICP算法构建表面网格获取三维模型,再利用3D打印修复技术进行模型修复,与KinectFusion的TSDF点云融合方法相比,虽在模型精度上些许下降,但能大大提高重建效率,更适合在工业设计、产品设计、辅助教育等领域应用。

1 Kinect 3D数据扫描原理

利用Kinect平台,基于OpenNI框架下,采用Processing的SimpleOpenNI库来进行对物体的三维点云数据的获取。而所有的三维点云数据都是在Kinect的深度图像中获取,Kinect的深度图像是由其自带的红外投影机和红外摄像头配合获取而得,如图1所示。

图1 Kinect深度流数值

获取到得每个像素点数据都是一个为两个字节的数据,即共16 bit数据,其中前13个bit就是每个像素的深度值。在空间坐标(x,y,z)中,所获取的深度图平面坐标(x,y)以目标位置为参考平面,z代表Kinect传感器与物体目标的距离(即图中的摄像头与物体的深度),如图2所示。

图2 Kinect深度数据流

利用Kinect获取深度图像数据过程中,由于自身信号传输和环境因素的干扰,不可避免地会出现一定的噪声。这会影响到后续三维重建的计算过程,因此需要对获得的深度数据进行滤波处理。本文采用的是双边滤波算法[10],其是高斯滤波算法的改进算法,特点是采用灰度域权值和空间域权值优化图像边缘数据。对深度图像D中的点p(x,y)计算方法如下:

(1)

(2)

式中:q是点p领域中的点,δs2和δr2为灰度域权值和深度域权值。

通过OpenNI的坐标转移技术,提高扫描获取光滑的三维点云数据。如图3所示。

图3 通过程序改变扫描角度获得点云数据

2 网格构建的关键技术

通过上述方法获取三维点云数据后,尽管在屏幕上显示的是连续的图像,但这技术还是不具备能够将图像打印成物理所需的数据结构。点云数据中的点定位在3D空间中,但它们并不是以描述一个可以打印的实际表面。为了能构建一个表面,就必须对所有的点云数据进行构建网格生成表面。

用迭代最近点算法ICP(Iterative closest point)[11]来构建三角形网格。Kinect在开始扫描的时候,从一个单独的深度点的索引开始,然后计算如何将这个点与邻近的点连接起来,形成能添加至网格的三角形。如图4所示。

图4 三角形索引点图

在一个每行4个共3行的深度点中,由于Kinect获取的深度点云并不是整齐排列在行中的,而是根据落在物体表面的区域而轻微分散的。如图4所示,黑色点表示当前点,用罗盘的方法来命名各个角:NW为当前点,它将构成左上角,NE为右上角,而SW和SE为下面两个。现在要计算这四个角的索引i(即搜索编号),第一个点NW比较简单,利用式(3),将深度点的x-y位置变换为索引;其他3个点分别在x轴和y轴上有s行的位移,即NE点的索引为(x+s)+y×640,SW点为x+(y+s)×640,SE点为(x+s)+(y+s)×640。

i=y×640+x

(3)

计算出4个点的索引后,根据右手准则增加顶点,这样就可把这4个点定义的平面分割成两个三角形:分别是NW到NE到SW和NE到SE到SW,如图5所示。

图5 三角形网格的构成图

为了得到每一个点的位置,就必须要计算它们在深度点数组中的索引。当前点完成索引工作后,就从NE点开始,NE是紧挨着当前点右侧的点,为了能找到它的索引,就要在当前点的索引上增加一个变量r,从而来计算当前行下一个位置的深度点。其中SW是开始点的下一行,在构建网格过程中,如果要用到所有行的深度点,那只需要每次都下移一行,但是,为了加快扫描的速度,采用减少扫描密度的方法,随机跳过一些行。当跳过一些行后,为了能重新找到索引点,这里就用变量r来判断,当算出SW的索引后,那么SE也就自然简单可以计算而得。

通过如此的方法得到平面的三角形,应用到3D几何中也是类似的方法,三角形本身就是3D几何的基本原子单元。通过把Kinect获取的深度点连接成一个平滑的表面,如图6所示。如在150像素的立方体上的两个面,把每个面拆分成两个三角形,每一个三角形连接都是由组成面的四个点中的三个点组成,而每个点最终都属于多个三角形。

图6 立体网格的构成图

3 3D打印修复技术

通过上述网格构建技术,通过Processing的Modelbuilder库导出STL模型文件后,用微软的3D builder打开发现,扫描获得的网格一片混乱,如图7所示。这并不是在上一步进行三角形网格构建的时候出现的错误,如果将图进行拉伸,所有的表面还是可以看到,只是背景前后错位。

图7 背景前后错层图

在构建网格中,采用的是迭代邻近点的方法,但是在Kinect的深度图中是有很多孔洞的,而根据深度图生成原理中,这些孔洞的坐标都是(0,0,0),当去迭代这些点时就会导致背景和物体的错位。对于一个可打印的3D模型,它必须是无缝的,即需要一个连续的立体表面,所有的法线必须朝向外侧。

计算法线的方法可以非常简单,如对每一个点,取和它相邻的两个点组成三角形,计算三角形的法向即为该点的法向。但是这种方法很不精确,其中有一个点的坐标稍有变化,就会影响最终法线的方向。

要解决这个问题,采用的方法是考虑一个点周边的所有的点,使用最小二乘法来拟合一个最佳平面,这个平面的法向即为该点的法向[12]。首先要计算该点以及周边的所有点到这个平面的距离之平方和最小:

(4)

式中:M为所有点到平面的距离平方和,a、b、c是决定这个平面的参数,也就是这个平面的法矢量(a,b,c)。x、y、z是该点的坐标,为了求出合适的a、b、c值,对三个变量分别求偏导:

(5)

(6)

(7)

通过公式计算出a、b、c值,即可得到该面的法向。在Kinect获取到深度图像数据后,通过上述方法进行修复处理。修复结果如图8所示。

图8 错层修复图

在进行修复处理后,已经将三维表面连接成面了,但由于构建网格是三角形网格,即表面都是三角形,这样导出模型的表面相对粗糙。为了能快速地生成打印格式文件,本文通过微软的3D builder软件进行一键手动修复表面,修复的过程中也能调整好打印所需的切片文件,如图9所示。

图9 表面光滑处理图

通过上述处理后,就可以得到进行3D打印前的模型文件,导出成stl格式后完成打印工作。

4 辅助教学中的具体应用实现

上述Kinect的三维重建技术结合3D打印技术在辅助教学方向具有重要的应用价值,以下以立体几何结构辅助教学应用为例。立体几何结构的学习在机械结构设计和产品结构设计中都起着至关重要的作用。但是在教学过程中,如果没有用具体的结构实物来讲解,学生往往很难靠想象来记住复杂的结构,特别是多结构体的相互穿插,产生的交插截面是很难想象出来的,只靠讲解和平面图是较难理解和掌握。

如果应用本文所讲述的技术,即利用Kinect对多个几何结构物体进行分别扫描重建,通过微软开发的3D builder软件对多个三维几何图形进行组合,通过3D打印机打印出组合模型,这样就可从实物上一目了然地看到新物体的结构,从而达到辅助教学的目的。而且,对比传统的KinectFusion的应用方法,其优势非常明显,整个扫描、建模到打印过程快速简单、效率高、对硬件的要求低,一般的教学设备即可满足。具体的实现流程如图10所示。

本实验具体以两把不同椅子组合模型为例。两把椅子结构融合交错,如果没有结构实体,很难想象出各个交错截面的结构样式。因此使用上述方法,可以通过得到的实物,清晰地从不同角度和深度来体现。根据上述流程图,首先通过Kinect的红外摄像头和红外投影仪来分别获取两把椅子的深度图像。对于获取到的深度图像,在程序中,可以直接得到每个像素点的三维数据,并可通过坐标转换实现各个位置的点云数据,如图11所示。

图11 两把椅子的点云数据图

对于调整好角度的点云数据,利用迭代最近点算法(ICP)进行三角形网格构建,从而融合所有点云实现三维重建,用3D builder打开,如图12所示。

图12 3Dbuilder椅子模型效果图

为了避免导出三维模型数据的背景与物体前后交错的现象,采用网格修正算法对所有的点云数据进行修正。利用Processing的ModelBuilder库进行STL文件的导出,再利用微软的3D builder软件进行修复重组,如图13所示。

图13 3Dbuilder修复重组模型效果图

对得到的STL文件模型利用桌面3D打印机进行实体模型打印。打印结果如图14所示。

图14 实体打印模型

通过该实验证明,在辅助教学中对复杂的结构拼接和结构教学都带来更为直观的呈现,这样就可以摒弃传统教学中靠想象和平面图示的抽象认知。

5 结 语

本文利用Kinect三维重建技术结合3D打印技术研究在辅助教育领域的价值,采用Kinect的多深度图像融合算法,通过微软的3D builder平台进行优化,基于桌面3D打印机实现实物模型输出。在实验中,本文是基于OpenNI框架,使用Processing的SimpleOpenNI库进行3D点云数据扫描,并用ModelBuilder库进行网格构建输出三维模型STL文件,根据上述实验所得的组合实体模型,可以直观地看出其几何结构穿插部分的轮廓,在辅助教育中带来更为直观正确的教学。这种快速的建模方法在其他领域也有很多快速高效的优势。

猜你喜欢
三维重建三角形网格
用全等三角形破解网格题
基于Mimics的CT三维重建应用分析
软件(2020年3期)2020-04-20 00:56:34
反射的椭圆随机偏微分方程的网格逼近
三角形,不扭腰
重叠网格装配中的一种改进ADT搜索方法
三角形表演秀
如果没有三角形
基于关系图的无人机影像三维重建
画一画
基于曲面展开的自由曲面网格划分