一种快速流体图像表面追踪方法与流程

文档序号:12604266阅读:309来源:国知局

本发明涉及一种图像处理方法,尤其是涉及一种快速流体图像表面追踪方法。



背景技术:

三维显示中三维物体通常是通过绘制物体封闭表面来达到绘制三维物体的目的,因此快速的追踪到三维物体的表面,对于三维显示具有重要意义。由于液体的表面形状复杂,且其拓扑变化频繁,追踪液体表面是一个比较有挑战性的问题。

将液体表面表示成栅格图中的一系列标量函数是一种非常可取的一种方法,因为通过这种方法可以自动应对拓扑的结构变化,但是栅格表示的分辨率由这一系列标量函数所能表示的最小的特征尺寸所限制,要想模拟大范围空间中的小颗粒就需要非常庞大的栅格网。

最近出现了基于三角网格来追踪液体表面的方法,以此来克服栅格网表示的缺点。通过三角网格来表示物体表面在理论上没有特征尺寸的限制。但是通过三角网来表示液体表面时,由于液体融合与分裂等事件而导致的拓扑改变将必须得到有效的处理(主要是重叠部分的去处与修改)。

多数已有的基于三角网格的表面追踪技术同时使用着栅格网,通过使用栅格网来修正重叠部分。例如Wojtanetal.在2009年使用匹配立方体其后在2010年使用匹配凸壳的方式来处理拓扑变化带来的重叠问题。这些处理方法都限制了拓扑改变时所能处理的最小尺寸,同时将栅格网转化为三角网表示也是一个比较麻烦的过程,且其精度很难保证,其所导致的非流体网格还会导致后续处理进程中的困难。



技术实现要素:

本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种快速去除拓扑噪音、确定流体表面的快速流体图像表面追踪方法,是一种完全用三角网格来表示物体表面时,对物体(主要是液体)融合与分裂等事件引发的三角网格拓扑变化的处理方法。

本发明的目的可以通过以下技术方案来实现:

一种快速流体图像表面追踪方法,包括以下步骤:

S1,流体图像三角形网格化,找到所有与其他三角形存在相交的三角形;

S2,将存在相交的三角形面积收缩,使其与其他三角形不相交;

S3,对步骤S1得到的不存在相交的三角形分别进行位置判断,去除位于流体内部的三角形;

S4,去除多余三角形,使每个顶点仅与零条或两条边相邻,得到具有空洞的流体表面三角形网格;

S5,对空洞进行填充,得到完整的流体表面三角形网格。

所述的步骤S2中,三角形面积收缩的方法为:根据三角形原顶点v1、v2、v3确定新坐标,具体如下式:

<mrow> <msub> <mi>v</mi> <mn>1</mn> </msub> <mo>&LeftArrow;</mo> <msub> <mi>&alpha;v</mi> <mn>1</mn> </msub> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>&alpha;</mi> <mo>)</mo> </mrow> <mfrac> <mrow> <msub> <mi>v</mi> <mn>1</mn> </msub> <mo>+</mo> <msub> <mi>v</mi> <mn>2</mn> </msub> </mrow> <mn>2</mn> </mfrac> </mrow>

<mrow> <msub> <mi>v</mi> <mn>2</mn> </msub> <mo>&LeftArrow;</mo> <msub> <mi>&alpha;v</mi> <mn>2</mn> </msub> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>&alpha;</mi> <mo>)</mo> </mrow> <mfrac> <mrow> <msub> <mi>v</mi> <mn>2</mn> </msub> <mo>+</mo> <msub> <mi>v</mi> <mn>3</mn> </msub> </mrow> <mn>2</mn> </mfrac> </mrow>

<mrow> <msub> <mi>v</mi> <mn>3</mn> </msub> <mo>&LeftArrow;</mo> <msub> <mi>&alpha;v</mi> <mn>3</mn> </msub> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>&alpha;</mi> <mo>)</mo> </mrow> <mfrac> <mrow> <msub> <mi>v</mi> <mn>3</mn> </msub> <mo>+</mo> <msub> <mi>v</mi> <mn>1</mn> </msub> </mrow> <mn>2</mn> </mfrac> </mrow>

