基于DirectDraw的合成孔径雷达图像实时显示
2008-06-17
作者:刘佳音, 禹卫东
摘 要: 介绍了合成孔径雷达" title="合成孔径雷达">合成孔径雷达(SAR)图像实时显示" title="实时显示">实时显示技术。利用该技术并结合机载SAR实时成像处理器的硬件环境,实现了具有多种功能的滚动显示软件,软件开发采用了基于DirectDraw的技术。目前该软件已成功运行于中科院电子所研制的机载SAR实时成像处理器上。该项技术可方便地移植到其他类似的雷达图像显示系统中。
关键词: DirectDraw 实时显示 合成孔径雷达图像
合成孔径雷达(SAR)是一种全天时、全天候的主动式微波遥感手段,它以飞机或卫星为载体对地进行观测。与光学成像不同,把SAR回波数据转换为SAR图像需要一系列复杂的信号处理步骤,通常只能采取记录回波数据、事后处理得到图像的方法。近年来随着数字技术的迅速发展,以及嵌入式DSP芯片速度的不断提高,机上实时成像处理技术已成为现实。
SAR实时成像处理器可以在载机平台飞行的同时获得所观测区域的SAR图像,这对于实时侦察具有重要意义。图像实时滚动显示是SAR实时成像处理器的一个重要功能,它用来直观地把处理器生成的图像按载机飞行速度,同步地输出到显示设备上。
本文介绍的基于DirectDraw的SAR图像实时滚动显示软件已成功地运行于中科院电子所开发的机载SAR实时成像处理器上,获得了良好的应用效果。
1 运行的硬件环境及功能需求
本软件运行于中科院电子所研制的机载SAR实时成像处理器上,硬件环境如图1所示。
机上雷达通过天线对地面测绘区域发射信号,并将接收到的地物回波经过放大、下变频和正交解调后,生成视频回波信号(分为I/Q两路),进入机上的实时成像处理器中。
在实时成像处理器中,首先视频信号经A/D转换为数字信号,再经成像处理(包括方位预滤波、距离压缩、CTM、方位压缩、ICTM等硬件单元)生成实时连续的SAR图像数据" title="图像数据">图像数据,其具体参数如表1所示。图像数据通过PCI接口卡(总线宽度为32位)传入主控计算机。在主控计算机中,SAR图像数据经本软件处理后,通过显示器完成雷达图像的实时滚动显示,其中,图像的显示分辨率为1024×768,显示字长为8bit,显示图像灰度级为256级。
根据上述技术参数,本软件设计思想及所完成的功能如下:
(1)屏幕显示模式为图像自下而上进行滚动显示,其中水平方向为距离向,垂直方向为方位向。
(2)雷达数据在成像时,图像数据持续显示速度应符合大于6.25Mbps(762.5×4096×2)的标准,否则,会造成数据的拥塞,导致显示的图像出错。
(3)雷达成像时读入16bit" title="16bit">16bit无符号数据,而显示字长为8bit,所以,要从16bit数据中选取连续的8bit用来成像,而且选取的位置必须可调,即可以动态改变图像的亮度。
(4)雷达图像每行4096点。普通的显示器能显示的最大尺寸为1024×768,所以,雷达图像不可能一次全部显示出来,必须动态地分区域显示。这样就产生了两种图像显示模式:全分辨率——起始距离可选,显示距离向0~4096点中的任意1024点(如图2所示);低分辨率——距离向4抽1,方位向4抽1,从而在1024×768的显示器上就能显示出整体的雷达图像(如图3所示)。
(5)每行图像数据中都附加了辅助数据,它包含了雷达图像的信息,输出显示可把其叠加到图像上。
过去在显示合成孔径雷达(SAR)图像时,一般采用图形设备接口GDI。利用GDI显示雷达滚动图像,优点是使用方法简单,只需较少的代码便能实现,但Windows的设备无关性原则使得应用程序" title="应用程序">应用程序不能直接访问设备硬件,处理图像必须通过GDI,这样就大大限制了图形的显示速度,并且在缩放图像时还容易引起失真和屏闪现象。
DirectDraw是DirectX SDK的主要部分之一。它允许直接对显示内存操作,支持硬件位块传输、硬件覆盖、表面翻转,并且保持同目前的基于Windows的应用程序和驱动程序兼容。作为一种软件接口,使用DirectDraw可以很容易地操作显示内存,充分利用不同类型显示设备的位块传输和颜色解压功能,而不必依赖特定的硬件。可见,DirectDraw技术能更好地支持雷达图像的实时滚动显示功能。
2 DirectDraw工作原理
2.1 DirectDraw的层次结构
DirectDraw通过一个设备相关的抽象层直接访问硬件设备。一般地,DirectDraw通过硬件抽象层(HAL),提供设备无关操作。HAL是由设备生产商提供的特定设备接口,DirectDraw直接对显示硬件进行操作,为应用程序显示图形提供一组统一的接口和方法。HAL可以是显示设备驱动程序的一部分,或是独立的DLL,通过驱动程序编写者定义的一个私有接口与显示驱动程序进行通信。
当硬件抽象层不支持某种特性时,DirectDraw会尝试进行软件仿真,仿真的功能是由硬件仿真层(HEL)提供的。同HAL一样,应用程序也从来不直接与HEL一起工作,DirectDraw对硬件的主要特性都提供透明的支持,不管它是由HAL支持还是由HEL仿真的。
从图4中可以看出,DirectDraw既拥有底层的高性能接口,具有设备无关的灵活性,又将图形功能揉和在Win32程序中,得以充分利用其中存在的硬件加速功能。应用程序通过API直接访问显存,大大提高了显示速度,进而产生快速、平稳的图形。
2.2 DirectDraw的工作机制
在使用DirectDraw技术显示图像时,一般要创建若干个图形数据缓冲区(以下称为“表面”),并把这些图形数据装入其中,再进行转换、拉伸、拷贝等操作,并且还可以显示这些缓冲区中的图形数据。表面可以分为几类,这里主要用到主表面和离屏页面。
主表面是用户在屏幕上可以看到的,它是显示内存的一部分。所有DirectDraw程序都有主表面,而且只有一个,且不能改变它的尺寸、格式和位置。主表面有一个很重要的特性——翻页。一个可以翻页的主表面实际上是两个表面,一个是可见的,即主表面;一个是不可见的,称为后备缓冲区。当翻页后,将原后备缓冲区页中的内容拷贝到可见主表面页,而同时将原可见主表面页的内容拷贝到后备缓冲区页。
显示器屏幕虽然每秒中刷新很多次,但每次都是一遍一遍地读取可见主表面中存储的显示页信息,而对后备缓冲区的改动则不会显示出来,也不会影响到可见主表面的显示,只有当施行翻页操作后,两页的内容互换,在原后备缓冲区的改动才会显示在屏幕上,而这个互相拷贝的时间比起每次刷新所用的时间少了几十万个数量级,人眼是根本察觉不到的,所以用这种方法可以获得不闪烁、平滑、优质的动画效果。
还有一种表面叫离屏表面,它是不能直接看到的。离屏表面作为存储缓冲区,有助于表面之间的互相切换,它的大小是可以改变的。
本软件中DirectDraw各个表面之间的交互如图5所示。
3 DirectDraw在雷达图像实时显示中的应用
3.1 软件设计
在本软件中,选用Win32应用程序开发环境来开发基于DirectDraw的雷达图像实时显示程序。之所以选用Win32而不用MFC,主要因为MFC集成了大量的数据和方法,在编制基于图形显示和多媒体的应用程序时会带来极大的麻烦。首先是无法触及系统的内核,而且,MFC事先建好的类的许多功能对该程序来说是无用和低效的,使用它们只会给程序带来冗余和不便。
3.1.1 整体设计
为更好地支持实时显示,使图像保持平滑和连贯,笔者在软件中引入了多线程技术。除主线程外,另创建两个线程,一个用来从外部设备中获得实时数据,将其放到内存中(写线程);另一个用来将内存中的数据利用DirectDraw技术进行滚动显示(读线程)。
具体地,在内存中设置一个大小适宜的缓冲区,当有外部数据传来,且缓冲区不满时,写线程接收外部数据,依次填充到缓冲区内,否则写线程等待;当缓冲区中有未显示的数据时,读线程将其取出送去前端显示,否则读线程等待。为了避免发生“死锁”、“不一致读”或者“脏数据”现象,在读写线程之间加入同步事件机制,通过事件来对二者进行协调。
图6给出了本软件的主要流程,初始化主窗口后,首先对PCI卡进行初始配置,以通过它来进一步获得雷达图像的实时数据,然后分别创建写线程和读线程,来协助实时数据的显示;进入消息循环后,根据从PCI卡处获得的数据消息,激活读、写线程,将实时数据处理之后通过DirectDraw滚动显示,当显示完毕时,关闭读写线程,退出软件。
3.1.2 图像显示设计
在进入消息循环后,读写线程就会将外部的实时图像数据依次送到前端显示。这里的图像显示主要是基于DirectDraw的图像显示技术来实现的。创建一个主页面、一个后台缓冲页面和一个离屏页面,刷新图像时,直接访问离屏页面, 从外部获得数据赋值给离屏页面;然后从离屏页面中复制1024×768的块到后台缓冲页面中,最后,调用换页函数,实现主页面和后台缓冲页面的交换,即实现主页面的刷新。页面刷新的频率主要靠PCI的实时消息来确定,在每次消息到来时,调用更新页面函数,实现页面的动态刷新。
此外,根据雷达图像的要求,为了使显示范围和区域可以动态改变,笔者把显示模式分为全屏显示和区域显示两种。全屏显示模式下,距离向和方位向均4抽1显示,整个雷达图像在方位向就可以全部显示出来,但如果仅仅是4抽1的话,显示的图像一定很不平滑。所以,在抽点显示的同时,对图像做平滑处理,即将选中点的周围16个点取平均值作为此点的灰度值。在区域显示模式下,将方位向分成4个区域,每个区域大小为1024,显示时,只显示其中一个区域,所以,屏幕上显示出来的图像的分辨率为原始分辨率。在这种显示模式下,虽然图像的每个像素点都可以看到,但在各区域的交界处不能看到其周围像素点,不能很好地理解图像。所以,在区域显示时,设计使其在水平方向能够小幅度移动。具体处理流程如图7所示。
同时为了使得图像亮度可以动态改变,选择16bit数据中不同位置的连续8bit数据,并在读取8bit数据时,做饱和处理,即如果所选择的8bit数据的高位有任意一位为1,则此8bit数据定为255。
3.2 软件运行的实际效果
经测试,此软件已达到设计要求,完成所要求的全部功能,即:
(1)可以在图像下方实时显示正在显示的图像区域范围、亮度信息、滚动速度及图像的距离向位置等各种参数;
(2)具备切换是否显示帮助菜单,以及是否显示各种飞行参数的功能;
(3)实现了图像滚动速度可以调节的功能;
(4)支持两种显示模式,即全屏显示模式和区域显示模式;
(5)在区域显示时,可以选择4个不同区域,通过操作4个键进行快速切换,也可以操作左右方向键,实现图像的左右小幅度移动;
(6)可以通过按键控制选取不同位置的8bit数据,实现图像亮度的控制;
(7)为了方便使用者更准确地知道每个点的具体位置,可以选择在图像上打上网格。
目前,基于DirectDraw的雷达图像实时显示技术已应用在中科院电子所研发的机载SAR实时成像处理器项目的实践中,现已通过测试,投入实际运行,性能良好。由于本软件设计中所采用技术的通用性和灵活性,使其可应用于其它相似的雷达图像实时显示系统中,因此具有广泛的应用前景。
参考文献
1 武永康.DirectDraw原理与API参考.北京:清华大学出版社,2000
2 刘永坦.雷达成像技术.哈尔滨:哈尔滨工业大学出版社,1999
3 王险峰, 刘宝宏.Windows环境下的多线程编程原理与应用.北京:清华大学出版社,2002