纹理综合

2024-08-17

纹理综合(共7篇)

纹理综合 篇1

0 引言

20世纪90年代初,随着多媒体技术的发展,大规模数字图像库开始出现,基于文本的图像检索技术已无法满足多媒体信息中对图像内容的检索,为克服这些问题,基于内容的图像检索技术CBIR(Content-Based Image Retrieval)应运而生。区别于原有系统中对图像进行人工标注的做法,基于内容的图像检索就是根据对图像内容的描述,在目标图像集合中找到具有指定特征或包含指定内容的图像。目前基于内容的图像检索技术主要集中在颜色、纹理、形状以及语义特征等视觉特征提取的基础上,但是由于图像特征描述、提取及相似性度量的复杂性,其理论和技术仍然相当不成熟不完善,理论上有许多问题亟待解决,技术上也有许多难关需要攻克。文章旨在研究一种综合颜色特征和纹理特征的图像检索算法,该算法采用了HSV空间的颜色直方图作为颜色特征向量;采用灰度共生矩阵的四个特征:能量,熵,惯性矩,相关性作为分量构成纹理特征向量。除了单独的颜色和纹理检索,本算法统还将颜色检索和纹理检索的效果结合起来,得到更为合理的检索结果。

1 颜色特征提取算法设计

颜色直方图是最常用的颜色特征表示方法,而HSV空间是相对比较符合人类视觉感知特性的颜色空间。故本系统采用基于HSV空间的颜色直方图进行颜色特征的提取,主要包括RGB空间到HSV空间的转换和HSV空间的量化两个部分。

1.1 RGB空间到HSV空间的转换

通过非线性变换可将RGB颜色空间的r,g,b值转换到HSV空间的h,s,v值。设v’=max(r,g,b),定义r’,g’,b’为

上式中,r,g,b∈[0,255],h∈[0,360],s∈[0,1],v∈[0,1]。

1.2 HSV空间的量化

经过上述进行的RGB颜色空间到HSV颜色空间的转换,图像的每一个像素的颜色信息可以用H、S、V三个分量来表示。通过对颜色模型进行大量的分析,将H、S、V三个分量按照人的颜色感知进行非等间隔的量化。根据H、S、V的量化级数和其频带宽度可取组合后的一维向量L:

其中QS和QV分别是S和V的量化级数,L的取值范围为[0,255],计算L获得256 bin的一维直方图。这样H,S,V三个分量就在一维向量上分布开来。

2 纹理特征提取算法设计

灰度共生矩阵是当前人们公认的重要的纹理分析方法。本系统采用基于灰度共生矩阵的纹理特征提取,主要包括图像灰度化、计算灰度共生矩阵及其特征以及特征向量归一化三个部分。

2.1 图像灰度化

由于基于灰度共生矩阵的提取图像纹理特征的方法是建立在图像灰度值基础上的,因此首先需要把彩色RGB空间转换到YUV空间,所得到的Y值就是图像的灰度值。计算彩色图像各像素灰度值的公式为:

2.2 计算灰度共生矩阵及其特征

定义方向为θ,间隔为d的灰度共生矩阵为[p(i,j,d,θ)],p(i,j,d,θ)为共生矩阵的第i行第j列元素,其意义表示所有θ方向上,相邻间隔为d的一对像素分别具有灰度级i和j的出现概率(频数)。显然灰度共生矩阵是对称矩阵,其阶数由图像中像素的灰度级数决定。对不同的θ,共生矩阵的元素是不同的。可以由下式计算出共生矩阵各个元素的概率作为灰度共生矩阵的值:

共生矩阵p(i,j,d,θ)反映了图像灰度分布关于方向、局部邻域和变化幅度的综合信息。但它并不能直接提供区别纹理的特性,需要从矩阵中进一步提取纹理特征。灰度共生矩阵目前已总结的纹理特征有14个,Gotlieb和Kreyszig通过实验得出,能量、熵、惯性矩和相关性是最有效的特征。

2.3 特征向量归一化

特征向量归一化的目的是使特征向量的各分量具有相同的权重。本文采用高斯归一化方法。设特征向量为V,分量为vi,则高斯归一化公式为:

其中,ν和σ是特征向量各分量vi的期望和方差。经过上式对特征向量进行归一化后,向量中的某个分量落在区间[0,1]范围中的概率约为99%,对于大于1的数值可以简单地对应到1上。

3 相似性度量算法设计

欧氏距离是最简单的距离公式,也是在基于内容的图像检索系统中应用较广泛的距离公式,故本系统采用欧氏距离进行颜色和纹理特征的相似性度量。其公式如下:

其中Ai和Bi分别是关键图和检索图的颜色或纹理特征向量的第i个分量。

4 颜色纹理综合检索算法设计

本系统的颜色纹理综合检索,是根据用户设置的颜色权重和纹理权重(颜色权重和纹理权重之和为1),将颜色特征检索得到的颜色相似性距离和纹理特征检索得到的纹理相似性距离,线性组合成为一个综合相似性距离,该距离计算方法如下:

综合相似性距离=颜色相似性距离*颜色权重+纹理相似性距离*纹理权重(8)

5 图像检索过程

首先用户选择一幅关键图,作为待检索的图像。(本系统支持24位的bmp图像)。系统将自动计算关键图的颜色特征(HSV直方图)和纹理特征,并显示出来。其次用户选择本地电脑上的图像文件夹,作为待检索的图像库。接下来,在选择好关键图和图像库之后,用户可以选择基于颜色检索、基于纹理检索或颜色纹理综合检索。最后,检索完成后,在列表中显示每一幅检索过的图像与关键图的相似性距离以及图像文件的路径,并按相似性距离由小到大排列。

6 算法有效性验证

本文提出的算法采用Visual C++6.0作为开发环境,并使用了MFC类库验证其有效性,系统测试时选取两组测试图像,一组是自然风景图像,一组是卡通娃娃图像。测试结果分别如图。

实验结果分析:

首先,本算法能准确无误地检索出关键图是否在图像库中。其次,从大量的测试中可以看出,单独的颜色检索相比于纹理检索,在色彩上更符合人的视觉和心理特性,这表明基于HSV空间的颜色直方图与欧氏距离的配合,通常能得出比较理想的检索结果。对于纹理结构特征较明显的图像,纹理检索的结果基本令人满意;而对于纹理结构特征不太明显的图像,单独的纹理检索效果一般,且与颜色检索的结果有一定差异,表明灰度共生矩阵的纹理特征不是很符合人的视觉特性,需要与颜色特征或其他特征结合起来才能得到比较理想的检索结果。

此外,对于不同的颜色和纹理权重,颜色纹理综合检索的结果有不同的效果。如果对于单独的颜色或纹理检索结果不满意,用户可以根据具体情况设置不同的颜色和纹理权重。比如对于颜色比较鲜明而纹理不太明显的图像,可以设置较大的颜色权重和较小的纹理权重;对于纹理比较明显而颜色不太鲜明的图像,可以设置较大的纹理权重和较小的颜色权重。总之,在逐步地对颜色和纹理权重进行合理调整的过程中,颜色纹理综合检索一般能获得比单独的颜色或纹理检索更好的检索效果。

参考文献

[1]张宏林.Visual C++数字图像模式识别技术及工程实践[M].北京:人民邮电出版社,2003.

[2]唐立军.基于内容的图像检索系统研究和设计[D].北京:中科院计算技术研究所,2001.

[3]王芳,董军宇,唐瑞春.基于内容的图像检索的关键技术[J].现代计算机,2006,(227):60-62.

[4]俞基标,孙君顶,张芳.基于内容的图像检索的视觉特征[J].福建电脑,2007,(4):36-38.

[5]李丙春.基于共生矩阵的图像纹理特征提取及应用[J].喀什师范学院学报,2006,27(6):35-37.

