基于深度图的水面重建①

2020-04-21 02:28冯笑冰朱登明王兆其
高技术通讯 2020年3期
关键词:深度图水面流体

冯笑冰 朱登明 王兆其

(*中国科学院大学 北京 100190) (**中国科学院计算技术研究所前瞻实验室 北京 100190) (***太仓中科信息技术研究院 太仓 215400)

0 引 言

自然场景的真实感模拟无论在传统的影视特效、广告、3维游戏开发等领域,还是在最近蓬勃发展的虚拟现实、增强现实等领域,都有着重要的应用及研究价值。作为自然场景中非常普遍的一种物理现象,流体的真实感模拟更是有着广泛的运用。然而,由于流体复杂而不规则的运动状态,其表现的形态也变化万千,流体动画的合成一直是计算机图形学中具有挑战性的问题之一。多年来流体动画合成方法在不断发展和创新,从最初的基于经验的波面造型方法,到现在主流的基于流体动力学的物理模拟方法,以及逐渐兴起的数据驱动方法,流体的合成效果在真实感和细节上有着显著的提高,但随之带来的是计算量的不断增加,从而无法在质量和效率上达到平衡。

作为计算机图形学研究中一直存在的热点,早期的流体模拟方法主要是基于经验的波面造型方法,使用周期函数、噪声、傅里叶频谱等,在高度场上叠加水波形成波浪效果。该方法计算简单,但适用范围小,仅用于模拟大规模水面较平静或规则水波。基于物理的流体模拟方法主要根据流体动力学方程跟踪流体的运动状态。该方法合成的流体动画与前者相比适用范围广,能模拟真实且丰富的视觉效果,但由于使用的物理模型复杂,存在计算量大且耗时长等缺点,从而在模拟大规模水面时无法达到实时效果。

近些年来,随着硬件技术的发展,基于实测数据的流体重建方法逐渐兴起,为流体动画合成提供了新的解决思路。该方法通过采集真实场景的流体数据重建出流体表面模型。基于采集设备提供的真实数据,此类方法重建所得的流体动画符合流体的物理运动规律,同时回避了物理方程计算量大的问题,提高了流体重建的效率。总结现有的基于实测数据的流体重建工作,使用多台高精度捕捉设备,根据所需数据搭建复杂的捕捉环境,重建出的流体动画[1,2]具有丰富细节和高度真实感,但复杂的操作和较高的成本使这类方法难以得到广泛的运用。基于普通单目摄像头采集流体RGB图像重建出的流体动画[3],虽然具有良好的视觉效果,但由于其视角单一,3维信息还原的过程设置了较多假设条件,因此重建结果与真实场景相比具有较大差异。

深度摄像头不仅具有RGB图像获取功能,也可以通过红外线收发器快速、方便地获取3维场景的深度数据。目前国内外基于深度设备的3维重建工作主要用于静态刚体的重建工作,如室内场景及人体建模[4,5],此类方法通过转换矩阵对相邻帧的模型进行注册配准,实现3维点云模型的修复。但针对流体这种具有特定物理运动规律,且快速变化的物体,基于深度图的模型重建的研究目前还在探索之中。

本文提出基于深度数据的水表面重建方法,基于RealSense设备捕获水表面高度场数据,并对数据场进行预处理;针对高度场中较大区域的数据缺失,提出一种同步迭代计算速度场与高度场的水面重建方法,通过水表面点云间的匹配追踪,计算水面速度场,并结合速度场时序连续性,构建能量方程,根据捕获区域高度场信息,在速度引导下实现缺失部分的高度场重建,并通过循环迭代以上过程,优化水面高度场结果。

1 相关工作

1.1 波浪模拟

传统的波浪模拟方法大致有2种:基于波面造型的方法和基于物理的方法。

