基于流线生长法的纹理生成方法
【技术领域】
[0001] 本发明属于计算机图形学的科学计算可视化领域,主要涉及一种纹理生成方法, 特别是涉及一种基于流线生长法的纹理生成方法。
【背景技术】
[0002] "纹理"(Texture)是科学计算可视化学科中一种常用的矢量场可视化技术,其基 本功能是对科学研宄中产生的大量矢量场数据(例如流体的速度场,机械设备受热后的温 度梯度场等)进行描述,将大量抽象数据转化为直观的图像表达出来。纹理方法最大的特 点是能提供像素级的矢量场细节描述能力,更利于科研人员分析、理解、挖掘数据本质。
[0003] 现有的纹理生成算法可分为几种基本思路。
[0004] 第一种方法是"点噪声"法。首先生成覆盖矢量场的白噪声,然后沿着各点处矢量 径向拉伸点噪声,程度与矢量大小成比例。变形后的点噪声就能反映所在点矢量方向和大 小。这种思路产生的纹理很粗糙,成像效果不理想。
[0005] 第二种方法LIC(线积分卷积)方法。首先生成覆盖流场的白噪声,然后将每一个 像素作为种子点向上下游追踪一定长度的流线,再对途经的所有像素进行卷积,就得到了 种子点处的输出像素灰度值。这种方法最大的优点是生成的纹理图像对流场的描述很清 晰,对流场中每一点处的矢量方向都有很好的指向性。最大的缺点是速度慢。由于对矢量 场中每个像素都要进行流线追踪和卷积运算,因此速度很慢。
[0006] 第三种是"纹理合成"法。预先绘制模板纹理,然后从中随机切割出纹理条,将其 沿流线贴图,如此处理若干条流线,就得到全局纹理。该方法速度比LIC算法快,但是生成 纹理质量不高,另外对于流场汇聚和发散的特殊情况需要额外处理,速度受流场情况影响 较严重。
[0007] 第四种是"图像平流"法。该方法中每帧图像由两部分加权混合得到,第一部分是 沿着流线将上一帧纹理"平流"得到的图像,第二部分是补充的噪声。该方法速度比lie算 法要快,但是由于仍然要进行卷积运算,有时还要进行滤波运算,速度也比较慢。
[0008] 以上四种方法的速度都比较慢,尤其当数据量很大时,不能满足实时交互的需要。
[0009] 另外一个共同的缺点就是,他们对非稳态矢量场的描述不是很准确。上述四种方 法都可以经过改进后用来描述动态的、非稳态矢量场,也就是结构随时间变化的矢量场。基 本思路都是不再沿着流线进行卷积,而是沿着迹线进行卷积,每个时刻生成一副纹理图像, 最终很多帧图像合成为纹理动画。这样带来两个不好的后果,其一表达内容混乱,其二速度 慢。
[0010] 第一个缺点是表达内容混乱,原因如下。首先因为沿着迹线卷积,在任意时间片段 上,当时帧纹理的各点处像素值之间不存在任何关系,并不能反映当时的矢量场全貌。其次 利用迹线卷积,本质上是把很多时间上相邻帧迹线上相邻像素的像素值做了卷积。也就是 某一点处某一帧的像素值包含了相邻一段时间的矢量场信息。这样不可避免的带来一定的 混乱,尤其是某段时间如果矢量场变化剧烈,则混乱非常严重。
[0011] 第二个缺点是速度慢,有如下几个原因。首先不同帧计算中有大量计算是重复进 行的,例如每一帧中每一像素点都要重复进行点定位和插值。这就带来很大计算冗余,造成 速度慢。其次沿着迹线卷积,本身就是一个计算量较大的运算。
【发明内容】
[0012] 发明目的:
[0013] 为了解决上述现有的各种纹理生成方法的缺陷,本发明提出了一种基于流线生长 法的纹理生成方法,可以用来对稳态和非稳态的矢量场进行全局描述,纹理生成的速度更 快,对矢量场的描述更丰富准确。
[0014] 技术方案:
[0015] 本发明是通过以下技术方案来实现的:
[0016] -种基于流线生长法的纹理生成方法,其特征在于:该方法步骤如下:
[0017] (1)首先利用扫描线点定位法对矢量场中每个像素进行点定位和插值,以备后用; 利用流线生长法生成每一帧的静态流线纹理,该流线纹理描述了当前时刻矢量场的整体静 态瞬间结构;再利用粒子轨迹法生成当前帧的迹线纹理,该迹线纹理描述了当前时刻之前 一段时间内矢量场整体结构的动态变化情况;
[0018] (2)将利用流线生长法得到的每帧流线纹理和利用粒子轨迹法生成的迹线纹理合 成,得到每帧的输出纹理,循环播放每一帧,得到最终的动态纹理动画。
[0019] 扫描线点定位法的步骤如下:
[0020] 从一个确定在矢量场内的像素(Xd,yj开始,沿着y=yd,即水平扫描线方向向 左右延伸,并不断对途径像素进行点定位和插值,直到两端都超出矢量场边界为止,得到初 始的扫描线段,然后将其入栈;之后的处理是一个循环的过程,每次都把栈顶的扫描线段弹 出,并对该线段上方y=yd+1和下方y=ycrl的两条水平线进行点定位和插值处理,直到 他们两端超出矢量场范围,则将他们入栈;不断循环这个过程,直至栈为空,则完成所有纹 理单元的点定位和插值处理。
[0021] 流线生长法的步骤如下,其中用到两个公式,描述如下:
[0024] 公式⑴中P(l表示当前流线的起始种子点位置;T(pJ表示P(l位置处的输出纹理 值;NormalRandom是求渐近正态分布数的函数,第一个参数是分布的数学期望,第二个参 数是分布的方差;L为纹理卷积时单侧卷积长度;公式(2)中Pi表示当前流线的第i个采 样点位置;Random是求均匀分布数的函数,两个参数分别是分布区间的左界和右界;
[0025] 流线生长法按照扫描线顺序依次如下循环处理每个像素:
[0026] (1)判断当前像素是否被处理过,如未处理转入步骤(2),如已经处理,则结束本 次循环;
[0027] (2)利用公式(1)求得一个以127. 5为均值,_
为方差的渐近正态分布数, 作为该像素的输出像素值;并标记当前像素为已处理;
[0028] (3)根据上述扫描线点定位法结果取得当前像素点处的坐标值和矢量场值,根据 坐标值和矢量场值计算,并沿着流线前进到下一个像素,设置其为当前像素;
[0029] (4)判断当前像素是否被处理过,如未处理则利用公式⑵计算产生一个
范围内的均匀分布数,加上前一个像素点的像素值,和数就是当前点的输 出像素值;并标记当前像素为已处理,跳转到步骤(3);如当前像素已经处理,则结束本次 循环。
[0030]利用公式(3)取代公式(1),用公式(4)取代公式(2)降低计算量;
[0031] T(p〇) =Random(127. 5-range, 127. 5+range) (3);
[0032]T(pi+1)=T(p^ (4)。
[0033]公式(3)、⑷中各符号含义与公式(1)、⑵中相同,其中range表不种子点输出 像素值的分布范围,其值可由用户定义。
[0034] 粒子轨迹法的步骤如下:
[0035] (1)在矢量场中选取纵横方向上分隔一段相等距离的稀疏像素点阵作为起始种子 占.
[0036] (2)判断是否需要补充种子点,如果需要,则补充种子点;
[0037] (3)在种子点处绘制透明度为1的粒子;
[0038] (4)从当前时间帧回溯N帧,绘制每一帧的所有轨迹粒子,粒子的透明度根据公式 (5)计算;其中At是轨迹帧与当前帧的时间间隔;N是回溯的总帧数,也是绘制出的轨迹 的总长度;a表示△t轨迹帧的透明度;
[0040] (5)对每个种子点根据其坐标值和上述扫描线点定位法结果计算其矢量场值,根 据坐标和矢量场值计
算下一个时间帧上所有种子点的新坐标,判断各新坐标点是否超出矢 量场范围,超出则丢弃;
[0041] (6)判断当前时间帧是否是最后一帧,如果否,则跳转回步骤(2),如果是,则结束 循环。
[0042] 对于稳态的矢量场,只进行一帧纹理的生成:首先利用扫描线点定位法对所有像 素单元进行点定位和插值,其次利用流线生长法生成流线纹理,该流线纹理即是最终的输 出纹理。
[0043] 优点及效果:
[0044] 本发明涉及一种基于流线生长法的纹理生成方法,具有如下优点:
[0045] (1)速度快:算法中采用"扫描线点定位法"提前进行点定位,减少了大量计算冗 余,并且算法中没有进行卷积运算,所以整体速度快很多。
[0046] (2)表达能力强:算法中"流线生长法"得到的是每个时间瞬间的流线纹理,它描 述了当前时间瞬间矢量场整体情况。这个信息在以前的算法中都是没有的。另外,"粒子轨 迹法"并没有采用对迹线卷积的思路。这样一方面提高了速度,另一方面也消除了由于迹线 卷积带来的时间信息混乱。
[0047] (3)灵活性强:算法中不用进行额外的运算,只需调整几个简单的参数,就可以获 得不同的纹理效果。
【附图说明】
[0048] 图1为本发明方法流程图。
[0049] 图2为扫描线点定位法流程图。
[0050] 图3为流线生长法流程图。
[0051 ] 图4为粒子轨迹法流程图。
【具体实施方式】
[0052] 本发明所属学科为"计算机图形学",研宄方向属于"科学计算可视化"。进一步细 分,属于一种文理生成方法。利用该方法可以快速生成高质量的矢量场纹理,能够提供像素 级的矢量场细节描述能力,更利于科研人员分析、理解、挖掘数据本质。
[0053] 本发明方法生成的纹理可以应用在很多学科领域。具体包括机械设计、流体计算、 医学成像、飞行器航天器设计、气象数据分析等。
[0054] 本发明涉及一种基于流线生长法的纹理生成方法,其特征在于:该方法步骤如 下:
[0055] (1)首先利用扫描线点定位法对矢量场中每个像素进行点定位和插值,以备后用; 利用流线生长法生成每一帧的静态流线纹理,该流线纹理描述了当前时刻矢量场的整体静 态瞬间结构;再利用粒子轨迹法生成当前帧的迹线纹理,该迹线纹理描述了当前时刻之前 一段时间内矢量场整体结构的动态变化情况。
[0056] (2)将利用流线生长法得到的每帧流线纹理和利用粒子轨迹法生成的迹线纹理合 成,得到每帧的输出纹理,循环播放每一帧,得到最终的动态纹理动画。
[0057] 如图2所示,扫描线点定位法的步骤如下:
[0058] 从一个确定在矢量场内的像素(Xd,yj开始,沿着y=yd,即水平扫描线方向向 左右延伸,并不断对途径像素进行点定位和插值,直到两端都超出矢量场边界为止,得到初 始的扫描线段,然后将其入栈;之后的处理是一个循环的过程,每次都把栈顶的扫描线段弹 出,并对该线段上方y=yd+1和下方y=ycrl的两条水平线进行点定位和插值处理,直到 他们两端超出矢量场范围,则将他们入栈;不断循环这个过程,直至栈为空,则完成所有纹 理单元的点定位和插值处理。
[0059] 如图3所示,流线生长法的步骤如下,其中用到两个公式,可以获得和经典LIC算 法一样的输出纹理效果。描述如下:
[0061]
[0062] 公式⑴中P(l表示当前流线的起始种子点位置;T(pJ表示P(l位置处的输出纹理 值;NormalRandom是求渐近正态分布数的函数,第一个参数是分布的数学期望,第二个参 数是分布的方差;L为纹理卷积时单侧卷积长度。公式(2) *Pi表示当前流线的第i个采 样点位置;Random是求均匀分布数的函数,两个参数分别是分布区间的左界和右界。
[0063] 流线生长法按照扫描线顺序依次如下循环处理每个像素:
[0064] (1)判断当前像素是否被处理过,如未处理转入步骤(2),如已经处理,则结束本 次循环。
[0065] (2)利用公式(1)求得一个以127. 5为均值,
为方差的渐近正态分布数, 作为该像素的输出像素值;并标记当前像素为已处理。
[0066] (3)根据上述扫描线点定位法结果取得当前像素点处的坐标值和矢量场值,根据 坐标值和矢量场值计算,并沿着流线前进到下一个像素,设置其为当前像素。
[0067] (4)判断当前像素是否被处理过,如未处理则利用公式⑵计算产生一个
I范围内的均匀分布数,加上前一个像素点的像素值,和数就是当前点的输 出像素值;并标记当前像素为已处理,跳转到步骤(3);如当前像素已经处理,则结束本次 循环。
[0068] 如图4所示,上述粒子轨迹法的步骤如下:
[0069] (1)在矢量场中选取纵横方向上分隔一段相等距离的稀疏像素点阵作为起始种子 占.
[0070] (2)判断是否需要补充种子点,如果需要,则补充种子点。
[0071] (3)在种子点处绘制透明度为1的粒子。
[0072] (4)从当前时间帧回溯N帧,绘制每一帧的所有轨迹粒子,粒子的透明度根据公式 (5)计算。其中At是轨迹帧与当前帧的时间间隔;N是回溯的总帧数,也是绘制出的轨迹 的总长度;a表示△t轨迹帧的透明度。
[0074] (5)对每个种子点根据其坐标值和上述扫描线点定位法结果计算其矢量场值,根 据坐标和矢量场值计算下一个时间帧上所有种子点的新坐标,判断各新坐标点是否超出矢 量场范围,超出则丢弃。
[0075] (6)判断当前时间帧是否是最后一帧,如果否,则跳转回步骤(2),如果是,则结束 循环。
[0076] 在以上处理中,对每个时间帧中每个种子点绘制的"粒子"经过特殊设计,可以同 时表达该点处矢量的大小信息和方向信息。特殊设计的"粒子"外观为一个等腰三角形,其 顶角平分线的方向即是矢量方向,其顶角大小与矢量大小成反比。
[0077] 如上循环处理所有的时间帧,每个种子点就得到了一系列所有时间帧上分布的粒 子组成的轨迹,这些轨迹能够描述每个种子点沿着空间时间变化生成的迹线。
[0078] 对于稳态的矢量场,只进行一帧纹理的生成,由于稳态矢量场的结构不随时间变 化,所以其最终输出纹理只有一副图像。首先利用扫描线点定位法对所有像素单元进行点 定位和插值,其次利用流线生长法生成流线纹理,该流线纹理即是最终的输出纹理,并不需 要粒子轨迹法生成迹线纹理。
[0079] 下面结合附图和具体的实施例对本发明做进一步的说明,但本发明的保护范围不 受实施例的限制。
[0080] 1.扫描线点定位法
[0081] (1)对于非稳态矢量场,由于场结构本身并没有变,所以只需要对所有帧进行一次 点定位即可。但是对于不同帧数据,由于每个网格顶点上矢量场值是变化的,所以不能直接 在点定位同时进行插值。对三角形网格来说,可以采用"三角形面积坐标法"来进行插值。 而"三角形面积坐标法"插值的主要工作就是求得三个顶点的不同权值,然后对三个顶点的 矢量场值进行加权平均即可。而不同帧中相同像素处求得的三个顶点的权值的相同的,所 以在对每个像素进行点定位同时,可以求得该点所在的三角形网格三个顶点的权值。以后 在不同帧的计算中,只需要对三个顶点不同的矢量场值进行相同的加权平均即可。
[0082] (2)像素的分辨率可调。这个分辨率一般情况下也是输入纹理和输出纹理的分辨 率,但是根据应用环境的需要,可以将这几个分辨率设为不同。[0083] 2.流线生长法
[0084] (1)上述公式(1)用来生成每个流线起始点的输出纹理值。这个公式生成一个渐 近正态分布数,若计算比较费时。可以利用公式(3)取代公式(1)。
[0085]T(p〇) =Random(127. 5-range, 127. 5+range) (3)
[0086] 公式(3)中用一个均匀分布数代替正态分布数,最终的视觉效果差别不大,计算 速度提高很多。公式(3)的另一个好处是,可以适当调整range变量的值,当range值较大 时,整个图像对比度提高明显。
[0087] (2)公式(2)可以进一步用公式(4)取代,也就是说在同一条流线上所有像素值都 相同。最终视觉效果上对流线的走向描述更清晰,同时进一步降低了计算量。
[0088] T (pi+1) = T (p^ (4)。
[0089] 3?粒子轨迹法
[0090] (1)粒子轨迹法中的粒子经过特殊的设计,可以同时表达矢量场大小和方向两种 信息。例如,我们设计了一种特殊粒子,外形是一个等腰三角形。等腰三角形顶角所指方向 就是该点处矢量方向,等腰三角形顶角大小与矢量大小成反比:当矢量越大时顶角越小,矢 量越小时顶角越大。
[0091] (2)绘制粒子轨迹时,为了不对底层流线纹理产生过多的遮挡,我们对每个粒子的 历史轨迹只追溯绘制若干帧,而不是所有帧。并且对"轨迹粒子"设置透明度,离当前时间 帧越久远的粒子越透明。这样最终对每个粒子绘制出的轨迹就不至于过长,另外还会出现 轨迹末端越来越透明的效果,可以更好的体现时间流逝感。
[0092] (3)在第一帧中设置初始种子点时可以采用不同的策略。例如可以采用固定纵横 间隔的稀疏点阵作为种子点,也可在特殊的固定位置(例如矢量场边界)生成种子点,也可 以由用户选择指定种子点。
[0093] (4)随着粒子流动,在后续若干帧中矢量场中某些区域的粒子会"流走",出现一定 的空白区。这就需要我们适当的补充粒子。补充粒子可以采取不同策略,例如可以在每帧 判断,是否有某个区域中所有粒子都"流走",如果是,则在该区域补充粒子。还有一个更高 效的策略,就是定时在所有初始种子点处补充粒子。
[0094] 结论:
[0095] 本发明方法具有良好的计算精度,且具有很高的运算速度和很强的矢量场表达能 力,另外本方法具有很强的灵活性,在不进行额外运算的情况下可以得到很多不同的显示 效果。
【主权项】
1. 一种基于流线生长法的纹理生成方法,其特征在于:该方法步骤如下: (1) 首先利用扫描线点定位法对矢量场中每个像素进行点定位和插值,以备后用;利 用流线生长法生成每一帧的静态流线纹理,该流线纹理描述了当前时刻矢量场的整体静态 瞬间结构;再利用粒子轨迹法生成当前帧的迹线纹理,该迹线纹理描述了当前时刻之前一 段时间内矢量场整体结构的动态变化情况; (2) 将利用流线生长法得到的每帧流线纹理和利用粒子轨迹法生成的迹线纹理合成, 得到每帧的输出纹理,循环播放每一帧,得到最终的动态纹理动画。2. 根据权利要求1所述的基于流线生长法的纹理生成方法,其特征在于:扫描线点定 位法的步骤如下: 从一个确定在矢量场内的像素(x〇,y〇)开始,沿着y = y〇,即水平扫描线方向向左右延 伸,并不断对途径像素进行点定位和插值,直到两端都超出矢量场边界为止,得到初始的扫 描线段,然后将其入栈;之后的处理是一个循环的过程,每次都把栈顶的扫描线段弹出,并 对该线段上方y = y〇+l和下方y = y〇-l的两条水平线进行点定位和插值处理,直到他们两 端超出矢量场范围,则将他们入栈;不断循环这个过程,直至栈为空,则完成所有纹理单元 的点定位和插值处理。3. 根据权利要求1所述的基于流线生长法的纹理生成方法,其特征在于:流线生长法 的步骤如下,其中用到两个公式,描述如下:(1); (2); 公式(1)中Ptl表示当前流线的起始种子点位置;T(Ptl)表示Ptl位置处的输出纹理值; NormalRandom是求渐近正态分布数的函数,第一个参数是分布的数学期望,第二个参数是 分布的方差;L为纹理卷积时单侧卷积长度;公式(2)中Pi表示当前流线的第i个采样点 位置;Random是求均匀分布数的函数,两个参数分别是分布区间的左界和右界; 流线生长法按照扫描线顺序依次如下循环处理每个像素:(1) 判断当前像素是否被处理过,如未处理转入步骤(2),如已经处理,则结束本次循 环; (2) 利用公式(1)求得一个以127. 5为均值, 为方差的渐近正态分布数,作 为该像素的输出像素值;并标记当前像素为已处理; (3) 根据上述扫描线点定位法结果取得当前像素点处的坐标值和矢量场值,根据坐标 值和矢量场值计算,并沿着流线前进到下一个像素,设置其为当前像素; (4) 判断当前像素是否被处理过,如未处理则利用公式(2)计算产生一个范围内的均匀分布数,加上前一个像素点的像素值,和数就是当前点的输 出像素值;并标记当前像素为已处理,跳转到步骤(3);如当前像素已经处理,则结束本次 循环。4. 根据权利要求3所述的基于流线生长法的纹理生成方法,其特征在于:利用公式(3) 取代公式(1),用公式(4)取代公式(2)降低计算量; T(p0) = Random (127. 5-range, 127. 5+range) (3); T (pi+1) = T (Pi) (4); 公式(3)、(4)中各符号含义与公式(1)、(2)中相同,其中range表示种子点输出像素 值的分布范围,其值可由用户定义。5. 根据权利要求1所述的基于流线生长法的纹理生成方法,其特征在于:粒子轨迹法 的步骤如下: (1) 在矢量场中选取纵横方向上分隔一段相等距离的稀疏像素点阵作为起始种子点; (2) 判断是否需要补充种子点,如果需要,则补充种子点; (3) 在种子点处绘制透明度为1的粒子; (4) 从当前时间帧回溯N帧,绘制每一帧的所有轨迹粒子,粒子的透明度根据公式(5) 计算;其中At是轨迹帧与当前帧的时间间隔;N是回溯的总帧数,也是绘制出的轨迹的总 长度;α表示△ t轨迹帧的透明度;(5); (5) 对每个种子点根据其坐标值和上述扫描线点定位法结果计算其矢量场值,根据坐 标和矢量场值计算下一个时间帧上所有种子点的新坐标,判断各新坐标点是否超出矢量场 范围,超出则丢弃; (6) 判断当前时间帧是否是最后一帧,如果否,则跳转回步骤(2),如果是,则结束循 环。6. 根据权利要求1所述的基于流线生长法的纹理生成方法,其特征在于:对于稳态的 矢量场,只进行一帧纹理的生成:首先利用扫描线点定位法对所有像素单元进行点定位和 插值,其次利用流线生长法生成流线纹理,该流线纹理即是最终的输出纹理。
【专利摘要】本发明涉及一种基于流线生长法的纹理生成方法,属于科学计算可视化领域。该方法首先用扫描线点定位法对矢量场中每个像素点进行点定位和插值;然后用流线生长法生成每一帧的静态的流线纹理;再利用粒子轨迹法生成当前帧的迹线纹理;最终将利用流线生长法得到的每帧流线纹理和利用粒子轨迹法生成的迹线纹理合成,得到每帧的输出纹理,循环播放每一帧,得到最终的动态的纹理动画。本发明方法可大幅度提高计算效率和精度,具有优秀的矢量场表达能力和较强的灵活性,适于推广应用。
【IPC分类】G06T13/00
【公开号】CN104899914
【申请号】CN201510363670
【发明人】王成恩, 杜小甫
【申请人】东北大学
【公开日】2015年9月9日
【申请日】2015年6月26日