APP下载

一种用于图形设备接口的笔画模型方法

2012-07-02黄东运雷欢卢杏坚

自动化与信息工程 2012年4期
关键词:数字图像复杂度顶点

黄东运 雷欢 卢杏坚

(广东省自动化研究所)

一种用于图形设备接口的笔画模型方法

黄东运 雷欢 卢杏坚

(广东省自动化研究所)

视频监控的在屏交互过程中,需要快速地对交互控件、感兴趣区域、活动标记等图形和图像进行绘制,为避免画面的停滞感,要求图形设备接口能快速进行绘制。为此,提出了一种笔画模型方法。利用DirectX的原始绘制能力,该方法将绘制任务转换成笔画对象,使视频系统在实时运行过程中,只需将已转换的笔画对象的绘制数据提交给DirectX进行渲染和显示即可,降低重复绘制时间,满足系统的快速绘制要求。基于笔画模型方法,开发了一种可快速绘制的图形设备接口。

笔画模型;原子绘制;二维;三维;DirectX;图形设备接口

0 引言

随着计算机技术的发展,传统的视频监控系统慢慢退出市场,新的网络型、智能型、交互型、高清型的视频监控系统得到快速发展。可交互型的视频监控系统在视频窗口绘制多种交互控件、感兴趣区域(Region of Interest,ROI)、活动标记的同时,也要求及时响应用户的外部请求。高清晰度电视使用的数字图像分辨率最高可达1920×1080像素,帧率高达60 f/s,非压缩的彩色图像帧几乎占用6兆的存储空间。视频系统每秒需要绘制大量图像,并在视频窗口或全屏显示的视频区域内进行交互(简称在屏交互),对此传统的图形设备接口(Graphics Device Interface,GDI)无法满足绘制要求。

为更好地提高绘制速度,除了使用性能更高的硬件配置外,在Windows操作系统中,视频监控系统直接调用DirectX提供的应用编程接口进行图像和图形绘制或使用WPF提供的应用编程接口进行绘制。DirectX是微软为了解决大型游戏系统大量图像和图形绘制的需求提出和发展而来的。DirectX9应用编程接口封装完全针对3D图像或图形的绘制,对于大部分情况下使用2D图像或图形绘制的视频监控系统来说,直接使用比较困难,需要大量的编程。WPF是微软最新发布的GDI,在DirectX的基础上开发,对DirectX提供的函数和机制进行了进一步封装。WPF的使用需要庞大的.net框架支持,且对开发系统和环境要求比较高[1]。

本文提出一种笔画模型方法,该方法利用DirectX提供的原始绘制和纹理渲染功能,实现视频窗口快速绘制,可以满足大分辨率数字图像和大帧率播放的视频窗口绘制任务的要求,为视频监控系统提供一种易用、开发环境和应用环境要求较低、功能强大的图形和图像绘制模块。与此同时开发出一种基于笔画模型的图形设备接口(Stroke Modeling Based Graphics Device Interface,SM-GDI),以该模块为例描述笔画模型的方法、原理和使用方式。

1 视频监控系统的绘制过程

图像设备接口的主要功能是对各种几何图形,如直线、圆、椭圆、矩形以及文字和数字图像在窗口或屏幕上进行绘制。视频监控的视频窗口中图像和图形绘制一般包括两个部分:① 背景图像帧的绘制,即当前采集到的数字图像;② 前景图形对象的绘制。典型的视频窗口绘制过程如图1所示。

图1 典型的视频窗口绘制

绘制过程中,一般先绘制背景图像,然后绘制前景对象,如交互控件、活动标记。绘制背景图像时一般需要绘制整个视频窗口。每次绘制完成后,需要将所有的前景对象重新绘制一遍,然后提交给显示器进行显示。

整个绘制的过程(见虚线框内)由绘制背景图像和前景对象所需要的时间及提交给显示器显示的时间构成。背景图像的数量一般不变,但图像分辨率越大绘制时间越长;前景对象的数量随不同的应用场所会发生变化,数量越多所需要的绘制时间越长;在提交绘制结果时,提交给显卡设备的速度越快,耗时就越短;视频系统的图像采集帧率越大,视频窗口里面进行绘制的时间要求越短。

2 基于DirectX的笔画模型

为满足大帧率的快速绘制要求,GDI需要降低背景图像和前景对象绘制时间以及绘制结果显示时间。在不需要拉伸的情况下,背景图像的绘制基本上是一个像素拷贝过程,方法优化的可能性不大,而在需要拉伸的情况下,有一定的优化空间;前景对象绘制数量多,各种不同形状的图形绘制方法不一,优化的空间很大;绘制结果提交是一个将绘制的内存缓存提交给显示卡的过程,方法优化的可能性很小。

