基于GLSL的多重视频纹理映射与融合
2014-12-23简洪登范湘涛
简洪登,范湘涛
(1.中国科学院 遥感与数字地球研究所 数字地球重点实验室,北京100094;2.中国科学院大学,北京100049)
0 引 言
实时视频与三维场景融合技术在大范围增强虚拟环境(augmented virtual environment,AVE)[1-3]的构建、真实感环境模拟以及三维视频监控等方面发挥着重要作用。通过软件解码的方式将传感器网络获取的实时视频流读入到三维仿真系统中,然后运用投影纹理映射技术 (projective texture mapping)[4]将其作为纹理投影到三维模型上,从而构建一个真实感强的三维虚拟场景。然而,直接使用投影纹理映射技术将视频映射到三维模型上会出现反向投影、纹理拉伸等现象,严重影响增强虚拟环境的真实感和可视化效果。Cass Everitt[5]在阐述投影纹理映射技术时讨论了反向投影现象的产生并简单分析了原因。Ulrich Neumann和Ismail Oner Sebe等[1,6]在运用增强虚拟环境进行三维视频监控的过程中发现,以摄像机视角观察场景能获得很好的效果,但以其它视角观察场景会出现明显的纹理拉伸现象。另外,为了获取大范围的实时场景,需要将多路实时视频同时映射到三维模型上,但由于不同摄像机获取的视频清晰度、色彩明暗程度不一,当视频流之间存在重叠区域时,纹理映射之后会出现明显的拼缝现象[7,8],需要对投影后的视频纹理进行进一步的融合处理。
OpenGL着色语言 (OpenGL shading language,GLSL)是一种用于OpenGL 的高级过程着色语言[9],它采用类似C语言的词法和语法结构,数据类型丰富,大量内置的函数组提供了实现着色算法所需要的许多功能[10],能够在OpenGL的渲染管线中对顶点和片元进行自定义处理以达到满意的效果。本文首先介绍投影纹理映射的基本原理,并针对反向投影、纹理拉伸等现象,运用GLSL 进行相应的算法改进,然后在片元着色器中增加了自定义的图像融合算法对视频重叠区域进行处理,从而构建大范围的、色彩均衡的增强虚拟环境。
1 投影纹理映射原理
三维场景中模型的纹理生成方式通常有两种:一是通过软件或程序直接为模型的顶点指定相应纹理坐标,从而使纹理映射到模型表面;二是通过视点矩阵、投影矩阵等参数的设置来自动生成纹理坐标。投影纹理映射是自动生成纹理坐标的一种方式,最早由Segal等于1992年提出[4],用于将纹理映射到物体上,就像使用投影仪将幻灯片投影到墙上一样[5]。这种纹理映射的方式不需要指定纹理坐标,只需通过视点矩阵和投影矩阵等参数的设置来实现纹理坐标和顶点坐标的实时对应。
在计算投影纹理映射坐标时,首先将顶点从模型坐标系转换到场景的相机坐标系中,然后转换到世界坐标系,之后将世界坐标系坐标转换到以投影点为中心的投影坐标系,再转换到投影裁剪坐标系,最后将获得的投影顶点坐标归一化到 [0,1]空间中,得到投影纹理坐标[11],流程如图1所示。
图1 计算投影纹理映射坐标流程
用公式表示投影纹理映射坐标计算过程,即为
式中(vx,vy,vz,vw)T表示顶点在物体坐标系下的坐标,(s,t,r,q)T表示纹理坐标,Vw表示顶点在世界坐标系下的坐标,它是将顶点从相机坐标系向投影坐标系转换的纽带,Mmv表示场景相机的模型视图变换矩阵,Minv表示相机视图矩阵的逆矩阵,Mpv表示投影视图变换矩阵,Pp表示投影变换矩阵,N 表示归一化矩阵,其值为
在GLSL的顶点着色器中,顶点的物体坐标(vx,vy,vz,vw)T和相机的模型视图矩阵Mmv可分别由gl_Vertex和gl_ModelViewMatrix 表示[12],Minv、Mpv、Pp等参数需要程序以 “一致性变量”的形式传入着色器。顶点着色器计算完纹理坐标后,通过内置的易变变量gl_TexCoord[i](i表示纹理通道编号)传入片元着色器进行纹理查询和颜色计算。
2 投影纹理映射方法改进
2.1 反向投影剔除
图2 反向投影处理流程
2.2 深度测试
图3 反向投影错误及修正
传感器网络中的摄像机获取的视频流是一幅幅连续的二维图像,没有深度信息,并且在摄像机视域内,较远的物体会被较近的物体遮挡,即只有具有较小深度值的物体的纹理才能反映在视频图像上。然而在使用投影纹理映射技术进行视频纹理的投影时,由于在进行纹理查询过程中没有考虑场景深度的影响,所有处于虚拟投影机视域内的模型都会被投影上相应的纹理,深度值较大的物体不应该有视频纹理,却会被投影上错误的纹理。因此在对视频进行投影映射之前,需要确定哪些三维模型的表面应该有纹理,哪些三维模型的表面应该被忽略[13,14]。由于涉及到场景深度的问题,我们可以在GLSL 中进行深度测试,过滤掉不符合条件的纹理映射,具体步骤如下:
(1)获取深度图。深度图保存了场景中各点相对于摄像机的距离,如果场景中某个点被较近的点所遮挡,那么深度图中只保存较近点的深度值。要获取场景的深度图,首先在投影机的位置上设置一台虚拟的相机 (即深度相机),深度相机的各个参数 (坐标、方向、近裁面和远裁面的距离、视场角、图像长宽比等)与投影纹理映射中的虚拟投影机的参数相同,然后以相机为中心渲染整个场景,获取场景的深度信息,并将其与一个二维纹理对象相关联。
(2)将深度图传入片元着色器。将二维纹理作为sampler2D 类型的一致性变量传入片元着色器,以备深度测试使用。如果现实中摄像机的位置和方向不发生变化,获取的视频图像的背景也相对不变,深度图也不需要更新。如果摄像机视域内的场景发生了变化,则使用深度相机重新获取并更新深度图。
(3)深度测试。在片元着色器中进行视频纹理查询前,判断当前纹理坐标对应的实际深度值 (curDepth)是否大于深度图上对应的像素值 (depth),如果大于则跳过此次视频纹理的查询阶段。当前纹理坐标对应的实际深度值可由式 (4)进行计算
在实际计算中,考虑到计算机保存深度图时的舍入误差和计算误差,我们可以设定一个较小的阈值Δd,将curDepth >depth+Δd作为纹理查询的过滤条件,以保证应该有视频纹理的模型表面都被投影上视频纹理。运用GLSL进行投影纹理映射的深度测试的过程如图4所示。对投影纹理进行深度测试前后的对比效果将在实验结果中加以详述。
3 多重视频纹理融合
图4 深度测试流程
为了能够在虚拟三维场景中浏览大范围的现实场景,需要将多路实时视频同时投影在三维模型上。在进行多路视频纹理映射时,首先为每路视频赋一个纹理通道,然后按照纹理通道的编号从小到大依次进行纹理渲染。如果相邻的两路视频存在重叠区域且投影后没做任何融合处理,那么通道较大的视频纹理会直接将重叠部分的视频纹理覆盖掉,从而产生明显的拼缝,因此在进行视频纹理映射的同时,还要对视频纹理之间的重叠区域进行融合,使大范围的视频纹理相协调、纹理间过渡更加平滑。
在通常的图像处理中,我们在任何时候都可以轻易地获取某个坐标对应的像素值、重叠区域的坐标范围,而运用GLSL对纹理进行融合有很多不同之处:首先,GLSL在每帧的渲染中实时计算每个顶点的纹理坐标并进行颜色计算,如果在计算当前顶点对应的纹理坐标的颜色时需要用到其它点的颜色值作为参考,则必须根据当前的纹理坐标进行推算,无法直接得到;其次,每张纹理的有效坐标都是 [0,1],由于不同纹理图像的大小、方向等可能各不相同,对应到模型表面的大小、坐标朝向、坐标分量增长方向也不尽相同,纹理坐标系的差异给纹理坐标的定位和颜色的融合带来了很多困难。此外,不同纹理的上下左右位置关系也会对融合算法造成影响,在算法设计时需要进行分类讨论。在多重视频纹理的融合中,各个摄像机的视域大小相近、视频图像的大小相同,对应到模型表面的纹理大小也近似相同,因此在融合过程中需要着重考虑纹理坐标系方向和纹理位置关系对纹理融合造成的影响。
由于GLSL在每帧的渲染中都需要实时计算每个顶点的纹理坐标、计算并融合多个纹理通道的片元颜色,因此纹理融合的算法应该尽量简单高效。针对纹理的位置关系和算法要求,本文提出了两种基于GLSL 的纹理融合算法:横向加权融合算法和对角加权融合算法。
3.1 横向加权融合算法
横向加权融合指的是在GLSL片元着色器中沿纹理的s坐标方向对纹理重叠区域进行加权融合,核心思想与数字图像处理中的渐入渐出融合[15]类似,其步骤为:①根据当前顶点对应的不同通道的纹理坐标推算纹理重叠区域的横向最大距离Smax;②根据当前通道的纹理坐标和Smax计算当前通道的纹理值的权重α;③计算将当前通道的纹理进行融合后的片元颜色值,然后将其传入下一个纹理通道。假设当前通道为2,纹理坐标为(s2,t2),对应的纹理值为color2,上一个纹理通道 (通道1)的纹理坐标为(s1,t1),经通道1融合后的片元颜色值为color1,经过通道2 融合后的片元颜色值为color,则有
横向加权融合算法计算简单,对t坐标相同或色彩相差不大的纹理具有很好的融合效果 (如图5 (a)所示,测试图片为两幅颜色和纹理特征均有较大差异的草地图片),但对于t坐标有较大差异的纹理,在纵向的拼接处会有明显的拼缝 (如图5 (b)所示)。
3.2 对角加权融合算法
对角加权融合指的是在纹理重叠区域沿对角方向进行加权融合,如图6所示,纹理通道2在上,其权值沿向量的方向逐渐增加,通道1的权值逐渐减小。对角加权融合算法的步骤为:①根据当前顶点对应的不同通道的纹理坐标推算纹理重叠区域的横向最大距离Smax和纵向最大距离Tmax;②建立局部坐标系,根据直线BD 的斜率得到当前纹理坐标所在的直线方程;③计算当前通道的权重α;④计算将当前通道的纹理进行融合后的片元颜色值,然后将其传入下一个纹理通道。
图5 横向加权平均算法融合效果及不足
图6 对角加权算法原理
将F 的坐标带入直线EF 方程可求得m,然后求得当前通道的权值为
根据式 (7)计算经过当前通道的纹理融合后的片元颜色值,然后将其传入下一个纹理通道继续进行融合。根据纹理之间的位置关系,式 (10)列举了不同情况下的权值,可将其直接应用于片元着色器中,省略中间的推理步骤,提高片元着色器的效率
4 实验结果与分析
为了验证投影纹理映射方法的改进效果和多重视频纹理融合效果,本文使用建筑结构较为复杂的室内场景作为试验场地,程序测试所用的计算机为普通配置的计算机(处理器:Inter Core2 Quad Q8400;内存:4 GB;显卡:NVIDIA GT240,显存:1GB)。使用本文所论述的反向投影处理算法、深度测试算法和纹理融合算法对多重投影纹理进行处理的前后结果如图7至图9所示 (对反向投影错误的处理只需在GLSL 中加入简单的判断即可,这此处不再予以显示)。图7表示的是直接使用投影纹理映射算法的结果,其中A 指的是原本透明的玻璃变得不透明;B 指的是两幅视频纹理的连接处,由于两幅纹理存在一定的色彩差异,未经处理的视频连接处有很明显的拼缝;C 指的是错误的投影纹理,因为在摄像机视域中这几处模型的位置靠后,深度值较大,它们会被前面的模型遮挡住,摄像机只会获取到前面模型的纹理。实验过程中进行了视频纹理的反向投影剔除和深度测试,并采用对角加权算法对多重视频纹理进行融合。图8是经算法处理后的结果,玻璃变得透明,视频纹理的连接处变得很平滑,错误的投影纹理被深度测试算法剔除掉,显示的是模型本身的纹理。图9表示的是使用3路实时视频与三维模型融合后的场景,视频重叠区域色彩过渡比较平滑,整体融合效果较好。
图7 直接使用投影纹理映射算法的结果
图8 经算法处理后的结果
图9 三路视频与模型融合后的场景
为了测试使用GLSL 进行多重视频纹理融合对渲染效率的影响,本文对比了不同场景下、不同数量的静止图片(JPG 格式)和实时视频的渲染结果 (见表1),用于测试的模型三角面数分别为34万、102万和204万,显卡内存为1GB。
表1 不同纹理类型渲染效率/fps
从渲染结果中可以看出,在场景三角面数相同的情况下,使用实时视频作为投影纹理与使用静止图片的渲染效率相差不多;随着投影纹理数目的增加,场景的帧率会稍有下降;随着场景三角面数的增多,场景帧率有所下降,且使用实时视频作为投影纹理的帧率比使用静止图片的帧率下降稍快,但场景依然能保持较高的帧率 (大于40fps)。
实验结果分析如下:使用实时视频作为投影纹理时,程序使用多线程的方式对码流进行解码,完成一帧的解码工作后,将解码后的图像作为纹理投影到三维模型上,这个过程比直接使用静止图像作为投影纹理的过程多了解码和纹理替换的步骤,所以帧率会偏低;随着场景三角面数的增加,对系统资源的需求也增加,场景帧率的差异也将变大 (由不足一帧变化到3-5帧)。另外,将自定义的算法加入到GLSL的片元着色其中对场景进行渲染也会增加系统负担。总体来讲,将GLSL 应用于多重视频纹理与三维模型的融合能达到很好的效果,并且不会影响三维场景的实时流畅显示。
5 结束语
本文针对构建增强虚拟环境的需求和投影纹理映射算法的不足,实现了基于GLSL 的反向投影的修正算法和深度测试算法,提出并实现了基于GLSL 的多重纹理横向加权融合算法和对角加权融合算法。实验结果表明,使用本文所论述的多重视频纹理的投影和融合算法能达到很好的实时视频与三维场景融合效果,各路视频投影正确,视频重叠区域色彩过渡比较平滑,同时能够在显存为1GB的计算机上使包含200万三角面和6路实时视频的三维场景的运行帧率保持在40fps以上,不会影响三维场景的实时流畅显示,适用于基于实时视频的增强虚拟环境构建。然而,视频与三维场景的融合对虚拟场景的真实度要求较高,当虚拟场景与现实场景差别较大,或现实场景发生变化特别是出现运动前景时,虚拟场景的模型无法实时更新,会出现纹理投影错误、运动前景扭曲并投影到背景模型上等现象,需要将运动前景从视频中分割出来,并制作成三维模型插入到场景中的正确位置上,这些问题的高效解决还有待进一步研究。
[1]Ulrich Neumann,You Suya,Hu Jinhui,et al.Augmented virtual environments:Dynamic fusion of imagery and 3D models[C]//Proceedings Virtual Reality.IEEE,2003,61-67.
[2]Ulrich Neumann,You Suya.Modeling and video projection for augmented virtual environments [P].US:US00583275B2,2009-09-01.
[3]LIU Qifang,ZHAO Gang,HE Bin.Moving target retrieval method based on track constraint for AVE surveillance system[J].Computer Engineering and Design,2012,33 (9):3475-3480 (in Chinese).[刘启芳,赵刚,何彬.AVE 监控系统中基于轨迹约束的目标检索方法 [J].计算机工程与设计,2012,33 (9):3475-3480.]
[4]Mark Segal,Carl Korobkin,Rolf van Widenfelt,et al.Fast shadows and lighting effects using texture mapping [C]//SIGGRAPH Proceedings of the 19th Annual Conference on Computer Graphics and Interactive Techniques,1992:249-252.
[5]Cass Everitt.Projective texture mapping [EB/OL].https://developer.nvidia.com/sites/default/files/akamai/gamedev/docs/projective_texture_mapping.pdf,2001/2013.
[6]Ismail Oner Sebe,Hu Jinhui,You,et al.3Dvideo surveillance with augmented virtual environments [C]//First ACM SIGMM International Workshop on Video Surveillance,2003:107-112.
[7]Jeferson R Silva,Thiago T Santos,Carlos H Morimoto.Automatic camera control in virtual environments augmented using multiple sparse videos[J].Computers &Graphics,2011,35(2):412-421.
[8]MA Yuanye,ZHAO Gang,HE Bin.Design and implementation of a fused system with 3DGIS and multiple-videos [J].Computer Applications and Software,2012,29 (6):109-112(in Chinese).[马原野,赵刚,何彬.3DGIS与多视频融合系统的设计与实现 [J].计算机应用与软件,2012,29 (6):109-112.]
[9]Randi J Rost,Bill M Licea-Kane,Dan Ginsburg,et al.Open-GL shading language [M].3rd ed.Boston:Addison Wesley Professional,2009.
[10]CHEN Jixuan,WANG Yigang.GLSL shader edting environment based on OSG [J].Computer Systems & Applications,2011,20 (3):153-156 (in Chinese).[陈继选,王毅刚.基于OSG 的GLSL 着色器编译环境 [J].计算机系统应用,2011,20 (3):153-156.]
[11]QIU Feiyue,ZHAO Bole,ZHANG Weize,et al.Research of spherical inclined projection correction method based on projective texture mapping and its application [J].Chinese Journal of Biomedical Engineering,2012,31 (5):697-703 (in Chinese).[邱飞岳,赵柏乐,张维泽,等.基于投影纹理映射的球面斜投影校正方法研究及其应用 [J].中国生物医学工程学报,2012,31 (5):697-703.]
[12]Dave Shreiner,The Khronos OpenGL ARB Working Group.OpenGL programming guide [M].7th ed.LI Jun,XU Bo,transl.Beijing:China Machine Press,2011 (in Chinese).[Dave Shreiner,The Khronos OpenGL ARB Working Group.OpenGL编程指南 [M].7 版.李军,徐波,译.北京:机械工业出版社,2011.]
[13]Milosavljevi c'A,Dimitrijevi c'A,Ran cˇi c'D.GIS-augmented video surveillance [J].International Journal of Geographical Information Science,2010,24 (9):1415-1433.
[14]ZHAO Kai,QUAN Chunlai,AI Fei,et al.Rending of live video on 3D model[J].Computer Engineering and Design,2009,30 (22):5221-5224 (in Chinese). [赵凯,全春来,艾飞,等.视频图像在三维模型中的渲染 [J].计算机工程与设计,2009,30 (22):5221-5224.]
[15]RUAN Qin.Research on video image stitching technique in real-time system [D].Wuhan:Huazhong University of Science and Technology,2011 (in Chinese).[阮芹.实时视频拼接系统关键技术研究 [D].武汉:华中科技大学,2011.]