《Physically guided liquid surface modeling from videos》TOG2009

来源:互联网 发布:淘宝女棉拖 编辑:程序博客网 时间:2024/04/23 14:04

去年暑假刚开始看流体模拟,一开始看的是三篇欧拉法的经典文章《Realistic animation of liquids》、《Stable fluids》、《Practical animation of liquids》,之前没有半点基础,一开始看没有摸着头脑,云里雾里啊~ 反反复复读了N遍才找到了点感觉,渐渐开始理解。

现在又开始接触数据驱动的流体模拟,看到这篇牛文《Physically guided liquid surface modeling from videos》TOG2009,刚开始依然云里雾里,花了两三天,读了几遍,才稍微有点理解,囧~ 看文章过程中自己记了一些笔记,也算是这篇文章的简略翻译。

p.s. 第一作者Huamin Wang,本科毕业于浙大,后去美国读了硕士博士博士后。搜资料发现他去年在浙大做过一个有关数据驱动流体模拟的报告,有他的简介如下:

Bio:Dr. Huamin Wang is an assistant professor (to be) in the department of Computer Science and Engineering at the Ohio State University. Before that, he finished his postdoctoral study in the department of Electronic Engineering and Computer Sciences, at the University of California, Berkeley. He received his Ph.D. from Georgia Institute of Technology in 2009, M.S. from Stanford University in 2004 and B.Eng. from Zhejiang University (Mixed Class 1998) in 2002.  He was a recipient of the NVIDIA fellowship award in 2005.

接触流体模拟以来,几乎看的全是英文文献,真心感觉中国的科研水平与世界前沿差距很大,少年加油啊~

下面是这篇文章的笔记,只是目前我对这篇文章的个人理解,如有误,恳请指正。(再P.S. 图片公式粘不上来,费劲弄了半天还是不成功,先凑合着看吧,以后知道怎么弄了再加上~)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Abstract:本文提出一种结合基于图像的重建和基于物理的模拟的新方法用于真实水体的动画生成。双目相机采集的图像作为输入,生成深度图序列,然后添加自动计算的物理约束,可以自动去除outliers、优化几何表面、填补丢失区域,生成的最终模型序列既与采集的真实图像一致,又符合真实物理规律。因为引入了物理约束,模型序列可以在时空域内进行内插或外插,甚至允许移动相机在不同角度拍摄。

 

1 Introduction & 2 Related Work

为了方便空间特征匹配,把水用染料染成白色,使水变成不透明。使用一个投影仪在运动的水体表面投射固定的随机纹理pattern。用两个同步经过校正的相机采集灰度图像,采集分辨率为640*480,帧率200fps。

基于物理的模拟方法存在两个主要问题:一是误差累积,包括体积丢失、表面细节丢失;二是计算耗时耗资源。

本文把基于物理的数值模拟方法和基于图像的重建方法结合起来生成水的表面模型。首先用特征点匹配的方法从图像序列重建表面模型,然后用基于物理的模拟方法作为校正工具对模型表面进行优化校正。为了保证时间上的连续性,作者提出一个3D flow estimation method,用来在时间上相邻两个表面模型之间估计velocity flow。为了保证空间上的连续性,作者提出一个surface optimization method,用于删除redundant errors,添加物理约束如体积守恒、表面光滑性、填充丢失信息的表面区域。本文只把流体动力方程用于约束条件,而不是作为求解的目标函数,因此计算效率比较高。

使用相机来拍摄真实场景,可以捕捉到基于物理的模拟方法很难模拟的效果;把基于物理的约束添加到3D表面模型,初始图像质量和覆盖范围都可以降低,不使用环绕的相机阵列,仅仅使用单个相机也可以达到目标。

 

3 overview

计算框架包括两个步骤,第一步根据双目视觉的深度信息,每帧独立地重建初始形状序列得到,第二步对进行优化生成满足时间和空间一致性的最终形状序列。空间一致性意味着与相机捕获的形状相似,时间一致性意味着应该尽量满足流体物理约束。用数学语言表达时空一致性,得到下面能量方程的最小解:


表示的相似性,局部满足物理约束的程度,是表面光滑程度。本方法中,方程1中的各个能量被视为独立的子问题,分别对它们单独求解多次,以求得方程1的最小解。

本文用隐式有符号距离函数来定义水的表面,带符号的距离值离散定义在规整网格上。

 

4 surfaceinitialization

4.1 depth extraction

双目获取的图像首先利用epipolar geometry(对极几何)理论进行校正处理,使得同一个3D点在两个相机采集的图像的同一个水平行上。然后使用belief propagation获取立体视觉的深度信息生成深度图,然后用a sub-pixel interpolation scheme光滑深度图,去除锯齿效果。在阴影中或者在某一个相机中被遮挡的区域因为缺少匹配,生成的深度值有误。为了解决此问题,作者提出了a two-pass algorithm。

4.2 Surface Initialization

因为使用的是双目相机,上一步中提取得到的深度图只覆盖了不到50%的表面区域,但后续的优化方法需要完整的表面信息。可以用如下公式猜测生成完整表面:


完整表面定义为以为中心点的半径为r的球面的并集。

如果水是薄层,则上述公式比较有效,如果大部分区域因为遮挡而丢失,则应使用启发式方法猜测得到整个表面信息。如:


如果水体表面形态在空间上没有重复性,但在时间上重复,则可以移动相机,在不同时间拍摄得到前后两侧的图像,再把两次拍摄的结果对齐组合起来。如果原始的图像序列足够多,可以从中选择一个子集,使得stitched得到的结果形状误差最小,误差最小可以用对齐的表面有符号距离函数值之差的最小平方和来衡量。

用上述方法得到的完整表面虽然不完全符合真实场景,但产生的视觉效果很不错。

 

5 Surface Smoothing and Spatial Coherence

真实的水体因为表面张力的作用,水的表面是光滑的。为了达到光滑效果,作者使用了a surface smoothing scheme。该方法源自Schneider and Kobbelt [2001]:

作者使用下式迭代计算:

   

6 Surface Optimization

这一小节讨论确保时间一致性的的方法,对应于方程1的。

6.1 3D Temporal Flow Estimation


与基于物理的模拟方法不太一样,本文中是根据两帧图像得到的,我们要做的是找到一个最佳的,这个速度使得演变成了。本文提出上图的3D temporal flow estimation方法。首先添加形状演变约束,这通过寻找两个模型之间的3D对应点来实现,在这一步中也隐式地包含了外力和时间连续约束。然后在空间域中光滑处理。最后添加不可压约束。

Correspondence Search:为每个网格单元确定,使得。本文的思想是,以某一网格单元为中心,3*3*3的邻居单元代表了本网格的形状信息,对这些邻居单元进行加权求和计算中心网格单元的速度值,取这些速度值中的最小值作为,如下式:


是权函数。的反向过程也包含在上式中,反应了外力和速度对流(Temporal smoothing这一步)。

求导,得到:


可以用Newton-Ralphson method求解上式。每次迭代生成一个新的速度场:



结合方程13和14,得到一个线性系统,是未知量。迭代计算求得结果。

Error Measure:公式11中的作为一个error measure,用于判定的对应网格单元是否在前后帧中存在。如果都存在,被划入;如果仅在中存在,被划入;如果仅在中存在,被划入;如果在前后帧中均不存在,在被划入

Spatial Smoothing:空间光滑化可以产生粘性效果:

对6个邻居网格单元的速度值加权求和。为了产生高粘性效果,可以多次计算上述两式。

Pressure Projection:速度和压强都定义在网格单元上。首先把速度插值到一个交错网格上,然后添加pressure projection,最后把速度重新映射回网格中心。执行完pressure projection后,error scores要重新计算,重新确定error measure步骤中每个网格单元的分类。

6.2 False-Positive Removal

如果模型序列中仅仅有很少的几帧中出现了水的某一个区域,而在拍摄的真实场景中并没有,这属于false-positives,应该去除这些区域。本文提出的方法是计算某一区域在连续的多少帧中出现,通过设定两个标志,分别前向和后向计算某一个区域在多少个连续帧中出现。如果出现次数少于某个阈值,则该区域被认为是false-positive,应该删除,把设定为无穷大。算法如下:



6.3 Optimization for Temporal Coherence

为了提高相邻两帧之间的连续性,利用估计得到的速度流,可以对前后帧插值优化



分别是根据前一帧和后一帧预测的带符号距离值的函数,在0到0.5之间取值。上式适用于属于的情形,其他情形可用下式计算:


文章结合了提出的a non-interpolating semi-Lagrangian method和level set method,提出下面的预测公式:



6.4 False-Negative Completion

如果某些区域在某些帧中丢失,则属于false-negatives,应该填补上这些区域。类型的网格可以认为是属于这种情况。

首先利用线性采样的方法对这些网格的速度进行传播,然后使用下式恢复丢失的区域:


这个过程可以执行多次,在多帧中填补丢失区域。这些步骤完成以后,可以再重新执行一遍整个表面优化过程,去除本步骤引起的时空不一致性。

7 Results and Discussion

在大场景中,外力和不可压的计算被去除。

本文提出的方法迭代时间不受CFL条件限制,但消耗内存较大。

估计求得的速度场可以用于增加时间分辨率,在两帧之间插值得到新的过渡效果。也可以用于外插得到所定义的时空网格外的场景。

虽然本方法没有显示添加体积守恒限制,但体积变化比较小。

本方法生成的结果可能与真实场景不一样,但效果很好,可以用于图形学领域。

8 Conclusion and Future Work

本文的创新点有:

1.     提出一个表面初始化算法,估计生成初始表面模型;

2.     A 3Dflow estimation method定义时间一致性;

3.     A Surfaceoptimization method去除false-positives、加强时间一致性、填补false-negatives。

 

未来的工作:更加鲁棒的采集系统和算法、水不需要染色、减小内存消耗、使用GPU加速、重建其他效果如烟雾、把算法写成工具便于用户直接编辑图像生成想要的效果,等等。