基于稠密SLAM实现脚型三维重建的可行性探究

2019-09-10 07:22刘子威
卫星电视与宽带多媒体 2019年17期

刘子威

【摘要】本文探索采用体感设备Kinect,结合visual studio C++开发SLAM图形建模,使用Kinect传感设备对足部进行扫描,实现对足部的数据搜集,并利用SLAM软件对图像进行点云的拼接、曲面的重建新从而构建出足部三维模型,让人们能使用价格较低的Kinect装置就可以简便精确的获得足部三维模型。

【关键词】Kinect设备、图形建模、足部模型

Kinect是微软公司推出了一款体感摄像头,具有实时获取图片、生成深度图的特点。利用这一特点,我们探索利用图像技术再结合Kinect设备来生成人的足部三维模型。我们首先利用Kinect获取足部深度图像数据。再对拍摄到的图像进行处理,选区有效目标并减小误差,处理点云数据获得足部数据。然后实现足部点云的实时拼接与曲面重建,最后输出足部模型数据。

1. 对获取深度图像的介绍

1)Kinect是微软公司开发的体感周边外设,能实时采集行为图像并生成深度图。Kinect的正面有三个传感器,中间的是用来采集 RGB 彩色图像的视觉传感器,两边的红外线传感器一个为发射器,另一个为3D结构光的深度感应器。通过设置帧数据与数据流,对足部进行拍摄后可获取深度图像。

2)首先需要获取该摄像头的内参。用待标定的摄像头拍摄多张不同角度的棋盘图像,然后使用OpenCV来计算出该摄像头的内参。

A.尽量使用较大的标定棋盘,尺寸至少与A3纸的大小相似;

B.棋盘平面与摄像头像平面之间的夹角需在45度以下;

C.棋盘的姿势与位置尽可能多样化;

D.標定图片多于10张;

E.注意设置好摄像头的分辨率,长宽比最好和深度图的相同;

3)计算相机的内参存在切向畸变。由于透镜与成像平面没有完全平行所以导致切向畸变的产生,可以用公式①和公式②修正

xcorr=xdis+[2p1xy+p2(r2+2x2)]                ①

ycorr=ydis+[p1(r2+2y2)+2p2xy]                ②

其中:

xdis和ydis 表示有畸变的坐标;

xcorr和ycorr 表示修复后的坐标;

k1,k2,k3表示径向畸变参数;

p1,p2表示切向畸变参数;

2.处理拍摄到的图像,选取正确的有效目标,并尽可能减小误差所带来的影响,并处理点云数据获得足部信息

1)将获得的深度图转化为点云

将相机所在位置作为坐标原点,并规定坐标系为:与相机平面平行的平面为x-y平面,水平方向为x轴,x-y平面中,垂直于x轴向上为y轴正方向。

设(i,j)表示kinect深度图数据流的一帧(分辨率320*240)中第i行,第j列的点,该点出的深度值为d,该点的三维坐标为(X,Y,Z),则如公式③所示:

X=(i-CX)/f×d

Y=(j-CY)/f×d          ③

Z=d

其中,CX=161,CY=121。f为相机焦距。

2)对点云数据进行处理:

深度数据转化成的三维点云到数据不能直接作为人体重建的输入,这是由于扫描得到的数据中存在离散的噪点,不是我们所需要的,此外边界的数据比较粗糙,会影响后续的重建,因此我们需要消除以下列出的数据误差。

A.滤波、去噪

我们使用高斯滤波实现。根据二维高斯函数公式④的图像,通过计算每一个像素点和邻域内的其他像素点的值的加权平均,我们可以对整幅图像求加权平均值。使用PCL开源库的 RadiusRemoval、ConditionRemoval等滤波器来移除离群点和边界点。

二维高斯函数: ④

B.去除重复点

得到点云数据存在着大量的重复,同位置的点可能被重复记录了多次,使得数据量非常大,因此需要先做简化,以减少后期的工作量。我们需要重新排序点云,将点云按照坐标的字典序排列,即若(x1,y1,z1)在(x2,y2,z2)之前,则x1<x2。我们使用C++快速排序算法完成。排完序之后,在保证点的位置相邻后即可实现快速地剔除重复点。

C.精简处理

针对Kinect获取的点云特征,通常是以行为单位进行一个方向上的精简。我们引入曲率参数,并采用自适应精简算法来处理图像的复杂性:

a.设定一个曲率阈值K以及步长x

b.根据步长分别计算每数据点段的曲率k

c.若k<K,则设置一个最小距离阈值dmin,从本数据段第一个点开始依次求出相邻两点的距离,若d<dmin,则后一个点删除,反之保留,直到本数据点段最后一个点结束。执行步骤⑤。

d.若k>K,则给定一个角度阈值θmin,并依据公式⑤计算出弦高阈值hmin;

其中,μ为相邻点间的正太分布值,Nb和Na分别为简化后和简化前的点的数量。依次计算相邻三点x,y,z间的夹角和弦高。若h<hmin或者θ<θmin,令z=y,删除y。若如果z=y,y=x,删除x。直到本数据段最后一个点结束。执行步骤e。