其中,0<α<1。

所述的步骤S2中,α=0.5。

所述的步骤S5中,采用动态规划的方法进行空洞填充。

所述的步骤S1中,若两个三角形共享一个顶点则为不相交,若两个三角形共享两个顶点,则判断两个三角形法向量夹角,小于阀值判断为相交,大于阀值为不相交。

与现有技术相比,本发明通过相交三角形收缩、删除多余三角形和空洞填充,快速追踪流体表面,具有速度快、鲁棒性高的优点。

附图说明

图1为本发明的流程图。

具体实施方式

下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

实施例

如图1所示,本实施例快速流体图像表面追踪方法的主要目标是给定一个没有边界的但是存在重叠的流体,由于融合和分裂区域产生重叠交叉的三角网格,将其处理成具有多样性但是没有重叠部分的三角网格。

本方法分为以下六步:(1)找到相交的三角形。(2)拓扑噪音去除。(3)删除多余的三角形。(4)确保网格的多样性。(5)空洞匹配。(6)空洞填充。

第一步:寻找相交的三角形。

在这一步,首先对每对三角形判断是否共享顶点,如果共享一个顶点则为不相交,如果有两个点相交判断其相交角度,小于阀值判断为相交,大于阀值为不相交。对于不共享任何点的两个三角形,采用Moller算法来判断在三维空间中的两个三角形是否相交。对于这一步的结果考虑到后面的步骤需求,需要将交叉的三角形对储存在一个链表中。

由于后面的步骤需要检查三角形是否是相交三角形,对于每个三角形都检查链表代价比较大,因此对于每个三角形设置状态记录,当在判断一对三角形是否相交时即将其标记,这样在后面判断是否属于相交三角形时可以直接判断,而省下了查找相交三角形对链表的时间。

第二步:移除拓扑噪音。

对于每一个相交的三角形,将其所有点按照下列公式进行变换:

<mrow> <msub> <mi>v</mi> <mn>1</mn> </msub> <mo>&LeftArrow;</mo> <msub> <mi>&alpha;v</mi> <mn>1</mn> </msub> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>&alpha;</mi> <mo>)</mo> </mrow> <mfrac> <mrow> <msub> <mi>v</mi> <mn>1</mn> </msub> <mo>+</mo> <msub> <mi>v</mi> <mn>2</mn> </msub> </mrow> <mn>2</mn> </mfrac> </mrow>

<mrow> <msub> <mi>v</mi> <mn>2</mn> </msub> <mo>&LeftArrow;</mo> <msub> <mi>&alpha;v</mi> <mn>2</mn> </msub> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>&alpha;</mi> <mo>)</mo> </mrow> <mfrac> <mrow> <msub> <mi>v</mi> <mn>2</mn> </msub> <mo>+</mo> <msub> <mi>v</mi> <mn>3</mn> </msub> </mrow> <mn>2</mn> </mfrac> </mrow>

<mrow> <msub> <mi>v</mi> <mn>3</mn> </msub> <mo>&LeftArrow;</mo> <msub> <mi>&alpha;v</mi> <mn>3</mn> </msub> <mo>+</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <mi>&alpha;</mi> <mo>)</mo> </mrow> <mfrac> <mrow> <msub> <mi>v</mi> <mn>3</mn> </msub> <mo>+</mo> <msub> <mi>v</mi> <mn>1</mn> </msub> </mrow> <mn>2</mn> </mfrac> </mrow>

这一步相当于将每一个三角形内缩了,可以将那些处于相交边缘的三角形通过较小幅度的变化来变成非相交的三角形,尤其是对于有非常多的小颗粒的数据,可以将相交小颗粒变为非相交,进而减少后续判断处理的数据量。

第三步:删除多余的三角形。

