基于体模型优化的虚拟试衣算法

2019-05-07 11:45李晓璇伍新华
传感器与微系统 2019年5期
关键词:试衣人体模型碰撞检测

李晓璇, 伍新华, 刘 钢

(武汉理工大学 计算机学院,湖北 武汉 430000)

0 引 言

计算机电子商务迅速发展起来后,网上交易己经成为服装业的热门销售方式。为了与电子商务发展相适应,方便人们网上购买服装合体美观,需要真人三维模型的服装展示,方便快速地看到试衣效果。应用于虚拟试衣的真人三维模型需要通过三维人体表面重建[1~3]获得。

有些基于软件的人体建模是根据人体体型特征,利用通用建模软件3Dmax[4],杨鲁等人[5]构建标准化三维人体模型。吕珍等人[6~8]利用OpenGL结合Delphi读取现有三维软件3Dmax中的人体与服装三维数据3 DS文件,进行人体模型的简单服装试穿,减少了实现的复杂度。还有些是基于人体照片信息的人体建模,利用拍摄人物的二维图像,通过提取人体轮廓线、特征尺寸等快速生成三维个性化人体模型[9,10]。Geisen G R等人[11]采用神经网络系统与图像识别方法检测头部关键特征点,通过标定点定位其他特征点。这两类方法能快速构建的人体模型,但不够精确,应用场合有限。

基于三维扫描的人体建模是利用三维人体扫描设备扫描人体获得人体表面的点云数据,通过对点云数据进行降噪、精简、孔洞修补、表面重建等构建个性化的三维人体模型。应用该方法构建的三维人体模型精确,应用场合广泛,但由于在进行三维重构时大多数都涉及到点云计算和点云拼接,而生成点云的计算量相当大,三维重构的时间长度。

为了提高重建人物模型的精度和速度,提出了基于Kinect[12,13]的人体模型构建方法。利用Kinect采集的图像信息构建三维试穿者模型,并提出使用体素八叉树[14]存储体模型,以及布料与此人体模型的碰撞算法及布料自碰撞算法。体素八叉树的结构可以提升查询速度,减少内存消耗,同时此树形结构在虚拟试衣的布料与人体模型的碰撞阶段,也可以显著减少人体与布料的碰撞测试的数量,节省虚拟试衣响应时间。

1 构建体素八叉树

体素八叉树采用空间分解法建树并用叶节点保存体素信息,所有的节点操作都可以简化为对树结构的遍历。构建过程中利用如图1(a)所示的体缓存的特殊结构,其长、宽、高与场景全局坐标系x,y,z坐标轴平行,左下角和右上角两点坐标决定了一个区域,用点序列表达为〈A,G〉=〈(x,y,z),(x′,y′,z′)〉,其中,x

图1 构建流程

2 基于体素八叉树的体重构方法

Hoppe等人通过构造点到物体表面的符号距离函数 (signed distance function,SDF)来重建物体表面。因此,可以用SDF表达物体的3D几何结构,SDF为0的体素即为物体所在处。本文将SDF定义为每一个体素的中心点到模型表面对应点的有向距离值。

本文设计的体缓存为8×8×8的体素块,每个体素有一个索引坐标:(0,0,0)~(7,7,7)。由于体素块与坐标轴对齐,因此,由索引坐标为(0,0,0)的体素的中心点的坐标po和体素的边长r,可计算索引(x,y,z)的坐标oi

(1)

获取到深度图像后,为了根据当前深度图计算SDF值,需要先找到每个体素中心点在当前深度图中的投影点,然后结合投影点深度值计算投影点的三维点坐标,最后精确计算出体素中心点与投影点之间的距离即可求出每个体素中心点到当前帧深度图像所观察到的表面的距离。

图2 体素中心点到表面距离

以一个体素为例,如图2所示,对假定的体素,可以获得其在三维空间的坐标xG,并根据当前的摄像机的姿态即旋转和平移量R,t(已经通过光流法计算得到较为准确值),则该体素的中心点C在当前帧坐标系下对应的坐标为

x=(x,y,z)T=RT(xG-t)

(2)

而将三维空间上的点C=[(x,y,z)]T投影到二维图像平面得到的相应的点的坐标为

(3)

式中fx,fy为相机在x轴和y轴方向上的焦距,cx,cy表示偏移值。结合式(2)和式(3),将该体素在当前帧坐标系下对应的坐标点投影到二维图像平面的坐标为

(i,j)T=π(x)

(4)

像素点(i,j)T在当前的摄像机姿态形成的坐标系下的深度zd,此时该投影点在三维坐标系下的坐标为

(5)

体素中心点到表面的距离即为体素中心点与点在当前坐标系中的距离为

(6)

此时,负值表示体素在表面因为距离表面越近的体素对重构的影响更大,所以希望距离表面越近的体素有更高的权重,而距离表面越远的体素权重可以较低,因此需要对不同的体素设置不同的权重。使用的权重函数为

w=(v·n)2

(7)

式中v为视线方向单位向量,n为像素中心点的法向量,w值越小表示误差越小。

基于每帧深度图像计算得到的SDF合成为一个SDF,所有体素的合成可并行进行。

假设所有的距离测量都是正态分布的,将每帧深度图像计算得到的SDF值合成的一个SDF值即为对SDF函数Ψ观察数据的似然最大时的解

(8)

即最优的ψ是所有测量的加权平均,D(x)即当前帧图像合并成的一个SDF值,这个值和权重可随着新的深度图的加入增量式更新

(9)

Wi+1(x)=Wi(x)+wi+1(x)

(10)

式中di(x)和wi(x)为第i帧图像求得的SDF值和权重值。