e.如果本段是最后一段则结束。若不是,执行步骤b。

3.足部点云的实时拼接和曲面重建足部模型

1)确定中心坐标系与像素坐标的关系以建立世界坐标系进行模型重建

预处理后的深度图像具有二维信息,像素点的值表示物体表面到Kinect传感器之间的直线距离,并以毫米为单位表示。以摄像机成像原理为基础,可以计算出世界坐标系与图像像素坐标系之间具有如图所示的转换关系:

2)将多张图像配准以匹配的统一坐标系

因为图像是从不同角度拍摄,所以图像的帧之间会存在一些共性,我们需要对此进行分析求解变换参数。配准深度图像,首先搜集不同图像帧之间的共性,然后把在不同时间、空间、角度拍摄到的多帧图像叠加匹配到统一的坐标系中,并计算出相应的平移向量与旋转矩阵,同时消除冗余信息。

3) 将点云数据融合处理

配准后的深度信息仍为无序的点云数据,无法展现物体的整体信息。我们需要将点云数据进行融合处理,以获得更加精细的重建模型。以Kinect传感器的初始位置为原点构造体积网格,通过为所有体素赋予SDF(Signed Distance Field,有效距离场)值来还原图像表面。SDF值等于此体素到重建表面的最小距离值。当SDF>0,该体素位于图像表面之前;当SDF<0,该体素位于图像表面之后;当SDF值越接近于零,表示该体素越贴近于场景的真实表面。

四.提取足部特征点输出

在获得足部的模型和数据后,根据人的脚掌对于鞋子的适应性,选择特征点进行分析处理,给出人足部特征部位的关键数据,让用户对自己的脚掌能有一个更加全面和详细的了解。

1)选取特征点

考虑到测量系统的实际情况,我们定义了如下几个参数作为输出的特征点。定义如下:

脚长L:沿轴线脚前端点与后跟端点之间的距离。

跖趾直宽W:第一跖趾里宽与第五跖趾外宽之和。

跖围C1:围绕跖趾关节突出点测量的围长。

跗围C2:围绕脚前跗骨突出点测量的围长。

兜围C3:围绕舟上弯点和后跟测量的围长。

第一跖趾关节高度H1:第一跖趾关节最高点距离测量面的高度。

前跗骨高度H2:前跗骨突出点距离测量面的高度。

舟上弯点高度H3:舟上弯点距离测量面的高度。

2)输出方法

脚长是长度方向上各特征参数的基准,调整后脚长的求解转化为脚底轮廓图中前、后端点在轴线上的投影点之间的距离,可得的公式⑥如下所示:

Lf=|Zmax-Zmin|        ⑥

由脚型基本规律,找到第一跖趾关节部位到脚型外侧距离绝对值最大的点P1,该点就是第一跖骨外凸点。再按照同样的方法找出点P2,此点为第五跖骨外凸点。设P1 P2在YOZ平面上的投影点分别为P1、P2,则P1、P2到轴线的距离分别为第一跖趾里宽和第五跖趾外宽,跖趾直宽为:W=|y1|+|y2|

在确定P1和P2后,设一点P3沿第一跖骨外凸点附近的轮廓线最高点移动,P1(x1,y1,z1)、P2(x2,y2,z2)、P3(x3,y3,z3)三点确定平面的方程⑦如下所示:

Ax+By+Cz+D=0      ⑦

我们计算出矩阵中各点到平面的距离,找到距离最小的两个点N1、N2交于点N,共有360个交点。随着P3(x3,y3,z3)的移动,可得到一系列的围长,我们把最小围长作为趾围,x3的最小绝对值作为第一跖趾关节高度。

我们设一点P4(x4,y4,z4)沿舟上弯点轮廓线最高点移动,P4与脚后跟触地点、垂直于XOZ平面的轮廓线都相交。为了填满两点之间的稀疏部分,我们对两点之间进行插值再求其平均值。通过P4的变换,得到一系列的平面与脚型相交形成的围线,我们对这些该图像进行拟合,求出最小值,对应的x4的绝对值为舟上弯点高度。

3)输出结果

用脚型三维扫描仪对足部模型其进行数字化,并提取相关特征参数。L为脚长,C1,C2,C3分别是跖围、跗围、兜围曲线,H1,H2,H3,分别为第一跖趾关节高度,前跗骨高度,舟上弯点高度。最后对特征参数进行多次测量并取平均值来得到人工测量值。

参考文献:

[1]胡安鐸, 苏显渝, 向立群, et al. 脚型三维测量与特征参数自动提取[J]. 四川大学学报(自然科学版), 2009(06):123-128.

[2] 《皮鞋设计学》李运河 于百计 周福民 高士刚

[3] 刘静雯. 基于Kinect的密集视觉里程计SLAM算法研究[D]. 2016.

[4] 张少玉. 基于Kinect的三维人体建模技术研究[D]. 西安工程大学.