一种数据驱动的水表面重建方法及系统与流程

文档序号:13744790阅读:104来源:国知局
本发明涉及图像处理和计算机视觉领域,特别涉及一种数据驱动的水表面重建方法及系统。
背景技术
:在广告、影视作品、大规模游戏场景以及虚拟现实的各领域及应用中,自然场景的渲染占据着极其重要地位,能否让用户沉浸其中,体会到身临其境的感觉,是该邻域产品的核心价值的体现,因此自然场景的真实感模拟一直是计算机图形学研究的热点,国内许多流体模拟研究者正在研究如何在计算机中模拟更真实的流体,如何绘制更真实的流体以及如何使得模拟速度更快,而其中流体模拟,尤其是大规模水面和波浪的快速建模与真实感场景重建技术的应用前景非常的广泛,具有极高的实际应用价值,然而天然的流体运动是一种非常复杂的物理现象,受到地形、风速、波浪内部的涡动等多种因素的影响,同时波浪高低不齐、长短不一,时而表现为相对呈周期性的水波,时而也有形态剧烈变化、会卷曲和分裂的碎浪,还有飞溅的水花,其几何形状具有极强的不规则特性,因此,如何对不规则波浪进行模拟,以突出波浪动画的真实感,一直以来都是图形学领域研究的一个难点。经典的液体建模主要是基于物理的建模方法,在数字世界中依照物理规律建模并模拟自然现象。已经有大量的研究工作关注于各种不同形态的液体流动现象,比如:液体表面、波浪、粘稠液体、液体固体交互等,目的是在遵从物理原理的条件下,运用计算机图形学技术逼真地进行模拟,基于物理的建模方法是根据液体初始状态和物理方程,计算求解液体的密度场,大多数方法在模拟复杂的液体运动现象时计算量大且耗时长,对参数设置非常敏感,特别是模拟复杂的细节特征难度较大。由于相机等光学设备和技术的迅猛发展,高精度的采集设备得到广泛的应用,因此,基于采集数据的液体建模方法成为了活跃的研究热点,该技术主要使用多种设备对水体运动的各项数据进行采集,然后根据采集到的真实水场景数据,利用计算机图形学和计算机视觉技术,快速重构出水体的三维表面,并利用经典的物理建模方法进行验证和优化,由于该方法是对真实自然现象实测数据的重构,更加能够真实反映动态自然现象的运动趋势与物理规律,捕捉动态自然现象纷乱嘈杂的特点,在完整的保留真实现象和真实物体中丰富的复杂细节的同时大幅度降低了计算量,具有良好的应用前景,但通过数据采集的方法,对真实液体随时间变化的物理运动建模仍然是一个具有挑战性的课题。与本发明相关的一些概念:反射率(reflectance):表示物体反射入射光大小的数值叫做反射率,由物体表面所能反射的光量和它所接受的光量之比计算得出,常用百分率和小数表示。当光束接近正入射(入射角θ约等于0)时,反射率计算公式是:其中n1,n2分别是两种介质的真实折射率(即相对于真空的折射率),折射率是指光线进入不同介质时角度发生改变的现象,用表征,θ1,θ2分别为入射角和折射角,即光线与法线的夹角,通常来说,光线在临界面上的反射率仅与介质的物理性能,光线的波长,以及入射角相关。信息熵(informationentropy):通常信息的多少很难度量,“信息熵”概念的提出,解决了对信息的量化度量问题。信息熵这个词是香农从热力学中借用过来的,热力学中的热熵是表示分子状态混乱程度的物理量,香农用信息熵的概念来描述信源的不确定度,可以把信息熵理解成某种特定信息的出现概率,一般而言,当一种信息出现概率更高的时候,表明它被传播得更广泛,或者说,被引用的程度更高,可以认为,从信息传播的角度来看,信息熵可以表示信息的价值,这样子我们就有一个衡量信息价值高低的标准。水面高度场(hightfield):表示水面每个位置的相对高度情况。在水面的动画中,人眼能够看到的部分基本为水面的涌动情况,因此可以将水面动画的重建化简为水面部分高度的重建,通过对水面进行网格化的细分,水面的整体形态可以表示为所有细分点高度的组合,最终每一个点的高度数据组合成了水面的高度场。以上常见的方法中,传统基于物理的方法所需计算量大,耗时较长,且对参数设置较为敏感,对于复杂特征的细节模拟存在一定的技术难度。现有的数据驱动的水表面重建方法则大多需要复杂的数据采集装置设计,并对水体有一定程度要求或需要进行预处理,以结构光、预定图案作为标记等,这些要求在室内条件下可以满足,但却难以在户外得到实施。技术实现要素:针对现有技术的不足,本发明提出一种数据驱动的水表面重建方法及系统。本发明提出一种数据驱动的水表面重建方法,包括:步骤1,获取水面视频,根据所述水面视频的帧率,将所述水面视频解析成为单帧的图片;步骤2,将所述图片进行分块,计算每个所述分块中水面的反射率,根据每个所述反射率,计算每个所述分块基于各自反射率的信息熵,并设置阈值,将所述信息熵小于所述阈值时,将小于所述阈值的信息熵对应的分块进行细分,生成新分块,计算所述新分块的信息熵,直到所述新分块的信息熵大于所述阈值,获取每个分块的高度场;步骤3,将每个所述分块的高度场缝合为整体。所述步骤2中计算每个分块中水面的高度场和反射率的公式为:maxR,Z,LP(R)P(Z)P(L)]]>subjecttoI=R+S(Z,L)其中R表示反射率,Z表示水面的高度场,L表示环境的光照方向,I表示所述图片上像素点的强度,P(R)函数、P(Z)函数、P(L)函数分别表示为参数R、Z、L的先验条件,S(Z,L)表示物体表面的反射光强度函数,对以上公式求负log函数并将约束条件带入可得:Floss=minZ,L(g(R)+f(Z)+h(L))]]>其中g(R),f(Z),h(L)分别为反射率R,高度场Z与环境光L的损失函数,Floss为最小损失函数。所述步骤2中计算信息熵的步骤为:对所述图片的宽与高等分为M和N份,获取MxN的分块,针对大小为MxN的分块,通过信息熵的方法对反射率的变化剧烈程度进行量化:HR=-Σi=0M-1Σj=0N-1pijln(pij)]]>其中:pij=R(i,j)/Σi=0M-1Σj=0N-1R(i,j)]]>pij表示分块中点(i,j)的反射率值占图像总反射率值的比值,HR为信息熵。所述步骤3将每个所述分块的高度场缝合为整体的步骤为:在每个分块的边缘预留x个点的重合部分,对于两个分块的高度场B1和B2,设二者重合的部分为Bov1和Bov2,重合部分的点(i,j)为与定义每个重合点的误差为找到误差值最小的分割曲线,从第一行开始遍历,对于每一点(i,j)计算累计误差Ei,j:Ei,j=ei,j+min(Ei-1,j-1,Ei-1,j,Ei-1,j+1)获取每个分块中最后一行的最小的Ei,j值所在的点,从最小的Ei,j值所在的点,通过回溯获取分块的分割曲线,完成对高度场的缝合。对高度场进行渲染,利用所述水面视频作为纹理,映射到高度场上,获取真实的水面动画。本发明还提出一种数据驱动的水表面重建系统,包括:解析模块,用于获取水面视频,根据所述水面视频的帧率,将所述水面视频解析成为单帧的图片;获取高度场模块,用于将所述图片进行分块,计算每个所述分块中水面的反射率,根据每个所述反射率,计算每个所述分块基于各自反射率的信息熵,并设置阈值,将所述信息熵小于所述阈值时,将小于所述阈值的信息熵对应的分块进行细分,生成新分块,计算所述新分块的信息熵,直到所述新分块的信息熵大于所述阈值,获取每个分块的高度场;缝合模块,用于将每个所述分块的高度场缝合为整体。所述获取高度场模块中计算每个分块中水面的高度场和反射率的公式为:maxR,Z,LP(R)P(Z)P(L)]]>subjecttoI==R+S(Z,L)其中R表示反射率,Z表示水面的高度场,L表示环境的光照方向,I表示所述图片上像素点的强度,P(R)函数、P(Z)函数、P(L)函数分别表示为参数R、Z、L的先验条件,S(Z,L)表示物体表面的反射光强度函数,对以上公式求负log函数并将约束条件带入可得:Floss=minZ,L(g(R)+f(Z)+h(L))]]>其中g(R),f(Z),h(L)分别为反射率R,高度场Z与环境光L的损失函数,Floss为最小损失函数。所述获取高度场模块中计算信息熵的步骤为:对所述图片的宽与高等分为M和N份,获取MxN的分块,针对大小为MxN的分块,通过信息熵的方法对反射率的变化剧烈程度进行量化:HR=-Σi=0M-1Σj=0N-1pijln(pij)]]>其中:pij=R(i,j)/Σi=0M-1Σj=0N-1R(i,j)]]>pij表示分块中点(i,j)的反射率值占图像总反射率值的比值,HR为信息熵。所述缝合模块将每个所述分块的高度场缝合为整体的步骤为:在每个分块的边缘预留x个点的重合部分,对于两个分块的高度场B1和B2,设二者重合的部分为Bov1和Bov2,重合部分的点(i,j)为与定义每个重合点的误差为找到误差值最小的分割曲线,从第一行开始遍历,对于每一点(i,j)计算累计误差Ei,j:Ei,j=ei,j+min(Ei-1,j-1,Ei-1,j,Ei-1,j+1)获取每个分块中最后一行的最小的Ei,j值所在的点,从最小的Ei,j值所在的点,通过回溯获取分块的分割曲线,完成对高度场的缝合。还包括:渲染模块,用于对高度场进行渲染,利用所述水面视频作为纹理,映射到高度场上,获取真实的水面动画。由以上方案可知,本发明的优点在于:1.本发明提供一种基于获取的数据进行水面重建的方法及系统,节省计算时间,具有较高的效率;2.相较于普通由影调恢复形状的方法,加入反射率条件,更加符合自然规律,并能得到更好的水面重建效果;3.针对复杂水面进行自适应的分割求解,能更好的重现复杂水面波浪效果。附图说明图1为本系统对水面重建的步骤图图2为需要重建的水面图像实例图3为对分块进行缝合的方法示意图图4为重建得到的水面高度场示意图图5为最终重建的水面效果图图6为本发明系统的结构图。具体实施方式针对现有技术中存在的问题,本发明提出一种数据驱动的水表面重建方法,包括:步骤1,获取水面视频,根据所述水面视频的帧率,将所述水面视频解析成为单帧的图片;步骤2,将所述图片进行分块,计算每个所述分块中水面的反射率,根据每个所述反射率,计算每个所述分块基于各自反射率的信息熵,并设置阈值,将所述信息熵小于所述阈值时,将小于所述阈值的信息熵对应的分块进行细分,生成新分块,计算所述新分块的信息熵,直到所述新分块的信息熵大于所述阈值,获取每个分块的高度场;步骤3,将每个所述分块的高度场缝合为整体。所述步骤2中计算每个分块中水面的高度场和反射率的公式为:maxR,Z,LP(R)P(Z)P(L)]]>subjecttoI=R+S(Z,L)其中R表示反射率,Z表示水面的高度场,L表示环境的光照方向,I表示所述图片上像素点的强度,P(R)函数、P(Z)函数、P(L)函数分别表示为参数R、Z、L的先验条件,S(Z,L)表示物体表面的反射光强度函数,对以上公式求负log函数并将约束条件带入可得:Floss=minZ,L(g(R)+f(Z)+h(L))]]>其中g(R),f(Z),h(L)分别为反射率R,高度场Z与环境光L的损失函数,Floss为最小损失函数。所述步骤2中计算信息熵的步骤为:为了对复杂水面进行更加细致的重建,获得更加逼真的结果,可以对水面进行分块,降低每一个分块的复杂度,在进行水面的重建。对图片的宽和高等分为M和N份(实验中设置为16和8),得到MxN的分块。针对大小为MxN的分块,通过信息熵的方法对反射率的变化剧烈程度进行量化:HR=-Σi=0M-1Σj=0N-1pijln(pij)]]>其中:pij=R(i,j)/Σi=0M-1Σj=0N-1R(i,j)]]>pij表示分块中点(i,j)的反射率值占图像总反射率值的比值,HR为信息熵。4.如权利要求1所述的数据驱动的水表面重建方法,其特征在于,所述步骤3将每个所述分块的高度场缝合为整体的步骤为:在每个分块的边缘预留x个点的重合部分,对于两个分块的高度场B1和B2,设二者重合的部分为Bov1和Bov2,重合部分的点(i,j)为与定义每个重合点的误差为找到误差值最小的分割曲线,从第一行开始遍历,对于每一点(i,j)计算累计误差Ei,j:Ei,j=ei,j+min(Ei-1,j-1,Ei-1,j,Ei-1,j+1)获取每个分块中最后一行的最小的Ei,j值所在的点,从最小的Ei,j值所在的点,通过回溯获取分块的分割曲线,完成对高度场的缝合。对高度场进行渲染,利用所述水面视频作为纹理,映射到高度场上,获取真实的水面动画。本发明还提出一种数据驱动的水表面重建系统,如图6所示,包括:解析模块,用于获取水面视频,根据所述水面视频的帧率,将所述水面视频解析成为单帧的图片;获取高度场模块,用于将所述图片进行分块,计算每个所述分块中水面的反射率,根据每个所述反射率,计算每个所述分块基于各自反射率的信息熵,并设置阈值,将所述信息熵小于所述阈值时,将小于所述阈值的信息熵对应的分块进行细分,生成新分块,计算所述新分块的信息熵,直到所述新分块的信息熵大于所述阈值,获取每个分块的高度场;缝合模块,用于将每个所述分块的高度场缝合为整体。所述获取高度场模块中计算每个分块中水面的高度场和反射率的公式为:maxR,Z,LP(R)P(Z)P(L)]]>subjecttoI==R+S(Z,L)其中R表示反射率,Z表示水面的高度场,L表示环境的光照方向,I表示所述图片上像素点的强度,P(R)函数、P(Z)函数、P(L)函数分别表示为参数R、Z、L的先验条件,S(Z,L)表示物体表面的反射光强度函数,对以上公式求负log函数并将约束条件带入可得:Floss=minZ,L(g(R)+f(Z)+h(L))]]>其中g(R),f(Z),h(L)分别为反射率R,高度场Z与环境光L的损失函数,Floss为最小损失函数。所述获取高度场模块中计算信息熵的步骤为:为了对复杂水面进行更加细致的重建,获得更加逼真的结果,可以对水面进行分块,降低每一个分块的复杂度,在进行水面的重建。对图片的宽和高等分为M和N份(实验中设置为16和8),得到MxN的分块。针对大小为MxN的分块,通过信息熵的方法对反射率的变化剧烈程度进行量化:HR=-Σi=0M-1Σj=0N-1pijln(pij)]]>其中:pij=R(i,j)/Σi=0M-1Σj=0N-1R(i,j)]]>pij表示分块中点(i,j)的反射率值占图像总反射率值的比值,HR为信息熵。所述缝合模块将每个所述分块的高度场缝合为整体的步骤为:在每个分块的边缘预留x个点的重合部分,对于两个分块的高度场B1和B2,设二者重合的部分为Bov1和Bov2,重合部分的点(i,j)为与定义每个重合点的误差为找到误差值最小的分割曲线,从第一行开始遍历,对于每一点(i,j)计算累计误差Ei,j:Ei,j=ei,j+min(Ei-1,j-1,Ei-1,j,Ei-1,j+1)获取每个分块中最后一行的最小的Ei,j值所在的点,从最小的Ei,j值所在的点,通过回溯获取分块的分割曲线,完成对高度场的缝合。渲染模块,用于对高度场进行渲染,利用所述水面视频作为纹理,映射到高度场上,获取真实的水面动画。本发明的方法以实际拍摄的水面数据为基础,生成真实感较高的动画序列,以下为本发明实施例,如下所示:具体包含以下步骤如图1所示:1.获取拍摄的水面视频,根据视频的帧率,并将视频解析成为单帧的图片,如图2所示;2.对于图片进行分块,求取每一部分水面的高度场和反射率。1)分块的目的是为了能够对每个部分进行更加精细的求解,因为对于复杂的水面部分,进行统一的求解可能没法得到精确的结果,因此对于不同复杂成度的水面,需进行适当的调节粗略分块的数量,针对水面平缓的图像,可以使得分块的数量较少,水面波浪复杂的水面,则可以进行更加细致的分解,整体而言,对于图片的长和宽进行2~6等分都是较为合理的。2)在对水面进行高度场的求解中,本发明在传统的由影调恢复形状(shapefromshading)方法的基础上加入了反射率条件进行模型的构建,因为在传统的由影调恢复形状的方法中,假设物体的表面为朗伯体,即反射率是统一的数值,该方法在某些情况下,存在于重建结果与真实形态差异较大的现象,就是因为没有考虑反射率会随着物体表面形态的变化而波动,在加入反射率的条件后,模型可表示为:maxR,Z,LP(R)P(Z)P(L)]]>subjecttoI=R+S(Z,L)其中R表示反射率,Z表示水面的高度场,L表示环境的光照方向,I表示图片上像素点的强度,P(x)函数表示为参数x的先验条件,即自然界中反射率和水面形态基本的变化规律以及求解方法,S(Z,L)表示物体表面的反射光强度是物体表面高度场和环境光的函数,而图片上像素点强度则是反射率与物体表面反射光强度之和,对公式求负log函数并将约束条件带入可得:Floss=minZ,L(g(R)+f(Z)+h(L))]]>其中g(R),f(Z),h(L)分别为反射率R,高度场Z和环境光L的损失函数,在光照条件已知的情况下除h(L)外,其他两项具体表示为:g(R)=λsΣiΣj∈N(i)c(Ri-Rj;αR,σR)-λelog(ΣiΣj∈N(i)exp(-(Ri-Rj)24σR2))]]>其中λs是比例系数,像素点j∈N(i)是像素点i周围5x5范围的点,c(x;α,σ)是以均值α和方差σ为参数的高斯混合尺度模型的负log函数:在上述公式中,c(x;α,σ)中的x表示为Ri-Rj,指的是像素点i和像素点j的RGB值求log的差值。f(Z)=ΣiΣj∈N(i)c(H(z)i-H(Z)j;αk,σk)-Σilog(Niz(Z))]]>其中H(Z)i表示物体在点i处的曲率,由该点处的二次偏导数近似表示:其中Zx表示Z在X方向上的偏导,Zy表示Z在Y方向上的偏导,Zxy则是求取X和Y方向上的两次偏导。H(Z)=(1+Zx2)Zyy-2ZxZyZxy+(1+Zy2Zxx)2(1+Zx2+Zy2)32]]>而表示物体在点i处的法向量:Nz(Z)=11+(Z*h3x)2+(Z*h3y)2]]>其中h3x=1810-120-210-1,h3y=18121000-1-2-1]]>为卷积滤镜,用来快速求偏导。通过上述函数构建出损失函数Floss,并使用最优化方法最小化损失函数Floss,可以得到最优化的反射率和高度场结果。3.对于水面的每一个分块,获得初步的高度场和反射率结果后,需对每个分块求取反射率的信息熵,并将信息熵较小的分块进行更为细致的细分,获得更加精确的求解。1)反射率的变化和物体本身的性质和物体的形状相关,因此,越是平静无波的水面越接近于朗伯体表面,反射率变化越平缓;而波浪变化复杂的水面,反射率的变化程度会较为剧烈,针对大小为MxN的分块,通过信息熵的方法可以对反射率的变化剧烈程度进行量化:HR=-Σi=0M-1Σj=0N-1pijln(pij)]]>其中:pij=R(i,j)/Σi=0M-1Σj=0N-1R(i,j)]]>表示点(i,j)的反射率值占图像总反射率值的比值。信息熵HR反应了图像中反射率的分布信息,当水面波浪较为复杂,反射率变化较大,此时反射率信息量多,熵值小,当水面较为平缓,反射率变化比较平滑,信息量少,熵值大。2)设置一个阈值α,对于每一个分块求取反射率的熵值后,当分块的熵值大于α不在进行进一步的处理;当熵值小于α时,可以认为该分块内水面波浪变化较为剧烈,需要进行进一步的细分,通过模型进行更加细致的求解,从而得到更加精确的高度场结果。4.此时,求得的高度场是分块的,需要利用纹理缝合的思想,将每个分块的高度场缝合为整体,并保证水面整体的统一。在上述的求解中,为了最后的统合,事先在每个分块的边缘预留6~8个点的重合部分,对于两个分块的高度场B1和B2,设二者重合的部分为Bov1和Bov2,重合部分的点(i,j)为和为了平滑的使二者合而为一,需要找到误差值最小的分割曲线,如图3所示,定义每个重合点的误差为为了找到误差值最小的分割曲线,从第一行开始遍历,对于每一点(i,j)计算累计误差Ei,j:Ei,j=ei,j+min(Ei-1,j-1,Ei-1,j,Ei-1,j+1)然后得到最后一行的最小的E值所在的点,从这个点,通过回溯的方法得到整个分割曲线,即可完成对两个高度场的缝合。5.使用工具对高度场进行渲染,利用拍摄的视频图像作为纹理,映射到水面高度场上,获得较为真实的水面动画。如图4所示,获得的高度场数据并不能给人以直观的感觉,需要进行渲染获得动画结果。不同光照下水面也呈现出不同的色彩,因此视频中的水面颜色信息将是渲染中非常重要的一部分。将前面步骤计算出的高度场数输入三维建模软件maya中,然后将如图5所示,将拍摄图片作为纹理映射到高度场中,进行渲染,得到最终的水面动画结果。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1