导航菜单

基于OpenGL的SAR实时图像显示

张娟,刘国霞,陈光辉

(南京电子技术研究所,江苏南京210039)

摘要:成像雷达在实际的操作中显示的图像数据量颇大,并且能呈现出图形的许多细节,因此,对显示的现实性、实时性要求很高。图像在屏面空间滚动时,数据中会包含已经输入的原始图像数据,同时也会滚动显示新录入的图像数据,两组图像数据在同一平面显示,而且要注意到在进行图像数据显示时,还要求在其空间上叠加相应的飞参信息和时间信息。因此,为满足成像雷达的显示需求,在VxWorks操作系统下通过采用OpenGL系统具有的双缓存技术和融合技术,可以获得平滑的、完整的、动感的、实时的动画效果。

教育期刊网 http://www.jyqkw.com
关键词 :OpenGL;SAR;双缓存;VxWorks操作系统

中图分类号:TN911.73?34 文献标识码:A 文章编号:1004?373X(2015)13?0007?03

收稿日期:2015?04?01

0 引言

VxWorks操作系统是一种嵌入式操作系统,因其在实际操作中,具有良好的性价比,操作程序简洁实用,运行扎实可靠被广泛应用在通信、军事、航空、航天等高精尖技术以及实时性要求极高的领域中[1]。VxWorks操作系统在图形界面的通用开发方式是采用风河公司的图形开发软件WindML,但该软件在具体实操时,不能有效利用图形界面实现操作效率的提升,同时利用该软件处理的图像界面显示,效果单一模糊,最大的短板是该软件在面临诸如图像的动画、反走样等问题时无法提供解决渠道[2]。因此,考虑选择系统显卡自带的OpenGL三维图形软件包,该软件最大的特点是通过建立函数关系进行操作,函数的设立、建构都依照实用简单的模型,利用OpenGL 提供的函数功能,只需建构、设置一整套自己需要、简洁清晰的渲染函数就能完成图形选取、设计、规划,这样直接通过操作简单函数来进行图形制作,针对性、时效性强,所设计的图形更具直观性,同时OpenGL可以很好地解决诸如图形的动画、反走样等显示效果方面出现的难题[3?4]。

OpenGL是SGI公司开发的具有广泛运用性的一种软件接口,它的最大特点是可以移植,并且具备独立性,不受窗口操作系统和硬件环境的制约,是一种用于实时3D 图形的标准范例。OpenGL 的图像显示是基于硬件(通常是显卡)实现的,在OpenGL 硬件运转情况下,调动OpenGL API 传送给硬件驱动程序,然后与图形显示硬件直接交互,如图1 所示。由于软件技术的深度开发,OpenGL 在3D 图形加速卡方面的发展日益加快,使得图形处理更为简洁、实用、高效[5]。

1 软件设计

OpenGL 提供glDrawPixels 函数绘制像素贴图。在操作环节它利用glRasterpos定义当前光栅位置的左下角,然后以glPixelStore操控像素贴图的格式。在雷达图像中,像素格式通常为灰度图,含256级亮度,每个字节对应一个像素的信息。在glRasterPos函数设置好当前光栅位置后,随即可利用glDrawPixels函数将图像从内存复制到帧缓冲区内。

OpenGL支持双缓存技术,在显示前台缓存图像的同时,后台缓存绘制第二幅图像。当后台绘制完成后,后台缓存中的图像就显示出来,此时原来的前台缓存开始绘制第3幅图像,如此循环往复,使屏幕上的画面看起来是连续的。

另外,还要考虑融合技术。这是一种最为基本的图像处理技术,应用面广泛,利用这种技术可以显示飞参等信息。在图像处理过程中,融合的方式多种多样,最主要的方式是使用Alpha通道。在程序中,使用Alpha值可以直接完成字体位图与图像信息的融合透明处理[6]。

1.1 图像绘制

绘制像素贴图OpenGL函数及其参数如下:

(1)描述位图数据的存储格式。

这里要解决好如下两个问题:如何使用glReadPixels函数保存像素;如何为glDrawPixels函数读取像素。在程序中主要是利用该函数设置从内存中读取像素的格式来解决上述问题。

Void glPixelStore(i Glenum pname,Glint param)

其中pname为要设置的参数;param是参数值。

控制从内存中读取像素的pname参数取值为:

GL_UNPACK_SWAP_BYTES

GL_UNPACK_LSB_FIRST

GL_UNPACK_ROW_LENGTH

GL_UNPACK_SKIP_ROWS

GL_UNPACK_SKIP_PIXEL