波面造型:波浪模拟的早期工作集中于直接对水表面进行建模和动画。这些方法大多基于三角公式、噪声函数,或者傅里叶合成。对水表面进行数学建模的其中一个最早的尝试是Schachter[6]使用窄带噪声波形来表示水面。Hinsinger等人[7]则通过周期函数来模拟无边界的水面场景,能够达到实时效果。上述方法能够较好地模拟岸边浅水区域的水波,但生成的波浪形态单一,周期性强。Tessendorf[8]采用基于统计的快速傅里叶变换经验模型来生成海面。Perlin等人[9]采用噪声方法和投影网络也可以来模拟海面波浪。国内研究中,杨怀平等人[10]基于小振幅波理论和细胞自动机的模型,采用邻域传播的思想对水波进行动态建模,并运用色彩融合技术对水面完成浪花显示。此类方法模拟出的水面波纹随机性强,但只能模拟微波荡漾的水面,无法模拟浪花翻卷、卷曲的效果。

物理模拟:为了模拟复杂的、细节更为丰富的不规则波浪效果,基于物理的方法通常用Navier-Stokes方程或其简化形式精确描述流体的运动。文献[11]采用数值迭代方法求解2维N-S方程来模拟波浪。Enright等人[12]用粒子水平集方法提取自由表面,通过求解3维N-S方程得到波浪在坡面上的卷曲和破碎效果。Muller等人[13,14]应用平滑粒子流体动力学方法,同时考虑了表面张力的作用,进行水面的模拟。为了突出波浪的效果,O′brien和Hodgins[15]以及Takahashi等人[16]用粒子系统对水花和泡沫进行建模,模拟了水波与固体碰撞时的飞溅现象。张桂娟等人[17]提出耦合几何特征的高精度流体动画生成方法,根据几何模型定位调整物理模型中的粒子集,从而更有效地产生高精度的流体水面和水花等细节效果。但基于物理模拟的方法因为其运算较为复杂,实现效率比较低。

1.2 水面重建

近年来,随着相机等采集设备的发展,对真实自然现象的重建技术逐渐向基于数据采集的方向发展。数据驱动的水表面重建,利用采集设备对真实的动态流体进行捕捉,并对数据进行建模,此类方法能够保持流体变化的真实感,数据场符合物理运动规律,同时又在计算效率上得到了改善,因此近几年来成为流体建模的研究方向。

基于图像的重建技术中,多目图像方法主要采用双目摄像机或多台摄像机对目标进行拍摄,获取多视角的图像信息。Ihrke等人[18]提出基于采集荧光物质亮度的重建方法,利用荧光物质对水体进行染色,然后用多台摄像机对目标水体进行拍摄,在重构水体形态时保证时序上的连续性,使得模拟的流体动画更加连贯和具有整体性。Wang等人[19]提出了一种混合了物理模拟和基于图像重建的动态水体重建构架,重建出水的初始表面,然后再用一系列物理约束对初始表面进行优化,从而使重建出来的3维动画真实感强且重建效率也很高。沈亮等人[20]提出一种基于图像的启发式火焰重建方法,通过迭代优化求解能量约束模型,实现对火焰3维温度场的重建。多目图像方法往往能实现非常细节化的视觉效果,然而为了采集所需的数据,需要搭建复杂精细的数据采集环境,其对设备的要求和数量也有较高的要求,只适用于室内小规模流体的细节重建,这在很大程度上限制了多目图像方法的发展。

对于室外水体建模,由于户外水体几乎是不透明的,因此消除了折射的影响,可以通过由影调恢复形状(shape from shading,SFS)的方法来恢复其表面形状。Li等人[21]对Pickup文中提出的方法进行了进一步的优化,引入浅水方程,通过多层迭代模型对重建水表面进行优化。国内也有相应的工作受到Li等方法的启发。Quan等人[22]提出基于物理粒子的方法来拟合水面,通过浅水方程构造线性几何表面和非线性几何表面约束来重构水面形态。商柳等人[23]通过SFS方法实现水面建模后,通过对水面高度场进行分解,实现了多样性的水面动画合成。

而在基于深度图的3维重建方面,近年来国内外已经有一些研究,Li等人[4,5]以多帧点云数据为输入,对变形或不变形的3维物体进行重建,通过局部注区块匹配,重建模型。Sharf等人[24]以动量守恒为约束,通过前后帧的点云流对缺失部分进行填充。Wang等人[25]通过模版3维模型的建立,将连续变化的点云序列与模版进行匹配,在弹性势能的约束下,对3维模型的变化过程进行建模。此类方法针对的通常是形态不变或变化较小的固体模型,而流体由于运动过程中形态变化较大,且无法通过模版进行匹配,因此普通的深度图重建方法不适用于流体建模。