根据以上分析,提出一种笔画模型方法。该方法在图形或图像绘制过程中,绘制运算结果不直接作用在目标缓冲区,而是转换成DirectX可以识别和使用的顶点和纹理数据,在需要显示的时候,直接将这些数据提交给DirectX进行渲染,减少前景对象绘制的时间,从而加快整个系统的图像图形的绘制速度。

2.1 DirectX

DirectX软件开发套件是微软为开发多媒体应用提供的后台通道。DirectX是一套底层应用编程接口,用于创建游戏和其它高性能的多媒体应用。支持高性能的2D和3D图像绘制[2]。为保持一致,DirectX的应用编程接口以3D图像绘制要求为标准。除了提供硬件加速功能外,DirectX还提供下面几项重要的几何图形绘制和渲染功能:

(1) 基于顶点绘制的多种类型的点、线、三角形绘制;

(2) In-Memory Surface直接绘制到Video Card Surface;

(3) 利用Video Card Surface的拉伸功能进行数字图像拉伸绘制加速;

(4) 灵活的纹理渲染功能。

DirectX提供的这些功能和接口,可以实现2D 图形设备接口中要求完成的几何图形和BITMAP格式数字图像的绘制任务,满足文中提出的利用笔画模型方法实现GDI的底层接口要求。

2.2 笔画模型

SM-GDI将视频窗口看作一个画板,每次绘制的结果,都被称之为笔画。在进一步描述模型方法之前,需要阐述本文的3个定义。

定义1 笔画:一个单独的绘制执行,可以是一个基本的几何图形,如点、直线、圆或一段文本、一幅图片。在系统中被认为是不可再分的最小绘制单位。

定义2 原子绘制:在每次绘制的过程中,绘制对象的属性即颜色、透明度、笔画粗细和绘制质量都是一致的。

定义3 原子绘制函数:将一个绘制任务转换为唯一的笔画对象。原子绘制函数需满足以下两个条件:① 必须与唯一的笔画对象有关;② 必须满足原子绘制条件,即绘制对象的属性是一致的。

笔画模型方法的主要思想是在绘制过程中不直接将绘制结果作用在目标内存缓冲区,而是在初次绘制的时候将需要绘制的任务转换成DirectX可以识别的顶点或纹理数据,然后在每次需要重新绘制的时候,直接将这些数据提交给DirectX进行渲染和显示。

笔画模型方法包括三个方面:① 原子绘制函数的实现;② 应用编程接口(Application Programming Interface,API)绘制函数的封装;③ 应用程序的对API绘制函数的调用方式。为了更好说明笔画模型方法,本文以基于该方法开发的SM-GDI为实例,在第3、4、5节里面分别进行描述。

3 原子绘制函数的实现

GDI需要绘制的对象主要包括:几何图形、文本和数字图像。在笔画模型的绘制方法中,笔画模型将绘制任务转换成笔画对象。在实现过程中,实际上是将输入的几何点坐标、文本,对齐方式和数字图像数据以及一些特殊要求的绘制参数,转换成不同类型的原始绘制的顶点数据和纹理数据。在原子绘制函数中,转换后的数据被封装成笔画,其笔画数据满足原子绘制的要求。下面描述在原子绘制函数中,不同情况下的绘制任务转换方法。

3.1 几何图形

几何图形包括点、直线、曲线(如圆弧)、封闭图形(如多边形)等。根据DirectX提供的原始绘制功能和几何图形属性,需要将不同几何图形绘制任务转换为包含不同属性的顶点数据的笔画对象。基本的转换方式如下:

(1) 点:根据所选择的笔型转换成相应的原子绘制顶点数据。如果笔型的宽度为1,转换为D3DPT_ POINTLIST类型的顶点数据;如果线宽大于1,转换为D3DPT_TRIANGLE_FAN类型的顶点数据;

(2) 直线:根据所选择的笔型转换成相应的原子绘制顶点数据。如果线宽为1,转换为D3DPT_LINE_LIST类型的顶点数据;如果大于1,转换为D3DPT_TRIANGLE_LIST类型的顶点数据;

(3) 曲线:如果不需要填充,在曲线转换过程中,首先需要计算组成曲线的几何点,然后将这些点拟合成线段,最后按照直线方式进行处理;如果需要填充,则转换为D3DPT_TRIANGLE_FAN类型的数据;