[6]Arnold W.M.Smeulders,Senior Member,Marcel Worring.Content-Based Image Retrieval at the End of the Early Years[J].IEEE Transactions on pattern analysis and machine intelligence,2000,22(12):1349-1380.

纹理综合 篇2

1 图像目标区域选择

1.1 分段线性灰度增强

分段线性灰度增强将需要的图像细节灰度级扩展, 增强对比度, 将不需要的图像细节灰度级压缩。

基本原理:假设输入图像f (x, y) 的灰度为0~M级, 增强后图像g (x, y) 的灰度为0~N级, 区间[a, b], [c, d]分别为原图形与增强图像的某一灰度区间, 分段线性变换函数为:

文中取a=30, b=80, c=100, c=220, 灰度等级N=225, M=190, 原始图像与灰度增强后图像如图1、图2。

1.2 自适应阈值方法进行图像分割

在实际应用情况下, 当照明不均与, 有突发噪声或者背景灰度变化较大时, 整幅图像分割时将没有合适的单一阈值, 因此采用自适应阈值方法进行图像分割。

自适应阈值方法是对每个像素确定以其自身为中心的一个邻域窗口, 寻找窗口内像素的最大值和最小值, 并取二者的平均值作为阈值。如图三所示以C为当前像素, 选取C的8邻域窗口, 该窗口的最大灰度值为max_value, 最小灰度值为min_value, 则阈值T设置为。实际上, 在选择邻域窗口时, 不一定要选择8个窗口, 但是窗口越大, 需要处理的数据就越多, 时间复杂度就越大。

为了采用八方向邻接技术, 文中采用八窗口作为邻域窗口 (如表1) 。

1.3采取“八方向邻接技术”计算子块与周围相邻子块的颜色对表, 采用阈值法消除颜色噪声

1.4将最后得到的颜色对对应的图像区域设为目标区域, 将待比较的N幅图像与目标图像的每一子块的颜色对表, 匹配时不能使用精确匹配, 因此颜色对误差小于2%也属于该匹配值

2 纹理特征提取

图像的纹理是反映图像的局部结构化特征, 具体表现为图像像素点某邻域内像素点灰度级颜色的某种变化, 并且往往是从共生矩阵中抽取适当的统计量作为纹理表示, 但是共生矩阵提取纹理性质缺少视觉相似性。文中利用Gabor小波变换来提取图像的纹理特征, 然后和颜色特征想结合进行图像检索。

纹理特征的提取是相似匹配的基础文中采用基小波为Gabor函数的小波变换来提取纹理特征过程如下。

对一幅图像I (x, y) , 其Gabor小波变换可定义为:

式中, m是吃度数, n是方向数, gmn对二维Gabor函数进行尺度扩张和旋转变化后得到的滤波器, *共轭复数。相应的变换系数均值µmn和方差σmn为:

为了消除不同特征范围的特征值影响, 本文采用了规范化的L2距离测度来描述图像p和图像q之间的距离。

公式 (7) 就是两图像之间的纹理距离公式。

3 实验结果分析

海量数据纹理映射技术研究 篇3

纹理映射技术是当前计算机图形学中的一个热点问题。然而由于纹理图像数据量大,特别是对于大规模的地形数据模型,如果要求具有较高的真实感,内存的需求量更是十分巨大。很多算法是采用一个单块的地形纹理来进行纹理映射,但是在越来越多的情况下纹理数据远远大于内存容量,需要将纹理分块处理后才能使用[1]。为了能在有限的资源下获得较好的实时绘制效果,研究人员从地形的几何多分辨率表示中得到启示提出多分辨率纹理映射技术[2,3,4]。该文在总结已有算法的基础上,提出了一种基于四叉树结构的海量数据纹理映射算法。有效地解决了大规模地形场景重建过程中的数据调度与海量数据的纹理映射问题。实验结果证明了该算法的有效性。

1 基于四叉树的多分辨率纹理分块

为了能有效地实现大数据量纹理的实时调度,需要将纹理进行分块管理。一般情况下,纹理图像分割得越细,纹理坐标的计算量就越小,绘制速度就越快,然而这样会大大增加内存中的数据调度次数。该文使用四叉树结构来表示大规模数字地形的多分辨率纹理数据,每个结点用相同尺寸的纹理图像表示,但不同分辨率结点的纹理精细程度不同。四叉树结构的根结点对应覆盖整个地形方形区域,它的4个子结点分别为根节点的四分之一地域,依次类推,每个子结点均按此方法产生4个子结点,直到原始纹理的最精细分辨率或满足纹理划分的要求为止。

多分辨率纹理映射的关键是如何选取与地形LOD相一致的纹理图像的分辨率。一般来说,分辨率的选择是与视点、地形块的位置大小和纹理的原始分辨率相关的。根据文献[4]中的误差计算方法可以类似计算纹理映射误差。与地形误差不同的是,纹理误差要考虑纹理结点的大小与图像的分辨率级别,因此,纹理映射的误差可表示成纹理的分辨率级别与距视点的距离的函数,可用下式表示:

ρ(k,d)=λdwl(1-2k), (1)

式中,k为纹理图像的分辨率级别;d为纹理分块距视点的距离;w为纹理分块的大小;l为地形数据点之间的行间距和列间距的几何平均值,即l=lxlyλ的计算方法和文献[4]中的一样。

2 纹理调度算法

在大规模的实时绘制时,需要不断地从硬盘到系统内存再到纹理内存调度纹理数据,如果用图形库的函数来实时建立多分辨率纹理则效率不高。该文的方法是预先建立纹理的各个层次细节,存储在数据文件中,当需要的时候对各个层次的纹理数据进行读取,然而使用多级纹理四叉树一次调入的数据量太多时,就会造成帧间停顿时间过长,为了降低停顿时间,必须减少纹理数据的调入量。

2.1 压缩纹理存储的实现

在实际应用中发现,在硬盘到系统内存的传输这一过程可以使用算法对纹理数据进行压缩,再将其存储在硬盘文件上。在使用时,用快速的解码把纹理数据解压到系统内存中。由于纹理图像相邻的纹理象素之间具有某种连贯性,利用这种连贯性对纹理金字塔进行压缩可以有效地减少数据冗余,使得纹理的表示更为紧凑。该文使用类似文献[5]中的图像金字塔,进行多层次的压缩和存储,来对纹理进行有效地压缩、调度及纹理反走样。由于纹理数据需要在绘制时实时进行解码,对解码的时间要求比较高,而矢量量化的方法仅需要建立索引表进行数据检索,效率非常高,因此可以采用矢量量化方法压缩误差图像。用矢量量化编码图像是一种有损的压缩技术,其关键是基于区域进行码本设计。这里使用LBG矢量量化算法对误差图像进行压缩编码[6]。

在执行图像矢量量化的过程中,由于图像各局部区域之间具有相似性,取一定大小的图像子区域进行矢量量化,这些图像子区域区使用相同的编码索引。基于图像子区域进行矢量量化,可以有效地对纹理图像进行压缩。采用矢量化的压缩方法,图像解码快速有效。对于层次多分辨率的纹理,当需要导入高一层分辨率的纹理数据,可以通过使用粗糙一层的纹理数据,以及编码索引号所指向的误差图像矢量量化后的颜色值就可以计算得出。在恢复每一层时,只需要从硬盘读取码本和编码索引号的信息,数据量小,读取非常快,这样既可以节省存储空间,又可以快速地恢复精细层纹理。

2.2 基于误差控制的多分辨率纹理结构

在实际绘制过程中,可以发现在一定误差的控制下,越高分辨率的纹理图像,在离视点越近的区域使用的较多,根据这一现象,在调入纹理数据时,只调入某一分辨率的在一定范围内的纹理数据即可满足实时绘制的需要。因此,首先要根据多分辨率纹理计算的结果确定不同分辨率纹理的范围,将在范围内的多分辨率纹理调入到内存的多分辨率结构中。该文在绘制时将每一层分辨率的纹理数据与预估的结果比较,将符合要求的纹理数据调入内存结构中,此时对于不同层次的纹理映射时会有2种情况:

① 需绘制的纹理层次低于调入的纹理节点层次,此种情况可直接使用上一级纹理进行纹理映射;

② 需绘制的纹理层次高于调入的纹理节点层次,这种情况要复杂一些,因为调入的纹理不能完全覆盖满足纹理分辨率要求的一个多边形,所以不能直接进行纹理映射,解决的方法是利用己调入的纹理为绘制节点实时生成纹理图像。

2.3 纹理内存释放算法

在进行大规模的纹理调用时,当纹理的缓冲空间达到一定限制时就需要释放一部分纹理,通常的办法是采用LRU算法。

假定当前的视点位置为v1,前一帧视点位置为v0,下一帧视点位置为v2。由此可以估算出在视点v1处的运动方向是(v1-v0)/‖v1-v0‖,运动的速度为‖v1-v0‖/t,其中t是从视点v0运动到视点v1所用的时间,所以在v1处视点的运动矢量为:

s=v1-v0v1-v0v1-v0t=v1-v0t=(v1-v0)f, (2)

式中,f表示在v1时刻的帧频率,于是下一视点v2的估计位置为:

v2=v1+st=v1+s/f=v1+(v1-v0)=2v1-v0。 (3)

这里假设在3个视点处有相同的帧频率,则在视点v2处的视锥体可以表示成由视点位置v2、视点方向d、视域张角w以及近截面fn和远截面ff的函数,即:

rv=rv(v2,d,w,fn,ff)。 (4)

通常情况下,在实时飞行仿真过程中后面3个变量是不变的,只有视点的位置与方向在随时间变化。在飞行仿真过程中,通常离视域范围越远的纹理被释放的可能性就越大,因此可以用纹理块与视域的距离平均距离作为影响内存释放的一个因子,可以用下式计算:

d¯=(qx-rx)2+(qx-rx)2, (5)

式中,(qx,qy),(rx,ry)分别为纹理分块与预测的下一视点处的视域体在平行于地面平面上投影的重心。

在进行纹理调度时,首先计算内存中纹理分块到视域体的平均距离,然后,对平均距离d¯超过一定阈值的内存纹理分块,使用改进的LUR算法[1],进行内存释放。改进的LUR策略的优先级由下式给出:

p=fl, (6)

式中,fq为纹理四叉树结点最近一次调用的帧序号;l务纹理四叉树结点的层数,p越小且距离视域平均距离越远的纹理结点的数据最先剔除。

3 实验结果分析

该文对地形纹理的实时绘制进行性能测试,使用的实验数据是深圳地区的DEM数据,地形表面数据的大小为7 169×4 096个数据点,数据点的实际分辨率为10 m,在硬盘中的文件总大小为112 MB。对于地形纹理数据,这里使用的是该地区经校正过的卫星图片,其大小为28 672×16 384,在硬盘中的文件大小约为1.34 GB。

图1是该算法实时帧速率与传统算法的实时帧速率比较的结果图。统计了一个给定飞行路线中500帧的数据。从图中可以看出,算法的帧速率要明显高于传统方法的结果,这是因为该算法通过矢量量化图像压缩算法及根据纹理误差范围的数据调度算法,大大减少了实时仿真过程中的系统外存与内存之间的数据调度量,同时基于视域的内存释放算法可以对纹理内存进行有效的管理,减少内存中纹理数据在磁盘和缓冲区之间反复调度,提高了算法实时仿真的效率。

4 结束语

为实现实时的大规模地形的纹理映射,该文提出了一种新的基于四叉树结构的海量数据纹理映射算法。算法对多分辨率纹理数据进行了基于金字塔结构的数据压缩存储,提出了一种有效的纹理映射误差的计算方法,提高了纹理映射的精度,并利用纹理映射误差,减少了实时调度过程中纹理数据的数据量,同时优化了内存释放算法,有效减少了纹理数据在磁盘和缓冲区之间的反复调度,从而解决了大规模地形场景重建过程中的数据调度与海量数据的纹理映射问题,在实际应用中取得了比较满意的效果。

参考文献

[1]陆雁青.海量地形数据实时绘制的技术研究[D].浙江大学博士学位论文,2003.7.

[2]BLOW J.Terrain rendering at high levels of detail[C]∥Proceedings of the Game Developers Conference 2000.California,2000:119-124.

[3]TANNER C,MIGAL C,JONES M.The clipmap:a virtualmipmap[C]∥Cohen M.ed.,Proceedings of SIGGRAPH1998.Orlando,florida.1998.New York:ACM Press,1998:415-422.

[4]黄超超,凌永顺,吕相银.地形纹理映射方法研究[J].计算机仿真,2005,22(1):209-212.

[5]LINDSTROM P,PASCUCCI V.Terrain simplificationsimplified:a general framework for view-dependent out-of-core visualization[J].IEEE Transactions on Visualization andComputer Graphics,2002,8(3):239-25.

图像纹理合成的研究应用 篇4

纹理合成是近几年计算机图形学的研究热点之一,在基于图像的真实感绘制中占据重要的地位。

在计算机图形学领域中,纹理指包含任何图形表面上的表现。但是在计算机视觉和图像处理领域中,人们对纹理的概念更倾向于一种狭义的定义,Jain认为:纹理一般指基本纹理元素即纹元的重复[1]。

纹理合成基本思想是:基于给定小样图的纹理特征,生成大面积的曲面纹理,并保证纹理结构的连续性和相似性。纹理合成的目标是,合成的新纹理在视觉上使人们觉得是用与原有纹理相同的基本过程生成的。

1常见纹理合成算法

根据表面纹理生成方法的不同,纹理合成技术可以分为3类:纹理映射,过程纹理合成,基于样图的纹理合成。在纹理合成技术中,需要解决以下2个关键问题[2,3]:首先建模,如何从给定的有限纹理样本中设计纹理生成过程,设计的过程既要能建模输入纹理的过程部分,又要能建模随机部分,合成纹理相对于给定采样在视觉上的逼真性直接决定建模的成功,其次是采样,如何开发有效的采样过程从给定模型生成新的纹理,采样过程的有效性直接决定纹理合成的计算量。

1.1 纹理映射

纹理映射是指通过对三维物体表面进行二维参数化,再将该参数值对应为纹理平面上的坐标值,从而得到相应的纹理值,即在物体表面生成了纹理图案。

1.2 过程纹理合成

针对纹理映射的不足[4],图1方法提出一种在曲面上直接生成纹理的方法,也就是过程纹理合成的方法,又称为物理仿真。这种方法可以看作是用一段代码或算法产生计算机生成的模型或效果的某些特性。

1.3 基于样图的纹理合成

基于样图的纹理合成基本思想是:基于给定小样图的纹理特征,生成大面积的曲面纹理,并保证纹理结构的连续性和相似性,如图2基于样图的纹理合成算法可分为基于点纹理合成算法和基于块纹理合成算法。基于点的合成方法每次只合成一个像素,因此需要花费大量的时间;基于块的合成方法在时间上具有一定的优越性,但如果接缝处理不好,效果往往不理想。

1.3.1 基于点匹配的方法

采用某种搜索策略在输入样本纹理中进行搜索寻找匹配点,在符合条件的点中随机选取进行填充,要一个像素点一个像素点的填充,虽然合成质量都有了很大的提高,对合成时间也有了一定的考虑,计算一个很小块的纹理仍然需要耗费数小时。

1.3.2 基于块匹配的方法

基于块拼贴的样图纹理合成方法的出现,不仅改变了逐点合成方法速度慢的缺点,大大加快了合成速度,而且利用纹理的邻域相关性得到了更好的合成效果,扩大了可处理纹理的范围,越来越成为纹理合成技术发展的方向。该方法采用随机块拼接的方法来快速合成纹理,首先将样本纹理进行重复映射,然后通过混沌变换得到合成纹理,使样本纹理中局部特征具有本质规律但视觉随机分布。纹理合成的合成速度与合成质量都有了很大的提高,但是合成带有结构性纹理时,会产生比较明显的接缝。