目前基于真实数据的水表面重建方法,针对室内的水体重建,可利用多相机精确捕捉流体细节。但由于拍摄设备复杂,并且通常需要使用染色等手法对水体进行处理,因此可重建的水体类型局限性较大。另一方面,针对室外环境复杂,采集环境与光照环境变化较大的场景,多使用单一视角的图像进行恢复,此方法恢复结果受光照影响较大,同时由于拍摄距离较远,重建精确度受限,水体重建结果运动较为平缓。

针对该问题,本文提出一种基于深度数据的流体表面重建方法,研究如何从RealSense摄像头采集的深度图像中,快速重建流体表面模型。由于设备性能和流体自身性质的影响,流体采集深度信息时存在空洞与噪声等问题,无法直接由深度数据转化生成完整的流体表面高度场。因此,本文的关键点是针对捕获的深度图中的缺失及错误部分,通过连续帧间的数据场融合,还原流体表面丢失的数据信息。

2 基于深度图的水面重建

通过深度采集设备捕获所得的水面数据场,为时序上连续变化的水表面点云数据。本文的研究目标是基于RealSense深度摄像头采集流体表面的深度信息,从连续变化的深度图像中,重建水表面运动信息,并在速度场引导下恢复流体表面模型,生成真实而具有丰富细节的流体动画。

在水体流动过程中,由于水面运动过快,以及表面飞溅等原因,深度相机采集的深度图像可能存在局部区域缺失等问题。图像空洞修补方法,通常利用图像局部的连续性,以空洞边缘图像的颜色信息为目标,在图像中搜索相似性最高的数据块,对缺失区域进行填补。考虑到水面拍摄结果中,存在较大区域的数据缺失,而通常的基于连续性的图像修复方法,考虑了单帧图像的局部纹理特征,但针对水面运动序列,修复结果在水面运动的真实感上和时序连续性上难以得到满足。

考虑到水表面运动遵循物理规律,因此本文针对水表面深度图,根据前后帧间时序连续性,计算水面运动速度,并以速度场连续性为约束,以循环优化的方式对高度场与速度场同时进行计算,实现对图像的修复。首先对原始深度图像进行去噪处理,并对待修补部分进行标示;然后根据水表面空间相似性,通过追踪匹配建立前后帧点云集合间对应关系;针对缺失部分的图像,根据流体运动场的时空连续性构建能量最小化方程,恢复表面速度场,并在流体运动的动量守恒的约束下基于速度场对高度场进行修复,最终重建水面模型。基于深度图的水面重建流程如图1所示。

图1 基于深度图的水面重建流程图

2.1 深度图预处理

使用RealSense摄像头对水表面进行拍摄时,由于水流速度较快导致水表面难以对红外线信号进行反射,深度图中通常存在局部的空洞和噪声,同时由于红外信号受到环境的影响,在单帧深度值的测量上,会在真实深度值基础上出现偏移,因此在对数据场进行修复前,需先对深度图进行预处理,包括对数据无效区域的标示,以及对深度数据场的归一化处理。

在水面数据采集结果中,深度图中的无效区域由2种情况构成,分别为无深度值区域(深度返回值为零),以及由于局部测量错误以及环境噪声引起的数据值错误区域。

水面流动过程中,表面高度呈现连续变化的特点,因此,针对表面缺失部分区域,采用一种基于相似性的表面修复方法,对水表面进行填充,用于后续的优化。

将高度场看成是2维灰度图,使用基于纹理合成方法对空洞进行填补。

将一个像素的邻域设为包围这个像素的正方形窗口。假设要填补的图像为I,令p∈I是图像中的一个像素点,ω(p)∈I是以p为中心、宽度为ω的方形图像块,即p的邻域。在对波浪空洞填补过程中,首先找到空洞边缘的所有像素点,这些像素点的邻域内只有部分有灰度值,而中心点需要合成。为了合成像素点p,和p的邻域的最优匹配ωbest是邻域:

(1)