在这一步需要判断出去相交三角形以外其余三角形是否在某一个物体内部,对于这些三角形连通相交的三角形都需要删除。由于所有相交三角形都已经找出,其余三角形的所有顶点要么全部在物体内部或全部在外部,也就变成了判断三角形上某一顶点是否在物体内部,对于这个问题有多种方法可选,本实施例采用的是Muller于2009年提出的一种射线投影的方法,具体过程可概括为对于一个点从这个点引出一条射线(射线方向需要指向其面垂直向外的方向),对于这条射线所相交的每一个三角形(要包括第一步中判断为相交三角形的三角形,所以第一步中的相交三角形都不能直接删除掉,需要等到这一步中判断完所有体内三角形后才可以一起删除掉,在实现的时候,可采用将三角形标记而不是直接删除掉的方式来处理的),将这个三角形的向外法向量方向与射线方向相乘,大于零加一计数小于零减一计数。如果最后计数为零,则为外部点,不为零则为内部点(至关的几何理解,一个外部点引出的射线经过任何一个体都会从一面穿入在从一个面穿出,所过两个面的上述乘积结果分别为负、正,因此外部点最终计数为零,而内部点不为零)。最后删除所有相交和在体内的三角形。

对于每一个三角形都做如上判断代价十分巨大,但由于已经判断出了相交三角形,如果这一判断准确的话,去除这些三角形后相连通的三角形要么全部在内部,要么全部在外部,理论上只要判断其中一个三角形即可。

在实际实现中,由于数值计算的精度问题(其实使用射线法判断本身在理论上就会有误判,比如射线经过两个三角形边界,这时不管是判断为相交还是不相交都会使最后结果错误),单个的判断并不准确,对每一联通区域,任意选择几个来进行投票判断。

对于这一步因为需要得到各个三角形向体外的法向量方向,三角形获取法向量是可以实现的。

第四步:确保多样性。

一条边当且仅当其有不超过两个相邻三角形时具有有多样性,一个顶点当且仅当其相邻的三角形只通过边相连时具有多样性。而一个三角网格当且仅当其所有的边和顶点都具有多样性时才具有多样性。

直接按照定义判断是否具有多样性代价十分巨大,但是由于当前三角网格是从一个具有多样性的三角网格通过删除部分三角形而形成的,所以只需要保证每个顶点只与两个或零个边界边相邻即可。对于不满足的顶点只需删除与这个点相邻的三角形即可。

实现过程中是通过构建三角形到边的映射计数表,只与一个未删除三角形相连的为边界边。

第五步:洞匹配。

这一步主要是将之前各个步骤中产生的洞,进行配对修复。首先是对每一对洞是否应该进行配对修复进行判断。对此采用一种评分标准,这一评分标准包括两部分,第一部分是两个洞中所有点对(一个点在洞1一个点在洞2)判断是否分别在在第一步中判断并存储的相交三角形对中的两个三角形上;第二部分判断所有点对(还是一个点在洞1一个在洞2上)间的距离是否小于一个阀值。综合上述两项评分,进行排序,从评分高的到低的依序配对修复。

在这一评分系统中第一部分其对应于液体融合时删去三角形形成的空洞对,第二部分则是对应于分裂时删去三角形导致的空洞对。

对于每个空洞对修复,可以判断每对边的距离,选择最近的开始,对一对边添加三角形并判断是否会导致非多样性,然而对于每一对洞在获取距离最近边对时,并不能知道这一边对在洞中时同向还是反向,故在添加三角形时需要尝试多种情况,其次由于每添加一个三角形都会导致边界变动,如第四步中的方法判断是否多样性代价十分巨大。

对于这一问题,可选取最近的边到点,并进行三角化(最近点已经三角化则不进行三角化),这样既不需要判断边的方向,也不会产生非多样性,因此不用再判断多样性。这种方法会产生很多小的缺口,但是这些小的缺口都是比较简单的洞可以通过下一步简单的填充。

第六步:空洞填充。

这一步主要是将前面各步留下的空洞进行填充。在此步中最快的方法只需O(n)的复杂度但其缝合的结果一般比较差。另一种是采用动态规划的手段,其复杂度为O(n2)。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1