2纹理合成应用实例

2.1 相位相关法

在相机拍摄过程中并不能保证所得图像在同一水平视角,这就需要用一种方法将它们转换成同一水平视角。相邻两幅图像间的位移、旋转和比例的变换,可以通过对图像进行傅里叶变换的特性得到 。假设两幅图像为 f1,f2,它们的傅里叶变换分别为F1,F2,则有F1=|F1|·eij,F2 =|F2| ·ejβ,f1,f2之间的位移为(x0,y0),那么F1, F2之间的对应关系是F2(ξ,η) = ej2π(ξx0 + ηy*0)F1(ξ,η)相邻两幅图像的互能量谱Cross-power Spectrum是:

F1(ξ,η)F2(ξ,η)*|F2(ξ,η)F2(ξ,η)*|=ej2π(ξx0+ηy0)(1)

式里:F2(ξ,η)*是F2的复共轭阵;ej2π(ξx0 + ηy0)傅里叶逆变换是一个冲击函数。找出函数最大值的位置,即得到两幅图像的大致相对位移。

2.2 接缝处理

由于通过相位相关法得到的图像相对位移并不是精确的,所以在用块拼接纹理合成的方法拼接后会有一定的缝隙,通常用图像融合进行处理。图像融合是把来自不同时间或不同成像设备对同一目标检测的多幅图像数据采用某种方法进行处理,生成一幅能够有效表示出该图像的检测信息。虽说现在的很多数码摄像机都有此功能,但需要很严格的手动操作,再加上外界条件的影响,拼接出来的效果往往不是很理想。并且简单的融合技术只是淡化拼接区域的像素值,会引起接缝的模糊现象出现。这里采用给利用最优路径得到的像素点加权值的方法进行优化。

当人们从视觉角度观察图像时,每个像素对人眼和心理的刺激是不同的,人往往对图像中变化尖锐的地方反应敏感,而对图像中变化平缓的地方反应相对迟钝[5]。基于这一点,可以通过对接缝处像素增加相应的权值来进行边界处理。在这里,先选取一个窗口,窗口的大小根据边界点的位置进行变化,以保证边界点在窗口中所处位置的均衡性,假设边界点的取值范围为0 ≤Ph(图像的高度),那么窗口的选取为:

Wn×m={m=Ν/2+Ρ,ΡΝ2m=Ν,Ν2<Ρh-Ν2m=Ν2+h-Ρ,h-Ν2<Ρh(2)

在每个窗口中,边界上的点定义为P点,相对于 P点的窗口内的其他点定义为Q点,则 P,Q的颜色误差定义为:

CΡQ=(RΡ-RQ)2+(GΡ-GQ)2+(BΡ-BQ)2(3)

P,Q的距离定义为:

LΡQ=(xΡ-xQ)2+(yΡ-yQ)2(4)

据以上两公式,P点的权值可按如下公式定义:

WΡ=1+1ΝQWe×wQΡCΡQLΡQ×Y(5)

式中:N是除P点外的窗口内像素个数;Y是控制像素点的权值受周围像素影响程度的因子。当确定了接缝处像素点的权值后,可以根据权值利用如下公式对边界进行融合处理:

ΡΟUΤ=αΡin+(1-α)Ρmatch(6)

3实验结果

在台式机PC133,256 MB内存,Windows XP上使用VC 6.0实现了本文算法。其中本文算法中数值的选取如下:图像f1到图像f2的距离(x0,y0)取5 cm,边界点的取值范围为0 ≤P ≤3 cm,P点的RP,GP,BP分别为0.1,0.1,0.2,Q点的RQ,GQ,BQ分别为0.5,0.6, 0.8,P点的坐标(xP,yP)为(1,1.5),Q点的坐标为(xQ,yQ)为(3,5),N取36,Y取18,系数α取2。图3为用数码摄像机在不同方位拍摄的两幅图像本文算法进行拼接的结果,在不考虑光照等因素的情况下实验结果还是让人满意的。

4结语

文中从图像拼接的要求出发,结合纹理合成的方法,对块拼接纹理合成算法进行了改进,并将其拼接原理应用到图像拼接。实验结果表明,本方法简单实用在不要求光照条的情况下,对不同方位拍摄的图像可以实现较好的拼接。

纹理综合 篇5

当前, 仿真技术已经成为分析、研究各种复杂系统的重要工具, 它广泛用于工程领域和非工程领域, 包括军事、经济、生活等各个方面。基于仿真技术而实现的三维虚拟仿真系统因为逼真的临场环境, 主要应用在飞行培训、城市规划、设计制造、医疗卫生、军事作战仿真等方面, 能节省很多开销, 实现真人操作的效果, 达到更高的工作或训练效率。三维虚拟仿真系统的实现离不开三维虚拟仿真平台软件, 其一般过程如图1所示。

图1中, 平台选择就是要选择合适的虚拟仿真软件平台, 包括三维建模软件、虚拟仿真软件、软件开发平台、系统运行平台等。从图1中可以看出, 三维模型建模在整个系统实现中处于一个关键的地位, 三维模型的好坏直接影响着系统最终呈现的结果以及运行的效率。在众多的三维视景仿真软件中, 由MultiGen-Paradigm公司专门针对可视化仿真行业应用特点开发的实时可视化三维建模软件系统———Multigen Creator系列软件以其强大的建模功能受到广大用户的青睐。

从图1还可以看出, 实体建模是三维模型建模的重要部分。在目前众多的三维实体建模软件中, Multigen Creator由于其优秀的建模性能, 逐渐被行业所认同。它拥有针对实时应用优化的OpenFlight数据格式, 强大的多边形建模、矢量建模、大面积地形精确生成功能, 以及多种专业选项及插件, 能高效、最优化地生成实时三维 (RT3D) 数据库, 并与实时仿真软件紧密结合, 在视景仿真、模拟训练、城市仿真、交互式游戏及工程应用、科学可视化等实时仿真领域有着世界领先的地位。

纹理贴图是实体建模中极其重要的一步, 好的纹理贴图不但可以描述实体不易构造的细节特征, 而且还可以优化模型和简化模型, 即三维建模中纹理贴图是关键部分, 其目的是提高逼真度, 简化建模细节。具体来说, 纹理贴图就是将2D图形 (通常是位图) 映射到3D物体上的一种技术。当纹理较小时, 物体的表面会显得模糊或呈马赛克状, 较大的纹理可以让物体表面表现出更多细节。

目前对基于Multigen Creator的纹理贴图研究, 大体上是局部的和零散的, 结合Multigen Creator建模实践, 就纹理贴图的一般方法、纹理数据格式的选择、纹理贴图的映射方式、纹理贴图效果的预览以及三维仿真系统中的应用技巧等方面作了一些研究, 提出自己的方法, 条理清楚, 为展开基于Multigen Creator的纹理贴图的应用打下基础, 促进三维仿真系统的快速研究与实现。

2 Multigen Creator

MultiGen Crearor虚拟现实建模软件是美国MultiGenParadigm公司 (www.multigen.com) 推出的专业虚拟现实建模软件核心产品, 是一个功能强大、交互式的三维建模软件。它通过其“所见即所得” (WYSIWYG) 的建模环境可以建立高度优化的三维模型, 是所有三维建模软件中的佼佼者。MultiGen Crearor生成的OpenFlight格式的三维模型文件能够被多个专业虚拟现实开发软件包 (如VEGA、OpenGVS) 调用, 其不仅能够创建车辆、楼房等三维物体模型, 而且还可以利用数字地图文件创建三维地形模型。由于MultiGen Crearor卓越的性能, 其被广泛地应用于娱乐游戏开发、视景虚拟漫游和虚拟战场环境仿真等多个领域。

Multigen Crearor系列软件是Multigen—Paradigm公司专门针对可视化仿真行业应用特点推出的实时可视化三维建模软件系统, 它提供了分别运行于高端SGI工作站和低端PC平台的不同版本, 可以最大限度地满足不同的应用需求。在SGI工作站的SGI IRIX操作系统上运行时, Multigen软件包可以充分利用SGI工作站超强的图形功能, 最大限度地利用多个处理器的强大计算功能, 可以支持多线程和丰富的图形音频编程接口等。在PC平台下, Multigen也可以借助各种专业3D图形加速卡, 给用户提供一个“所见即所得”的交互式可视化建模软件环境, 如图2所示。

Multigen可视化建模软件包将OpenFlight格式模型数据库的层级视图无缝地与建模环境集成在一起, 使得用户可以在创建虚拟三维模型的同时关注模型数据库的结构与状态, 可以实时地对模型进行观察、检查和修改。用户还可以道接对模型数据库进行操作, 通过简单的移动和调整就可以达到优化openFlight模型数据库的目的。为了保证软件良好的可扩充性, Multigen采用了模块化的开发和销售方式, 用户可以根据实际需要选用合适的模块进行工作;主要的模块包括基本建模环境模块 (CreatorPro) 、地形建模模块 (TerrainPro) 、标准道路建模模块 (RoadTools) 等, 其中的基本建模环境模块包括有纹理贴图的工具箱, 是实现纹理贴图的基本模块, 具体的有纹理调理版 (Texture Palette) 、纹理工具箱 (Texture) 、纹理修改工具箱 (ModTexture) 。

3 Multigen Creator纹理贴图方法

3.1 一般流程

纹理贴图是在基本建模的基础上进行的, 基本建模主要是几何模型的构建、材质和灯光的设计。纹理贴图需与材质、光影相互配合, 注重综合效果。在三维的设计中, 几何模型是基础, 纹理、材质与及环境烘托是表现作品主题的重要手段。与纹理一样, 材质和光影的设定也直接影响模型的最终效果。因此, 纹理贴图中, 需充分考虑材质与光影等因素, 各种因素合理地搭配, 才能使模型更具有较高的真实性。

纹理贴图之前还需要准备好纹理。然后, 纹理导入到Creator环境中, 设置当前纹理, 这样就可以选择目标对象, 进行纹理映射了。贴图之后, 就可以在模型上看出纹理的贴图效果。所以, 纹理贴图的一般流程如图3所示。

3.2 纹理图像的准备

纹理准备即准备用于纹理贴图的图像。可以使用图像处理工具, 比如PhotoShop、Seamless Texture Creator等。使用图像编辑软件需要注意纹理图像的输出图形格式。虽然MultiGen Creator可以接受JPG、GIF、BMP、TIFF等多种常用图形格式, 可将纹理转换成JPG图形格式, 压缩模型文件, 以利于实时运行。但在实践过程中发现, 当模型纹理为JPG等格式时, 模型在Vega实时运行环境中就很难正常显示, 因此, 建议把纹理保存为OpenFilght可以接受的图形输出格式如表1所示。

当然Creator也提供了纹理处理工具, 然而功能比较简单, 对纹理编辑略显不足, 对于一些复杂纹理的处理, 效率较低。在建模过程中, 结合PhotoShop图形图像处理软件是较好的选择。这也是所有三维设计的一种普遍要求。熟练掌握平面设计对于纹理处理、材质的取舍乃至光照效果的调试都会起到很大的帮助。需要注意的是, 使用PhotoShop的时候, 建议安装rgb插件, 利于输出OpenFilght可以接受的图形输出格式。

另外, 贴图纹理的准备还需要注意:一是格式为RGB, 大小以像素为单位, 长和宽都应该是2的幂, 否则会扭曲或无法正常显示;二是要注意贴图的路径, 最好采用相对路径, 否则会导致纹理无法显示。可利用list texture工具来改变路径, 从而使模型能够找到相应的贴图;三是在编辑贴图时, 最好将同一实体所有面的贴图编辑到同一个文件中, 编辑操作点来对不同部分贴图, 可以提高运行速度。

3.3 纹理映射

纹理映射的第一步是把纹理图像导入到MultiGen Creator中。纹理导入的方法是:打开Texture Palette, 选择菜单File中的Read Pattern…, 弹出一个窗口, 如图4所示。选择要导入的纹理图像, 打开即可。在Texture Palette管理窗口中就可以看到导入的纹理了。可以从中选择一个纹理图像设置为当前的纹理图像。

纹理映射的第二步是选择准备贴纹理的几何模型对象。设置当前纹理后, 选中操作窗口中需要贴纹理的几何体 (对象、面等) 。然后选择纹理贴图工具, 如图5所示。对逐个面或对象进行贴图, 即应用纹理。如果选择了贴图后立即更新效果, 则在操作窗口中即可看到贴图后的效果。

3.4 效果预览

效果预览是检验纹理贴图效果的方法, 也是判断纹理图像制作的好坏的方法。虽然在MultiGen Creator中贴图之后, 可以观察到一般的效果了, 但是, 模型建好之后, 必定是要应用到仿真系统中的, 所以, 最终检验纹理贴图效果还需要结合相应的软件系统进行。考虑到MultiGen系列软件产品的一致性, 只要建好的模型在LynX中可以看到比较满意的贴图效果, 就可以在基于Vega等开发的仿真系统中正常显示了。

在LynX中观察纹理贴图效果的一般方法步骤如下:

(1) 打开LynX, 在Objects面板下, 新建一个Object。

(2) 为给对象Object选择一个对应的flt文件, 也就是纹理贴图后保存的三维模型数据文件, 完成后, 如图6所示。

(3) 使用LynX建立场景观察效果, 通过Vega程序运行, 观察效果, 如图7所示。

(4) 在Scenes面板下, 把刚添加的对象加入到默认场景中, 然后可以使用Scene Viewer工具查看场景效果, 如图8所示。

(5) 在Motion Models面板下, 选择合适的运动模式类型 (如Spin) 。

(6) 使用Preview菜单下Active Preview命令, 查看模型预览结果, 如图9所示。此时, 如果无法显示纹理, 请去掉已经加载的模块SensorVision。接下去就可以保存为Adf文件, 供Vega程序调用了。

4 结语

在虚拟仿真研究领域, 三维实体建模是不可或缺的部分, 没有精美可观的实体模型, 就无法获得较好的三维虚拟仿真场景, 而漂亮逼真的实体模型又是和纹理贴图技术密不可分的。作为高性能视景仿真建模软件, MultiGen CreaRor也提供了一系列可以操作的方法, 只要使用恰当, 掌握基本方法和纹理贴图流程, 注意一些技巧, 避免一些特别容易出现的问题, 就可以达到实体建模的要求, 实现一个满足视景仿真需要的三维虚拟场景, 最终完成一个虚拟现实仿真系统, 应用到学习、工作和生活之中。

当然, 纹理贴图技术是一个比较难以掌握的技术, 很多方面需要多个软件一并使用, 结合其他的建模软件, 会节省不少时间。更复杂的方法和技巧需要在实践中锻炼、摸索, 总结经验, 提高贴图技术和实践能力。

摘要:纹理贴图是三维仿真技术中实体建模部分的重要环节之一。在介绍了开发三维虚拟仿真系统的一般过程的基础上, 研究了基于MultiGen Creator的纹理贴图方法。从纹理准备、纹理映射、效果预览等3个方面, 给出了纹理贴图的具体过程, 具有较强的可操作性, 为三维虚拟仿真系统的快速研发提供了参考。

关键词:虚拟现实,三维建模,MultiGen Creator,纹理贴图

参考文献

[1]康凤举.现代仿真技术与应用[M].北京:国防工业出版社, 2003.

[2]龚卓蓉.Vega程序设计[M].北京:国防工业出版社, 2002.

[3]王乘, 周均清, 李利军.Creator可视化仿真建模技术[M].武汉:华中科技大学出版社, 2005.

纹理合成典型算法研究及应用 篇6

随着计算机技术的快速发展,数字化产品与人们的日常生活联系地越来越紧密,与此同时人们对获取的图片和图像的质量要求也越来越高。人们希望图片更加清晰逼真,虚拟场景更加真实。所有这些对计算机图形学、数字图像处理、虚拟场景生成、计算机视觉以及真实感和非真实感图形绘制等领域都提出了很高的要求。纹理能够表现出物体表面丰富的细节特征,对计算机图形绘制有着非常重要的作用,而纹理合成是一种创建新纹理的有效方法。因此,利用纹理合成生成新的纹理来丰富物体表面的细节特征便成为计算机图形学的研究热点。1950年Gi bson首次提出了纹理的概念,1974年Cat mul l发明纹理映射技术[1]。随后,纹理合成技术经过三十多年的不断完善和发展,已成为计算机成像领域不可缺少的技术。在增强三维场景真实感方面起着至关重要的作用,广泛地应用于医学、图像遥感、工业图像处理、电视电影特技等领域。目前利用基于样图的纹理合成技术可以进行纹理填充(如修补破损的图片、重现原有图片效果),纹理传输,扩展到时域还可以用一短段视频图像,生成任意长度的非重复的视频动画等。纹理合成技术在图像编辑、数据压缩、网络数据的快速传输、大规模场景的生成以及真实感和非真实感绘制等方面具有广泛的应用前景

1 纹理的定义

对于纹理目前还没有精确的定义,可以把纹理看做是图像中具有某种特殊性质的一个类别,通常认为具备了局部性和稳定性的图像就是纹理。所谓图像的稳定性是指在观察窗口大小合适的前提下,观察者看到的部分总是相似的;所谓图像的局部性是指窗口中的任一像素可以由其周围邻域内的像素预测得到,而与图像中的剩余部分无关。总的来讲,纹理图像的特征主要表现在:

(1)某种局部特征性在更大区域内的不断重复;

(2)纹元随机或有规则的组成了纹理的局部特性;

(3)整个区域是均匀的统一体。

纹理通常由图像扫描或手工绘制得到,其形式是多种多样的。根据纹理特征分布的方式不同,可以把纹理分为三类:结构性纹理、随机性纹理、既有结构性又有随机性的纹理。如图一所示,结构性纹理中存在纹元(保持纹理局部特性的最小纹理块),视觉上有明显规则的最小结构区域存在,整个纹理可以由一系列的纹元及其摆放规则决定(图一(a))。随机性纹理在视觉上没有明显的结构区域存在,找不到明确的纹元,无规律可循,分布与图像位置无关(图一(b))。更多的从现实世界得到的纹理同时包含了以上两种特性,视觉上可以分辨出有不规则形状的结构区域存在,但结构区域大小不一,且分布不均(图一(c))。

2 典型纹理合成算法

纹理合成算法主要有“像素点邻域匹配”和“纹理块拼接”两种方式。基于像素的合成方法通常采用穷尽搜索法在符合条件的匹配点中选出最匹配的像素。由于每次合成仅能完成一个像素点,合成速度较慢。基于块的纹理合成方式通过产生每个区块上的纹理能够保全全局纹理结构的特征,根据相邻纹理块的重叠区确定边界,采用动态编程方法找出重叠区域的最小误差路径即为相邻纹理块的边界,在合成质量和速度等方面都取得了较好的效果。

2.1 基于像素合成的经典算法

(1)Ef r os和Leung算法

Ef r os和Leung在1999年I CCV会议上提出了一种基于MRF模型的逐像素点合成算法[2],对结构性纹理取得了较好的效果。Ef r os和Leung算法是计算机纹理合成领域标志式的算法,纹理分析方法简单,能够很好地保持图像局部信息的完整性,对于大多数纹理都能取得好的效果。

(2)Wei和Levoy算法

Wei和Levoy提出的算法[3]是对Ef r os和Leung算法的一种改进,算法同样基于MRF模型,用L形状邻域取代了算法[2]中利用概率函数直接取样的方法,按照光栅扫描顺序逐点进行采样合成。算法采用多分辨率合成的方法降低邻域的采样范围,在保留原有纹理结构的同时加快了合成速度。此外,由于L形邻域匹配的度量跟人的视觉感知不完全吻合,当选择纹元尺寸较小的样本纹理时,输出图像会比较模糊。另外,算法采用图像金字塔对合成整体结构进行控制,不可避免地会产生负效应。当低分辨率合成出现偏差时,高分辨率合成可能会将“偏差”放大,最终导致合成失败。

(3)As hi khmi n算法

As hi khmi n算法[4]同样基于像素点进行纹理合成,根据图像局部相关性的特性,通过有效引入候选点的方式,将搜索范围设置为待合成像素邻域点对应的偏移像素。具体的讲,就是根据输出图像中当前点的L邻域中的点,找到与其匹配的输入图像中对应点的位置,然后偏移相应量后获得待选点。算法利用已合成像素的候选集合来进行待合成点的选择,匹配运算时大大减少了工作量,算法简洁,对于绝大多数的自然纹理合成都取得了好的效果。

2.2 基于纹理块合成算法

2.2.1 基于块的纹理合成的优势

(1)合成速度普遍较快。由于以像素块为单位,每次向输出图像中填充大量像素,有效减少了在样图中搜索匹配的次数。虽然像素块的邻域远大于单个像素,导致每次搜索匹配的计算量增大,但总体上基于块的合成总体计算要明显小于基于像素的合成。

(2)输出图像的大规模结构保持得相对较好。相比基于像素的合成,大块连续的像素区域中包含了大量结构信息,虽然在块边界处可能会出现纹理结构紊乱,但至少在块的内部,纹理结构信息得到了完整的保留和复制。而在基于像素的合成中,输出图像任何地方随时可能出现不连续的像素拷贝。

2.2.2 基于纹理块的合成算法

(1)Ef r os和Fr eeman算法

基于像素逐点合成的方法缺乏通用性,根据纹理局部相关性的特点我们知道在合成过程中,对于后续点的选择可以由已合成点的位置来决定。逐一匹配查找会浪费许多时间。继在1999年I CCV上发表影响较大的非参数采样的纹理合成算法后,Ef r os等在2001年的SI GGRAPH会议上提出了一种基于块拼贴的新的纹理合成算法[5]。算法通过查找最小误差路径获取纹理块的方法取得了好的合成效果。最小误差路径示意图如二所示,其中B1和B2是相邻的纹理块,红色曲线表示最小误差路径。

相对以往的算法,该算法简单且在纹理合成的速度、合成纹理的视觉效果方面都得到了很大的提高,避免了以往算法容易引起的模糊、纹元错位严重等问题。不足之处在于有时会出现纹理块重复、边界不匹配等问题。

(2)LLXGS算法

2001年,梁林等人提出了和算法[5]极为相似的块拼贴算法。算法基于MRF模型,用纹理块边界匹配原则在样本图中搜索最佳匹配块,算法同时采用四叉树金字塔、优化的KD树和主元分析来加速搜索过程,得到了实时的合成效果。

(3)Cohen等提出的算法

Cohen等提出的算法[6]引入了计算理论中的“Wang Ti l es”理论,提出了一种类似于块合成的方法。算法的合成速度和合成效果相对以往的算法有了一定的提高,可以扩展产生非均匀的纹理以及实时的三维表面渲染。由于实行合成前要做许多前期准备和复杂的参数调整,而且在合成过程中无法引入一定的约束,这使得算法的应用范围受到一定的限制。

(4)XGS算法

XGS算法[7]将样本纹理进行重复映射,通过混沌变换得到合成纹理,使用了确定性混沌领域的一个递归系统,使样本纹理中的局部特征具有本质规律但视觉随机分布。混沌变换的对象是纹理块。算法对随机纹理有好的合成效果,合成速度也很快。不足的地方是对于纹元清晰、结构性强的纹理会产生明显的接缝。

3 纹理合成在3D曲面纹理映射中的应用

在计算机图形学中,引人注目的研究方向之一是图形的真实感问题。在过去的几十年当中,人们一直在通过建立模型的方法来模拟客观世界。但由于客观世界千变万化、错综复杂,要把真实世界的各种细微结构直接用几何模型表示出来,不仅模型难以建立,而且计算量庞大,难以满足实时显示的需要。比如一张曲面可以用许多微小的多边形(或曲面片)表示其表面细节,假定每个微小多边形具有近似相同的表面特征,要显示这样一个曲面,就必须对这些微小多边形(或曲面片)进行分别处理,这将需要大量的存储空间和处理时间,人们就想象是否可以用“贴墙纸”的方法将反映物体表面细节的图案贴到物体表面,从而开辟了一个新的研究领域一纹理映射(Text ur e Mappi ng)。纹理映射就是通过将纹理模式映射到对象表面用以添加对象表面细节的方法。在计算机图形学生成系统中,纹理映射能大幅度提高图像逼真度,将丰富的纹理细节叠加到物体表面,使景物更具真实感,并且其实现代价比建模造型要小的多。

3.1 纹理图案

在纹理映射中,使用的纹理函数通常包括一维纹理、二维纹理、三维纹理和过程纹理,而纹理又可以定义成线性纹理图案、表面纹理图案和体纹理图案[8]。

(1)线性纹理图案

线性纹理图案可以用颜色值的单足码数组指定,用来定义线性纹理空间的一系列颜色。这组颜色或任一连续的颜色子集,可以用来形成穿越一个多边形的图案条纹、围住圆柱的图案带或显示一条孤立线段的颜色图案。

(2)表面纹理图案

用于表面区域的纹理通常用矩形颜色图案定义,纹理空间的位置用二维坐标值来指定。纹理图案中每一颜色的描述可存储在一个三足码数组中。

(3)体纹理图案

除了线性和表面图案之外,我们还可以为空间三维区域的位置指定一组颜色,这些纹理称为体纹理图案。体纹理图案通过三维纹理空间来指定。一个体纹理图案可用一个四足码数组来存储,其中最前面三个足码给出行位置、列位置和深度位置,第四个足码用来指向图案中的特定颜色。

为了将整个纹理空间映射到一个三维块,将该纹理空间的八个角的坐标赋给场景的空间位置,或者将纹理空间的一个平面部分映射到场景中的一个平面区域。另外,体纹理图案可以提供内部视图,使三维对象的显示中带有纹理图案。这样,砖块、炉渣或木头材料便可以有相同的纹理图案应用于对象的所有空间范围中。

3.2 曲面纹理映射

纹理映射技术可以对三维物体的几何形状及细节进行丰富的表达,在真实感场景和立体表面纹理的形成等场合,都需要将平面图像映射到立体曲面上。常见的有平面到立方体表面、平面到柱面及平面到球面等映射。

3.3 纹理合成在曲面纹理映射的应用

在计算机图形学中可以运用纹理映射将纹理图案映射到3D模型的表面,这些3D模型通常是表示真实世界或虚拟的场景。通过纹理映射的方法,可以添加物体表面的细节,有效提高真实感,达到模拟现实世界的目的。纹理图通过简单的仿射变换,正交映射到模型表面。相关的技术有:纹理分片(Text ur e Ti l i ng)、单元纹理、贴图、反射图环境映射等。然而由于受到输入纹理图像单一性的限制,通过纹理映射技术将一幅程序图像或实际图像映射到三维场景有时并不能有效地提高图像的真实感效果。为了提高纹理映射在计算机艺术造型、计算机制作、三维游戏、计算机娱乐和广告动画设计等领域的真实感效果,必须要解决输入图像单一的问题。受纹理合成思想的启发,文章提出了将纹理合成技术运用到纹理映射中的思想。即运用纹理合成的办法对输入样本图像按照映射要求先做预处理,生成符合场景需要的纹理图像后,再通过纹理映射技术完成在3D物体表面贴上纹理图像使计算机产生的图像更具真实感效果。在基于多样图的纹理合成领域,我们可以对多种自然纹理图像按照用户要求的比例进行混合输出新的纹理图像。把这些通过纹理混合、纹理传输、多样图纹理合成生成的图像映射到3D曲面产生新的视觉效果。单样图纹理合成应用于纹理映射的实验效果如图三所示,其中(a)是样本纹理,(b)是合成纹理,(c)是映射曲面,(d)是映射效果。

4 结束语

纹理合成不仅可以通过样本纹理得到任意大小的同种纹理,满足纹理映射的需要。还可以应用于纹理填充、纹理增长、纹理传输、图像/视频压缩、纹理映射等方面。基于用户控制的多样图纹理合成是纹理合成的发展方向,在计算机视觉、图形图像处理以及虚拟现实技术等领域有着广泛的应用。

参考文献

[1]E.Catmull.Subdivision Algorithm for Computer Display of Curved surfaces[D].Ph.D Thesis,Dept.of Computer Science,Univ.of Utah,Salt Lake City,1974.

[2]A.A.Efros and T.K.Leung.Texture Synthesis by Non-parametric Sampling[C].IEEE International Conference on Computer Vision,1999:1033-1038.

[3]L.-Y.Wei and M.Levoy.Fast Texture Synthesis Using Tree-Structured Vector Quantization[C].Proceedings of the27th annual conference on Computer graphics and interactive tech-niques.2000:479-488.

[4]M.Ashikhmin.Synthesizing natural textures[C].Proceed-ings of the2001symposium on Interactive3D graphics.2001,3:217-226.

[5]A.A.Efros and W.T.Freeman.Image Quilting for texture synthesisand transfer[C].Proceedings of the28th annual confer-ence on Computer graphics and interactive techniques.2001:341-346.

[6]Michael F.Cohen,Jonathan Shade exc.Wang Tiles for im-age and texture generation[C].ACM Transactions on Graphics.2003,22(3):287-294.

[7]Y.Xu,B.Guo,and H.-Y.Shum.Chaos mosaic:Fast and memory efficient texture synthesis[R],Tech Rep MSRTR-2000-32.Beijing:Microsoft Research Asia,2000.

基于OpenGL的纹理贴图技术 篇7

OpenGL图形库除了提供基本的点、线、多边形的绘制函数外, 还提供了复杂的三维物体 (球、锥、多面体、茶壶等) 以及复杂曲线和曲面绘制函数, 能够利用OpenGL函数库实现各种三维物体的绘制, 为实现三维物体的真实模拟必须引入纹理贴图技术, 以便增强三维场景绘制的真实感, 并能提高三维场景的渲染速度。本文将着重介绍以C语言和OpenGL相结合以实现三维物体的纹理贴图过程, 讲述OpenGL纹理贴图的基本步骤以及相关技术要点。

1 纹理贴图

1.1 载入纹理

将纹理贴图应用到几何图形的第一个必要步骤就是将纹理载入到内存之中。已经载入之后, 这个纹理就成为当前的纹理状态的一部分。

载入纹理的函数有3种, 分别对应于一维、二维和三维纹理, 如下:

(1) 一维纹理定义函数。void glTexImage1D (GLenum target, GLint level, GLint components, GLsizei width, GLint border, GLenum format, GLenum type, const GL-void*pixels) ;

(2) 二维纹理定义函数。void glTexImage2D (GLenum target, GLint level, GLint components, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum

(3) 三维纹理定义函数。void glTexImage3D (GLe-num target, GLint level, GLint components, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid*pixels) ;

函数参数说明:

上述3个函数实际上只是同1个根函数glTextImage的不同类型, OpenGL支持一维、二维和三维的纹理贴图, 使用对应的函数来载入纹理, 并将其作为当前纹理。使用上述函数时, OpenGL从data参数所指向的位置复制纹理信息。

3个函数的target参数分别是GL TEXTURE 1D、GL TEXTURE 2D或GL TEXTURE 3D。

Level参数指定了这些函数所载入的mipmap层。对于非mipmap的纹理, 这个参数设置为0。

Information参数告诉OpenGL希望在每个纹理单元中存储多少颜色成分。

Width、height和depth参数指定了被载入纹理的宽度、高度和深度。这些值必须是2的整数次方。

Border参数允许为纹理贴图指定一个边界宽度。

Format和type参数描述了纹理图像数据的格式和数据类型。

1.2 纹理对象

纹理对象是用来存储纹理数据的, 以备随时使用。创建了纹理对象, 就能够将多个纹理一次性载入内存, 以便场景绘制期间随时引用其中的任何一个纹理。

1.2.1 纹理名字的生成

使用纹理对象, 首先需要生成纹理名称。纹理名可以是一个非0的无符号整数, 为确保不重复使用同一个纹理名, 可以调用glGenTextures () 函数:

Void glGenTextures (GLsizei n, GLuint*textureNames) ;

参数n指定了将有多少个纹理名被生成并存入textureNames数组中。

1.2.2 纹理对象的创建和使用

生成纹理名之后还必须将纹理名“绑定”到纹理数据上, 可以调用glBindTexture () 函数来实现此项任务:

Void glBindTexture (GLenum target, GLuint textureName) 。

Target参数取值可以为GL TEXTURE 1D、GLTEXTURE 2D或者GL TEXTURE 3D, textureName参数为需要绑定的纹理名。当第一次调用此函数时, 将会生成一个新的纹理对象, 其具有默认的纹理图像和纹理属性。在初始化绑定之后所调用的任何OpenGL纹理函数都会改变默认值并将新值存储到该纹理对象中。当一个纹理对象被绑定到其数据上之后, 可以再次调用glBindT-exture () 函数来将此纹理对象设置为当前的纹理状态。

1.3 纹理过滤

根据一个拉伸或收缩的纹理贴图计算颜色片段的过程称为纹理过滤。使用OpenGL的纹理参数函数, 可以设置放大和缩小过滤器。这两种过滤器的参数名分别是GL TEXTURE MAG FILTER和GL TEXTURE MIN FILTER。可以为这两种过滤器参数选择两种基本的纹理过滤器GL NEAREST和GL LINEAR, 它们分别对应于最邻近过滤和线性过滤。最邻近过滤是最简单和最快速的过滤方法。纹理坐标总是根据纹理单元进行计算和测量。无论纹理坐标落入哪个纹理单元, 这个纹理单元的颜色就作为这个片段的纹理颜色。可以使用下面函数为放大和缩小过滤器设置纹理过滤器:

线性过滤并不是把最邻近的纹理单元取到纹理坐标中, 而是把这个纹理坐标周围的纹理单元的加权平均值应用到这个纹理坐标上。为放大和缩小过滤器设置线性过滤的函数如下:

1.4 纹理模式

OpenGL允许通过纹理模式来指定如何对纹理图颜色进行处理。对于每个纹理, 可以调用glTexEnvi () 函数来从4个纹理模式中进行选择:

Target参数必须等于GL TEXTURE ENV, 同时也必须将pname参数值设为GL TEXTURE ENV MODE, 告诉OpenGL将指定纹理如何与帧缓存中的颜色进行混合。Param参数可以设为表1中所列出的任何一个值。

1.5 纹理坐标

1.5.1 指定纹理坐标

当绘制场景时, 必须为每一个顶点指定相应的纹理坐标。纹理坐标用于确定纹理图的每一个texel对应于物体的那个部分。纹理坐标被指定为浮点值, 范围从0.0至1.0。纹理坐标被命名为s、t、r和q (类似于顶点坐标x、y、z和w) , 支持从一维至三维的纹理坐标。Q坐标对应于几何图形的w坐标。是一个缩放因子, 作用于其余纹理坐标。使用glTexCoord () 函数指定一个纹理坐标, 有3种形式:

纹理坐标使用上述函数应用到几何物体的每个顶点, 然后OpenGL根据需要对纹理进行扩大或收缩, 将纹理贴图到几何图形之上。

1.5.2 纹理坐标的重复和夹持

尽管纹理坐标的取值范围通常为0.0至1.0, 但是也可以被赋予此范围之外的值。这会导致纹理的平铺和夹持处理。当指定了0~1范围之外的纹理坐标时, 可以告诉OpenGL对于纹理图或者重复其纹理坐标或者夹持其纹理坐标。当重复纹理坐标时, 如果将纹理坐标设置为 (2.0, 1.0) , 则纹理将会在s方向上被重复两次, 在t方向上纹理将保持其正常状态。

当对OpenGL进行夹持处理时, 则是将所有大于1.0的纹理坐标设为1.0, 并将小于0.0的纹理坐标都设置为0.0。

可以调用glTexParameter () 函数通知OpenGL是进行重复处理还是夹持处理。

参数target可以为GL TEXTURE 1D、GL TEX-TURE 2D或GL TEXTURE 3D, 对于二维纹理, pname参数应为GL TEXTURE WRAP S或者GL TEXTURE WRAP T, 分别用来指s方向和t方向。Param参数可以为GL REPEAT或者GL CLAMP, 分别用以指定重复纹理处理或夹持纹理处理。

OpenGL可以在一个方向上进行夹持纹理处理而同时在另外一个方向上进行重复纹理处理。下面的代码用以在s方向上进行重复纹理而在t方向上进行夹持纹理处理:

2 Mip贴图

绘制一个纹理物体, 当其靠近或者远离视点时, 会出现一些视觉失真或问题区域, 原因主要是由于OpenGL试图对移动的纹理进行补偿, 而正在将纹理过滤处理为适合相应物体的大小。可以使用mipmap来控制纹理的细节层次, 以便消除这些失真。当OpenGL进行mipmap纹理映射时, 将根据物体的分辨率决定该使用哪一个纹理图像。当物体靠近视点时, 它将在屏幕上占据更多的像素, 拥有更高的分辨率, 应该使用更大的纹理图。当物体距离视点较远时, 则在屏幕上占据较少的像素, 分辨率较低, 就该使用较小的纹理图。

使用mipmap纹理时, 必须确保以GL TEXTURE MIN FILTER参数为缩小过滤处理设置适当的值, 如表2所示。

GLU函数库提供了一组能够自动生成mipmap的函数。对于二维纹理, 可以调用gluBuild2DMipmaps () 函数来代替常规纹理情况下对geTexImage2D () 函数的调用, 函数定义形式如下:

此函数会在其内部调用glTexImage2D () 函数, 从而自动生成一系列mipmap纹理图, 将主纹理传递给此函数, mipmap纹理就会被自动生成。

3 结束语

纹理贴图是OpenGL开发过程中非常重要的环节之一。本文主要介绍了OpenGL纹理贴图的基础技术, 包含纹理的定义、纹理过滤、纹理模式以及纹理坐标的设置, 还简要介绍了Mip贴图的原理及使用方法, 对系统掌握OpenGL纹理贴图技术具有一定的意义。

参考文献

[1]Richard S.Wright, Jr.Benjamin Lipchak.OpenGL超级宝典 (第三版) [M].北京:人民邮电出版社, 2005.

[2]唐荣锡, 汪嘉业.彭群生, 等.计算机图形学教程 (修订版) [M].北京:科学出版社, 2000.

[3]Dave Astle, Kevin Hawkins.OpenGL游戏编程 (第一版) [M].重庆:重庆大学出版社, 2006.

上一篇:项目经济效益下一篇:上市过程