其中s为衡量相似性的距离函数。从最优匹配邻域集中随机选取一个,将选取邻域中心点的亮度值赋给p点。空洞填补是一个迭代的过程,填补过程中,每一次找出空洞边缘的一圈像素进行合成,然后如此向内收缩,直到最后将所有空缺的像素合成完毕。波浪完成修复后,需要进行高斯平滑来对波浪周围进行处理,使波浪在填充后的位置和周围的波浪融合。

2.2 基于时空连续性的优化模型

流体运动场中,深度摄像机可以捕获连续变化的水表面高度场,相比于其他类型的物体,水面的运动符合物理规律的约束,因此针对高度图的缺失,本文提出一种基于速度场的时序优化算法,对高度图进行修复,计算流程如图2所示。水面运动符合物理运动规律,因此在时序一致性约束下,对速度场与高度场进行同步优化计算。输入的高度图定义为Hi,i表示帧序列号,输入帧数为n,则高度图序列表示为H={Hi}, 1

(2)

图2 速度场及高度场修复的优化求解流程

另一方面,水体可近似视为不可压缩物体,运动过程中,符合流体物理方程的约束,在浅水的流动过程中,水面高度变化较小,考虑到水表面运动满足动量守恒,运动速度与水面高度场的变化符合以下约束:

(3)

其中,u、v、w分别表示沿x、y、z轴的速度场,其中垂直方向速度变化可近似使用高度变化进行表示,因此高度场变化w可通过最小化以下约束来求解:

(4)

E=Eheight-temporal+Eflow-temporal+Eflow-spacial

(5)

在深度图待填充的区域内,以时空连续性的约束下,最小化以上能量函数,通过迭代优化的方式,同时求解速度场与高度场,实现水面深度重建。

2.3 高度场求解

为了实现以上的方程求解,由于水面速度场与高度间互相影响,直接求解难度较大,本文通过将帧间匹配、速度求解、高度场求解分别计算,以实现最终的优化。首先根据前后帧的深度图,通过追踪算法,计算水表面运动的匹配结果;通过对速度场的约束,根据能量最小化约束,对缺失部分的速度场进行最优化计算;最后根据完整的速度场,对高度场进行求解。

2.3.1 速度场重建

由于深度设备的限制,在流体速度过大的区域内,无法捕获真实有效的数据。考虑到波浪运动速度较快,在普通深度相机采集数据的一个时间步内,水表面发生变形,因此直接根据高度场进行水面速度的计算无法准确计算速度,因此本文使用基于几何特征的点云匹配方法,实现对水面运动的追踪,以此实现速度场计算。首先根据高度场与相机外参,计算3维点云数据,在此基础上,计算第i帧中的点与i+1帧的匹配关系。在水面运动过程中,一个时间步内,水面运动变形较小,因此根据3维空间的距离以及法向相似性计算匹配结果。

此处使用迭代最近点(iterative closest point, ICP)算法对相邻帧间的点进行匹配。为了实现第i帧Hi与第i+1帧Hi+1的匹配,若假设Hi中的点Pi与Hi+1中的Qi点对应,则可通过旋转矩阵进行点间的匹配,使其满足关系Qi=Pi×Ri+Ti,其中Ri与Ti分别表示旋转矩阵与平移矩阵。在计算匹配点过程中,通过最小化以下能量方程,计算匹配结果:

(6)

其中,D(Q,P)衡量匹配点的相似度,在本方法中,相似度包括空间距离Dspace以及纹理相似度Dcolor2个方面,其中:

Dspace(Qi,Pi)=Qi-(Pi×Ri+Ti)

(7)

通过以下方程来最小化Dspace保证水面点云的空间连续性:

(8)

bb(ri,dj)=

(9)

其中,bb(ri,dj)为点对的匹配结果,bb=1表示ri,dj构成一对兄弟点对,NN(ri,D)即为在区域D中寻找与ri最相似的点,计算方法为:

(10)

其中,dis表示两点间的距离,此处为两点间RGB图像像素间的差。最终2个区域块的相似性度量函数定义为

(11)

综合以上所述,相邻帧点云匹配过程中,匹配结果同时满足图像像素以及空间距离一致性约束:

D(P,Q)=Dspace+Dcolor

(12)

本文通过对连续帧序列间的匹配计算,实现对水表面点的追踪。同时根据匹配结果,(P,Q)点对表示当前帧中的点P在下一帧中的目标位置Q,通过此方式,可计算深度图中像素点在一个时间步内的运动速度。

U(u,v,w)=Q-P

(13)

同时,考虑到水面运动其速度场变化满足时间连续性的约束:

(14)

综合以上,在点云匹配求解过程中,通过联合以上2种优化目标,计算速度场,同时计算第i帧向前以及向后运动速度场Uf,Ub。速度场计算结果将同时满足时间连续性、彩色图像以及空间位置的连续性。

2.3.2 高度场修复

完成速度场的计算后,本节在速度的约束下,实现待修复区域的高度场重建。首先,水面运动中,高度场需要在单帧内满足局部数据的平滑性,另一方面,考虑到流体方程的约束下,高度场与速度场间满足动量一致性的约束,根据速度场U的引导,可计算目标点在前帧数据场中的对应高度,高度场满足以下约束:

(15)

在计算过程中,第i帧中p位置的高度场为

H(p)=H′(p,U)+(ux(p)+vy(p)-w(p))

(16)

其中,H(p)表示高度场修复结果,U为i帧向i+1帧运动速度场,H′(p,U)为p点在速度U的驱动下,在相邻i+1帧中对应位置的高度场,u、v、w分别为p位置沿x、y、z方向的速度,ux与vy分别为速度u、v沿x、y方向的导数。本文通过前后帧共同约束,对当前帧高度场进行优化,并在完成高度场计算后,对高度场进行平滑,保证高度场的连续性和视觉真实感。本文算法实现流程如算法1所示。

算法1基于深度图的水面重建算法

1:输入:数据采集深度图序列H2:针对H中无效信息,标识待修复区域M3:For loop←1 TO k DO /∗ loop为循环迭代次数∗/4: 通过水面高度图序列{H},结合相机内参与外参计算水面点云集合5: For frame←1 TO N DO /∗逐帧计算水面高度场∗/

6: 最小化Eflow-spacial, Eflow-temporal 计算当前帧与前后帧间的点云匹配结果{P, Q}7: 根据匹配结果,更新前向速度场U,以及后向速度场W8: 基于速度场UW,最小化Eheight-temporal,更新计算高度图Hframe9: End10:End11:输出:{Hframe}为水面重建结果

3 实验结果

本文使用RealSense摄像头垂直于水表面进行深度数据的采集,图3中左侧图片为采集RGB图像,中间为原始采集数据的高度图显示结果以及对应的3维模型渲染效果,右侧为使用本文方法修复后的对应结果。

图3 深度相机采集数据及修复结果渲染

如图3所示,观察填补结果可以看出,空洞区域经填充后能很好地与边缘位置融合在一起,并且水面变化符合RGB图像所展示的水面运动特征。图4为更多的修复结果展示。左侧图像为原始捕获深度图的渲染结果,其中空洞部分为数据缺失区域,右侧为使用本文方法修复后的水面效果。在深度摄像头采集的原始深度图中,基于红外摄像头的成像原理,在运动速度过快的区域,水表面形态不稳定,因此表面凸起部分也较容易出现较大区域的数据缺失。而本文基于RGB-D图像,在水面点云与纹理的双重约束下,能够较好地在连续的水面序列帧中完成波浪运动轨迹追踪,实现对水面速度场与高度场建模,因此针对快速运动的、较大范围的水面缺失,重建结果也保持了较好的真实感和连续性。

水表面高度场由深度图像转化而来,因此若将水面视为图像也可以通过对2维图像的修复近似恢

左侧为通过深度摄像机采集的连续变化的水面帧序列, 右侧为对应的重建结果图4 水面修复与重建结果

复水面。本文使用了简单的基于图像纹理的修复方法[26]做为预处理步骤,图5对比了本文的修复方法与基于图像纹理的修复方法的处理效果。图像显示

右图为深度相机采集结果,深色区域为无效数据,中图为使用 基于图像的修复算法的重建结果,左图为本文算法修复结果图5 水面修复结果对比