最后根据三原色(RGB)图像和计算出的权重值进行色彩融合,估计出模型的彩色纹理,并使用Marching cubes[15]算法得到等值面的点面信息,并在人体模型与布料的碰撞检测中用到该数据,最后进行三维立体的渲染并将结果显示出来。

3 碰撞检测与响应

在虚拟试衣过程中,由于重力等各种外力的作用,为了有效避免布料“穿透”人体模型或布料相互“穿透”,必须在虚拟试衣过程中对布料裁片和人体模型以及裁片自身进行碰撞检测及响应。根据前面构建的体模型的八叉树结构,提出将布料进行三角剖分后对布料裁片构建AABB包围盒八叉树,对裁片—人体模型碰撞以及裁片自碰撞进行检测,可以有效提高碰撞检测速度。

3.1 碰撞检测

本文采用AABB层次包围盒法,对布料裁片构建AABB八叉树,对裁片—人体模型的碰撞区域进行检测,并及时响应处理。其具体过程为:

1)在对虚拟物体进行碰撞检的时候,首先检查这两个模型的层次包围盒树根结点是否发生相交,若没有,则可断定两个物体间没有发生碰撞,如果两个根节点包围盒发生了相交,暂时还不能断定在两物体间一定有碰撞发生,有待对子树结点进行进一步碰撞检测。

2)如果在某个结点上,两个物体的包围盒不相交,那么以此结点为根结点的所有子树就不再需要进行相应的碰撞检测。可以大大减小检测次数,提高仿真速度。

3)如果结点相交,就继续遍历,最后在叶节点进行体素与布料三角片的相交测试。

在由八叉树结构确定了可能发生碰撞的包围盒节点后,采用《实施碰撞测试算法技术》[16]一书中所提到的三角片与三角片求交测试来具体进一步判断包围盒中的物体是否发生碰撞。

3.2 自碰撞算法

在虚拟试衣过程中,除了2D裁片与人体模型之间的碰撞外,由于裁片的动态变形,使得裁片间也有碰撞发生,因此必须进行裁片的自碰撞检测。

本文通过计算2D裁片相邻三角形法线夹角来对裁片自碰撞检测进行处理。通过分析,只有当裁片的相邻三角形法线的夹角较大时才有可能发生碰撞。建立2D裁片表面三角形邻域内的三角形列表,计算相邻三角形法线的夹角。设置角度阈值p,只有当三角形法线夹角大于p时,才进行碰撞检测,有效减少参与检测的碰撞元素,提高了检测效率。

4 实 验

如图3所示为本文提出的虚拟试衣算法的流程。首先,使用体素八叉树表示人体模型,并利用体感传感器Kinect完成人体模型的构建与更新;随后使用质点—弹簧模型进行衣物模拟;最后利用体素八叉树与质点弹簧模型实现对人体试衣的虚拟模拟。

图3 本文算法流程

通过手持Kinect摄像机围绕三维模型旋转1周获取三维模型的深度和彩色图像数据。在实验中扫描三维模型大约需要150 s,共采集到了2 400多帧数据。经过实验发现,保留220~260帧图像数据既可以有效地减少耗时也可以满足三维模型重构的精确度。

图4(a)为当前帧深度图像;图4(b)为当前帧深度图像;图4(c)中数据表示在体素化过程中每个体素中存储的占有该体素的对应物体点的颜色和SDF值。因为当前帧图像为第一帧,体素中的数据只是第一帧的图像信息;图4(d)表示为根据图4(c)中的数据重构到该帧图像时得到的三维模型。

图4 第1帧图像的深度图像、RGB图像、属性值和重构结果

不同帧之间图像根据相机姿态计算得到两帧图像之间的重合部分,将两帧图像重合部分进行融合,将融合后的结果进行重构,得到清晰完整真实的三维人体模型。采用流行的弹簧—质点模型来进行布料的模拟。对于受力分析得到的常微分方程采用Verlet算法进行积分,并将网格划分为三角片。图5是用一个40×40的网格进行下落模拟的效果图。

图5 布料下落与人体的碰撞

布料在下落的过程中和与人体模型触后,形状随着时间变化而改变,不停留在人体上方。实验结果显示使用此体重构算法实现了显示逼真性的要求。

另外,本文对基于OBB包围盒和基于八叉树碰撞检测的实验数据进行对比,实验表明,对同一实验模型,OBB包围盒的创建时间是本算法的3.44倍,由实验结果可知,八叉树精确划分包围盒的简单性优于OBB,而OBB包围盒树中各结点上包围盒的方向任意性使得其需要更多的存储空间。

对两种算法的碰撞检测的各项指标进行了比较,八叉树精确划分包围盒的整体性能要好于OBB,其碰撞检测的速度约是OBB的1.475倍。该算法在速度上较OBB方法有所提高,为解决各种复杂环境中的碰撞检测问题提供了一条有效的途径,在虚拟试衣中多次换装的情况下极有优势。

5 结束语

本文以Kinect为传感器,实现基于体素八叉树的虚拟试衣人体模型的重建,并提出了基于此体模型的布料碰撞算法。实验结果表明,运用本文的方法,在提高重构的人体精度的同时,可以有效缩短碰撞检测的时间。

猜你喜欢
试衣人体模型碰撞检测
全新预测碰撞检测系统
基于大数据虚拟试衣系统的研究
基于BIM的铁路信号室外设备布置与碰撞检测方法
零下20℃
基于单片机控制的网购试衣机器人
自动试衣器
空间遥操作预测仿真快速图形碰撞检测算法
BIM技术下的某办公楼项目管线碰撞检测
基于乘员体型的车辆安全性研究
Family makes 45—foot icicle in front yard