(4) 封闭多边形:如果不需要填充,转换成D3DPT_LINE_STRIP类型的顶点数据;如果需要填充,且为凸面,转换成D3DPT_TRANGLE_FAN类型的顶点数据;如果需要填充,且为非凸面,则转换成D3DPT_TRANGLE_LIST类型的顶点数据。

3.2 数字图像

在绘制数字图像时,需要进行拉伸、缩放、旋转、变形、排列、某一区域内对齐等绘制。面对各种不同的绘制要求,转换方法为:首先将图像转换成大小相同的纹理对象;然后根据不同的绘制要求,设置不同的纹理坐标和画板上的目标坐标;最后按照D3DPT_TRANGLE_STRIP类型的顶点进行绘制,达到特定的绘制效果。因此,图像绘制函数的笔画包含纹理数据和两个D3DPT_TRANGLE_STRIP类型的顶点数据。纹理坐标和目标坐标计算方法如下:

(1) 拉伸:将拉伸后的矩形的四个目标坐标设置成纹理的目标坐标,对应的纹理坐标分别为(0,0), (0,1),(1,1), (1,0);

(2) 缩放:根据缩放因子,计算出缩放以后的目标坐标位置,然后按照拉伸方式处理;

(3) 旋转:根据数字图像的大小和旋转角度,以图像中心为旋转中心,然后计算旋转后的图像矩形坐标,将结果设置成纹理的目标坐标,最后按照拉伸方式处理;

(4) 变形:直接将指定的四个顶点坐标设置成纹理目标坐标,然后按照拉伸方式处理;

(5) 排列绘制:将纹理的寻址模式设置成包装模式,然后将目标区域矩形的坐标设置成纹理目标坐标,最后通过重复绘制的数量计算出纹理顶点坐标;

(6) 某一区域内对齐:根据矩形区域的大小和对齐方式,计算出目标坐标位置,纹理坐标不变。

3.3 文本绘制

文本的绘制需要将绘制任务转换成包含一个纹理对象、两个用于控制纹理绘制的D3DPT_TRI、ANGLE_STRIP类型的顶点数据的笔画对象。其绘制过程分两个阶段:

(1) 使用操作系统的应用编程接口,将文本编码转换成BITMAP的数字图像;

(2) 根据当前字体对象的属性和绘制参数,将数字图像转换成纹理对象,然后按照D3DPT_TRANG、LE_STRIP类型的顶点进行绘制。

4 API函数的封装及调用方式

在SM-GDI中,API绘制函数是连接上层应用程序和原子绘制函数的中间接口。涉及API绘制函数的封装方式和调用方式如下:

每个绘制函数返回一个笔画对象,同时对绘制函数增加一个笔画对象参数。当应用程序调用对应的函数时,如果输入的笔画对象为空(NULL),绘制函数则自动创建一个新的笔画对象,然后返回该对象。如果输入一个已经存在的笔画对象,绘制函数将直接在该笔画对象上进行修改。

如笔画模型的绘制直线函数为:

该函数绘制同一条直线,返回一个笔画对象句柄。笔画对象句柄的返回和重用可以保证绘制的顺序,但不会对笔画对象进行反复重建。

当应用程序进行绘制函数的调用时,方式如下:

其中m_hLine为保存笔画对象的变量,需要一个比较大的访问域(如模块级或类级)以保证在调用结束后不会丢失笔画对象句柄。

在实际的应用中,需要对已有的笔画对象进行擦除或修改,为了降低绘制时间,SM-GDI提供专门的绘制函数直接对笔画对象进行修改或删除。表1是以绘制直线为例,说明不同绘制操作下调用函数方式。

表1 不同操作下的函数调用

5 视频监控系统中的应用

为了满足快速绘制要求,SM-GDI在应用过程中,将绘制过程划分两个阶段完成,即离线状态下的绘制和在线状态下的实际渲染和显示。离线状态下的绘制一般为系统初始化阶段的绘制,如图2所示。在这个阶段数字相机还没有进行图像采集,系统进行必要的初始化工作,对图像和图形绘制没有严格的时间要求。在该阶段,调用SM-GDI的绘制函数在视频窗口中进行创建交互控件、ROI、活动标记等对象。

图2 初始化阶段的绘制

在视频运行阶段,视频系统处于连续采集状态下,需要不断地对视频窗口刷新。与传统GDI绘制不同的是,该阶段对前景对象绘制时不需要对组成几何对象的像素重新计算,只需将已经转换好的模型数据直接提交给DirectX进行渲染,降低绘制计算时间,如图3所示。