了使用颜色空间对高度场进行表示的结果,暖色表示水面高度较大,冷色表示水面较低。其中,最右侧为捕获的带有残缺的原始深度图,深色区域为数据缺失的待修复区域,左侧为本文方法修复结果,中间为使用普通图像纹理修复算法的结果。观察基于单帧图像的修复结果,由于基于图像纹理的修复算法仅考虑了深度图像的局部相似度,虽然可以保证修复结果在视觉上合理,但局部有较明显的边界,而且在连续变化的修复结果中,波浪边界区域不具备连续性。本文方法在修复过程中,通过空间位置的匹配计算速度场,并逐步迭代进行高度场的优化,在速度场的时空约束下,高度结果符合运动的连续性,且边界较为平滑,能看到较明显的波浪向前涌动的特征。

另外,本文使用室内采集的完整水面模型数据场,对本方法的修复效果进行验证对比。首先对室内水体数据进行染色处理后,对水面深度数据进行采集。由于采集数据较为完整,本文对原始数据进行处理,将部分区域的数据进行剔除,并使用文中算法,将数据场进行修复后与原始捕获数据进行比对。如图6所示,其中左上图像为捕获结果,如前文所分析,由于深度采集过程中水面翻涌较剧烈的区域易出现数据捕获的缺失,因此为了更好地模拟真实场景中采集数据的残缺状态,本文将采集所得的帧序列中水面高度在阈值之上的区域置为无效数据,作为实验修复对象,如右上图像所示,其中深色区域表示无效数据区。图6下部从左至右分别为使用基于单帧图像的修复方法以及本文方法对缺失的深度区域进行修复的结果。如图6所示,当深度图局部数据缺失后,基于单帧的图像修复的方法通过RGB图像的像素相似度,在该帧图像中寻找与待填充位置的纹理最相似数据块进行填充,因此修复结果虽然在空间上保持连续,但由于数据源中水面涌起部分缺失较多,无法与Groundtruth中所显示的水面凸起状态保持一致。本文方法通过重建速度场进行对数据缺失区域的修复,虽然当前帧水面运动剧烈,局部区域数据已缺失,但可根据前后帧的速度场重建,在时间连续性约束下可近似恢复缺失区域的运动学信息,并进一步恢复高度场,因此填充结果与原始采集数据场相似度更高。

左上图为使用的Groundtruth高度图,右上为设计的待修复图像,下图从左至右分别为基于单帧图像的修复算法以及本文修复算法的重建效果。其中坐标轴表示像素位置。

图6 图像修复结果对比

4 结 论

由于深度采集技术及设备快速发展,基于深度相机的3维模型重建技术逐渐发展起来,而由于流体运动速度较快且具有不规则性,同时水体环境变化较大,在真实场景采集中捕获的深度数据存在较大范围的缺失,因此普通的针对固体的3维模型重建方法难以适用于流体的重建。本文针对此问题,基于水体运动时表面的几何连续性,进行相邻帧间的水面点云追踪,并根据流体运动的时序连续性约束,近似计算水表面速度场信息;进一步结合水面动量守恒以及体积守恒实现高度图的修复。此方法基于实测数据重建出的流体模型,既能保证重建结果符合流体真实的运动规律,同时回避了物理方程计算量大的问题,提高了流体重建的整体效率。

但本文的方法也存在一些不足,如速度场与高度场修复,需要以相邻帧间的点云匹配为前提,当采集的深度图像边缘区域出现连续多帧数据缺失时,由于无法对前帧进行匹配,因此速度场计算不准确,同时导致高度场修复结果失真。后续工作中需要根据帧间匹配结果动态调整前后帧融合时的权重参数,并结合水面初始化等方法得到更加准确且丰富多样的波浪动画结果。

猜你喜欢
深度图水面流体
纳米流体研究进展
流体压强知多少
一种基于WMF-ACA的深度图像修复算法
山雨欲来风满楼之流体压强与流速
水黾是怎样浮在水面的
基于深度图的3D-HEVC鲁棒视频水印算法
争夺水面光伏
一种基于局部直方图匹配的深度编码滤波算法
叠加速度谱在钻孔稀少地区资料解释中的应用
一块水面