GL_UNPACK_ALIGMENT

程序参数取GL_UNPACK_ALIGMENT值为1,表示图像上每一行扫描的对齐方式是按照1个字节进行扫描对齐的。

(2)设置当前光栅位置,确定图像的起始位置Void glRasterPos2(i GLint x,GLint y)

其中,x 表示图像起始左下角的水平坐标;y 表示图像起始左下角的垂直坐标。x,y 的数据类型也可以是浮点数,相应的函数名称是glRasterPos2f(GLfloat x,GLfloat y)。

(3)从内存将像素数据复制到帧缓冲区光栅位置Void glDrawPixels(GLsizei width,GLsizei height,GLenum format,GLenum type,const GLvoid* pixels)其中:width 表示像素计的图像宽度;height表示像素计的图像高度;format表示绘制的像素的颜色空间;type 是指绘制的像素类型;pixels是图像的像素数据的指针。雷达图像是灰度级数据,因此设置type 参数为GL_UNSIGNED_BYTE,format 参数设为GL_LUMI?NANCE。

1.2 图像平滑滚动的实现

OpenGL支持双缓冲系统,但在实际中OpenGL函数不会用来交换前台缓冲区和后台缓冲区。但是令人欣慰的是,每个OpenGL支持的窗口系统都可以通过设置一个函数调用来完成前后缓冲区之间的交换。在Win?dows中,函数是SwapBuffer。在程序中,函数是glxSwap?Buffer。

OpenGL用双缓存技术来完成动画制作。程序默认帧存为两个视频缓存,在任意时刻,两者中只有一个内容能被显示出来。运行原理是,当前可见视频缓存称为前台视频缓存,不可见的(正在画)的视频缓存称为后台视频缓存。当后台视频缓存中的内容被要求显示时,OpenGL就将它拷贝至前台视频缓存。在操作中显示硬件通过读取可见视频缓存中的内容,把相关结果显示在屏幕上。OpenGL在双缓存模式下,位平面被默认切分为前台和后台位平面。通过绘制函数操作的图像首先被写向后台位平面,这就要求,在描画物体之前,首先必须把帧存设置成正确的组态,当后台出现完整的画之后,就调用glxSwapBuffer 函数,使其称为可见视频缓存[7]。

glxSwapBuffer函数的工作过程如图2所示。

1.3 生成位图字符

OpenGL直接用于处理单色位图。这种储存形式单一、简洁,如果存储位为1则用指定的颜色填充该位,如果存储位为0,则用底色填充该位。如果按每行8位扫描,则按以下数组表示的位所生成的位图是字母B,如图3所示。

融合作为一种特殊的功能,必须进行启动和关闭声明:

glEnable(GL_BLEND);

glDisable(GL_BLEND);

2 测试结果

显卡输出的雷达图像视频经视频采集卡接收处理后,实现图像的正常显示,如图4所示。

在显卡显示噪声的同时,会叠加载机信息。

3 结语

本文通过基于OpenGL 在实际操作中的图像显示方法(一方面显示原始图像信息,同时显示自数据处理系统的二次信息),在程式命令的操作下,显示系统会进行显示模式转换,如A型、B型和P型显示器,显示切换功能会不停转换,显示更加灵活,实用性较强。

教育期刊网 http://www.jyqkw.com
参考文献

[1] 胡延苏,南秦博,高昂,等.VxWorks中任务恢复机制的设计与实现[J].空军工程大学学报:自然科学版,2013(5):48?52.

[2] 郑元珠.基于VxWorks操作系统的雷达显示软件屏幕截图技术研究[J].舰船电子对抗,2010(2):116?120.

[3] 李军.OpenGL编程指南[M].北京:机械工业出版社,2009.

[4] 和克智.OpenGL 编程技术详解[M].北京:化学工业出版社,2010.

[5] 张琪.OpenGL超级宝典[M].北京:人民邮电出版社,2010.

[6] 马建萍,严恭敏,王保卫.OpenGL在雷达图像实时显示中的应用[J].航空计算技术,2005,35(4):72?74.

[7] 柳佳佳,栾晓岩,边淑莉.基于OpenGL的二维矢量地图可视化技术研究[J].测绘科学,2013(5):88?90.

作者简介:张娟(1983—),女,硕士,工程师。研究方向为雷达系统设计、雷达数据处理。

刘国霞(1982—),女,硕士,工程师。研究方向为雷达系统设计、雷达数据处理。

陈光辉(1979—),男,高级工程师。研究方向为雷达系统及软件设计、数字信号处理。

下载文本