图3 视频运行阶段的绘制

6 性能评估

基于DirectX和笔画绘制的模型将从时间复杂度和空间复杂度两方面进行分析。由于DirectX提供一个与显卡快速通信的后台通道,并提供原始的绘制接口,整个性能的分析主要集中在笔画模型方法的评估。由于笔画模型方法中每次原始绘制仅仅生成一个笔画对象,SM-GDI需要对这些笔画对象进行管理,因此,还需要对笔画管理方法的复杂度进行评估。笔画模型的性能评估从时间复杂度和空间复杂度两个方面进行。

6.1 时间复杂度

(1) 图形图像绘制

SM-GDI主要绘制几何图形、数字图像和文本。数字图像和文本绘制的很多工作都是交给操作系统或显卡完成的,时间复杂度相对简单。几何图形由于形状差异,其时间复杂度不一样,需要分不同情况处理,表2列出了几种对象绘制的时间复杂度。

表2 各种图形图像绘制的时间复杂度

几何图形的绘制过程中,实际上将定义给几何图形的几个几何点计算成组成该几何图形的离散点(像素),然后将该几何点按照不同的部分拟合成DirectX需要的线段点阵。对于点和直线来说,可以直接应用到DirectX函数,时间复杂度为O(1);对于多线段的几何图形如矩形,时间复杂度为O(n),其中n为线段数量。曲线图形如圆需要先将曲线转换成点序列,然后再拟合成线段。其时间复杂度由两部分组成:①曲线的绘制采用王润云等[3]提出的快速的Bresenham方法,时间复杂度为Od(ncl),其中ncl为曲线长度;② 线段拟合采用梯度合并方法,时间复杂度为Oa(npl),其中npl为点序列长度。因此其总时间复杂度为Od(ncl)+Oa(npl)。复杂的几何图形由以上基本图形组成,其时间复杂度为每个基本图像的时间复杂度的总和。

数字图像的绘制需要将其转换为DirectX中的纹理或表面。在不拉伸的情况下,数字图像主要为逐点拷贝。对二维数字图像来说,为O(m×n),m和n分别为图像的长度和高度。对于拉伸的情况,不同的取样方式时间复杂度不同。在本模型中,由于像素取样方法由显卡硬件实现,故可忽略像素取样时的时间复杂度。因此,不管哪种情况,均可认为数字图像的时间复杂度为O(m×n)。

文本分为矢量文本格式和点阵格式。无论哪种格式,都需要将它们转成数字图像,然后转成纹理提交给DirectX进行渲染。将文本格式转成数字图像由操作系统完成,这个转换过程的时间复杂度不考虑,转换的时间复杂度为Ot(l),其中l为文本中的字符数,总的时间复杂度为Oi(m×n)+Ot(l)。

(2) 笔画对象管理

笔画对象使用双向链表进行管理,在全新绘制阶段,SM-GDI直接生成一个笔画对象,然后填加到链表表尾,时间复杂度为O(1)。在实际绘制阶段,将笔画对象的顶点和纹理数据传入DirectX,时间复杂度为O(n),n为笔画对象的数量。笔画对象删除的时间复杂度与一般双向链表删除的时间复杂度相同,其值为O(1)。系统管理对象的时间复杂度如表3所示。

表3 系统管理对象的时间复杂度

除了重绘时的时间复杂度为线性外,其它情况时间复杂度均为O(1)。在进行视频窗口绘制时,需要遍历双向链表,绘制时间会随着笔画对象的增多而增多,即线性增长。其它情况下,系统计算时间不会随着笔画对象的增加而增加,降低系统性能。

由上述分析可以看出,新系统的计算时间主要集中在图形图像的绘制过程中,这些绘制可以在系统初始化阶段完成,降低了整个系统的计算时间。

6.2 空间复杂度

笔画模型方法不是直接将绘制结果输出到目标缓冲区上,而是建立一个笔画对象,保存DirectX可以识别的线段的点阵,因此必须增加额外的内存空间。在绘制过程中,数字图像需要转化为纹理对象,空间复杂度为O(m×n)。文本需要先转成数字图像,然后再转成纹理对象,空间复杂度为Oi(m× n)+Oi(m× n)。所有几何图形最终转换成线段的顶点点阵,空间复杂度为O(n),其中,n为转换后的组成几何图像点的数量。使用链表管理笔画对象,需要额外的用于空间管理对象的指针,空间复杂度为O(x),其中x为笔画对象的数量。各对象绘制的空间复杂度如表4所示。

表4 各对象绘制的空间复杂度

与直接绘制到目标缓冲区的GDI相比较,基于笔画模型的SM-GDI需要额外的一倍或数倍于绘制对象本身的内存空间。在现代计算机硬件快速发展的今天,这些内存空间已经不成问题。

7 实验结果

在视频系统里面,每次绘制都需要将背景图像帧重画,测试主要针对前景对象进行。为了有一个相对完整的测试结果和性能比较,本文针对前景对象设计了6组测试用例,绘制任务从少到多依次增加,见表5。基本的绘制内容包括椭圆、矩形、中英文文本和数字图像。为了使测试结果更具直观性,防止屏幕停滞感,将增加当前操作系统时间的显示(以毫秒为单位),该显示不作为基本绘制内容来设计测试用例。

表5 绘制测试用例

每组用例在两个不同的GDI中进行:Windows XP提供的GDI和利用本文方法开发的SM-GDI。图4是不同GDI在测试过程中的一组测试用例的绘制结果。

图4 两个不同GDI绘制结果

测试在Windows XP Professional操作系统上进行,硬件基本配置为Intel(R) Core™ 2 duo CPU2.10G,2.0G内存。DirectX版本为October,2004。背景图像的分辨率为1024×768像素,24位真彩色。记录的测试结果为每秒可以绘制的帧数,均采用观察到的最大数值。详细的测试结果如表6所示。

表6 不同GDI的处理速度 帧/秒

从表6的测试结果可以看出,如果按照PAL标准25帧/秒的要求,除了第6次测试结果略小于要求的帧率以外,SM-GDI在其它测试过程中,帧率均可以达到要求。图5为不同GDI在绘制量逐步增大时的处理速度和变化趋势。按照每帧重画的方法进行绘制时,Windows GDI在小绘制量时性能要远远好于按照重绘方法进行绘制的SM-GDI,但是当绘制量达到一定程度时,二者性能差异不大。

图5 不同GDI绘制的帧率变化趋势

8 结论

通过实验结果可以看出,笔画模型方法增加了空间复杂度,需要额外的存储空间,但它在绘制量增加时,帧率下降速度不会很明显,即使每次需要绘制的数量达到4000笔画左右时,响应帧率仍然可以接近

25帧,满足视频窗口在大帧率下各种绘制任务的要求。不过,由于笔画模型方法不直接作用在目标缓冲区,在使用传统过程进行视频窗口绘制时,性能反而恶化。在视频监控的在屏交互过程中,当进行视频窗口的交互控件绘制时,同一笔画变化的情况并不多,故本文提出的笔画模型方法是适用和可行的。

[1] WPF优点之比较GDI,GDI+ Jogholy专栏 http://blog.csdn. net/ joji_h/article/details/3881355.

[2] The DirectX Software Development Kit. DirectX c++ documentary. DirectX SDK Update October 2004.

[3] 王润云,王志喜.一种快速准确的画圆方法[J].四川工业学院学报, 2004,23(02):43-44,53.

A Method Named Stroke Modeling for Building Graphics Device Interface

Huang Dongyun Lei Huan Lu Xingjian
(Guangdong Institute of Automation)

When the live video surveillance system interacts with users, it needs fast implementation for drawing or painting user controls, interested region picks, activity marks as well as digital images to avoid a frozen display, that requires the graphics device interface modules to draw or paint quickly. We propose a new method named stroke modeling, which takes the advantages of drawing primitives provided by DirectX to transform drawing tasks into stroke objects, enabling the video systems in its run time to fulfill a fast implementation for render or display by submitting the pre-generated stoke objects to the DirectX, cutting off the drawing time dramatically. Following the method, we have developed a graphics device interface module which may be used for quick graphical rendering or drawing.

Stroke Modeling; Atomic Drawing; 2D; 3D; DirectX; GDI

黄东运,男,1975年生,硕士,研究方向:机器视觉、图像识别。E-mail: buffi@qq.com。

猜你喜欢

数字图像复杂度顶点
数字图像水印技术综述
过非等腰锐角三角形顶点和垂心的圆的性质及应用(下)
过非等腰锐角三角形顶点和垂心的圆的性质及应用(上)
数字图像相关中非迭代相关系数曲面拟合算法的研究
一种低复杂度的惯性/GNSS矢量深组合方法
求图上广探树的时间复杂度
基于变分水平集方法的数字图像分割研究
某雷达导51 头中心控制软件圈复杂度分析与改进
数字图像修补技术的研究进展与前景展望
出口技术复杂度研究回顾与评述