内容提要:论文实现了一种基于Visual C++及GDI+技术的电子海图与雷达图像实时叠加的软件设计。阐述了电子海图和雷达图像单独显示时的关键技术及操作流程,针对两者的叠加显示问题,提出了解决方案。该设计满足了实时性的要求,做到雷达静态目标与海图中的相应目标相互吻合,雷达动态目标在海图上实时、准确地定位显示。
关键词:电子海图 雷达图像 叠加显示 GDI+
0 引言
电子海图显示与信息系统(Electronic Chart Display Information System——ECDIS)集导航技术、计算机技术、计算机图形显示技术及软件技术于一体,在海图信息的基础上完成各种有关船舶航行安全的综合显示,已成为现代船舶导航系统的核心设备。而用于航行和避碰的雷达又是狭水道、沿岸及雾中等复杂条件下航行所不可缺少的设备。若单独使用电子海图或雷达,虽然在一定程度上满足了船舶安全航行的需求,但它们都存在各自的缺陷(电子海图无法显示动态目标,雷达则不能识别周围目标的属性)。如果将电子海图与雷达图像叠加显示,则可实现两者的优势互补,并弥补了它们单独使用时存在的缺陷。
近年来,随着信息技术和导航技术的不断发展,海图和雷达信息数字化之后,两者间实现了数据传输,使电子海图与雷达图像数据信息的叠加显示成为可能,任何一方的“图像”可以被叠加到另一方的图像上。在电子海图上叠加显示雷达图像数据信息,可在原航行水域海图信息的基础上提供本船、本船周围的静态目标与动态目标三者之间的位置关系。使本船对周围的态势和会遇到的局面一目了然,便于尽快作出判断,避开航行危险和障碍物,及时采取避碰措施,并在电子海图上跟踪避碰决策的可行性。
1 总体实现思路
本设计主要在Visual C++6.0环境下采用GDI+技术,实现以电子海图为显示底层,以雷达图像为动态层的雷达视频信息的实时叠加显示。
电子海图的显示主要按照读取海图数据、转换海图数据及显示海图的顺序完成。为了保证S—52标准要求的显示速度及内容,显示海图时采用双缓存机制、内存拷贝方式和GDI+技术,来提高海图显示的速度,使海图在漫游时能快速、平滑地移动;而绘制雷达图像则运用快速坐标变换满足实时性的要求。电子海图与雷达图象的叠加必须准确定位雷达中心在海图上的位置,并且随着海图显示比例尺和雷达量程的变化,两者都将作出相应的变化。
2 电子海图的显示
2.1 S—57标准的数据结构
符合S—57标准的电子海图文件中的数据结构由一些记录和字段组成,而这些记录和字段都由现实模型转换而来,它们主要包括:特征记录、空间记录、矢量记录、地理特征记录、指针字段等。在S—57文件中,DDR包含了S—57数据结构中各个字段的描述:DR则包含了实际的海图数据,主要由特征记录和矢量记录组成。
2.2 海图显示的方法
由于S—57海图数据文件将ISO/IEC8211:1994作为其数据封装的标准,而这个标准并不适合显示时使用,所以需要定义自己的数据结构,以满足IMO S—52标准要求的显示速度及内容。海图的显示主要由三部分来完成,流程图如图1:
(1)读取海图数据:读取按照ISO/IEC8211:1994标准封装的海图数据文件,并保存为S—57数据结构。此处主要有数据集DSPM字段、向量记录VRID、特征信息记录FRID以及海图信息记录MAPINFO等。通过自定义多个结构体,先存储读取的基本海图信息,如海图比例尺、海图左上角及有下角经纬度和海图中心等,然后将海图数据进行分类、排序并分别读人到对应的点、线、面链表中,以供下一步使用。
(2)转换海图数据:将前一部分输出的链表记录转换成可显示的数据格式。分别对点、线、面进行操作,将点划分成孤立点和水深点,建立链表保存点信息及其对应的索引值;对于线和面则首先读取显示属性数据文件,保存它们的属性值到定义的链表中,然后根据其特征信息FRID来读取空间信息VRID。此外,还要确定面物标的边界及颜色值,水深线作为线物标的一部分单独存储并设置水深线间对应面物标的颜色值,最后将海图信息按照显示级别进行排序。以上保存的链表数据作为本部分的输出供显示时使用。
(3)显示海图:将第二部分得到的链表数据绘制到屏幕上完成海图的显示。由于海图数据中的坐标是实际地理坐标,不能直接在屏幕上显示,所以在显示海图之前,必须进行坐标变换。该变换主要有三步:
实际地理坐标®墨卡托投影坐标®屏幕坐标。
另外,还设置了屏幕显示区域,根据Sutherland_Hodgeman原理将多边形裁剪成匹配屏幕显示区域的大小,这样,随着显示比例尺的变化,可动态的显示用户所需要的那部分海图。
为了保证S—52标准要求的显示速度及内容,在显示海图时采用了双缓存机制及内存拷贝方式。首先在内存中开辟一块与当前DC(pDC)大小一样的内存DC(pMemoryDC),然后分别利用GDI+技术绘制各个图层,最后再在OnDraw()中使用双缓存机制,做一个屏幕拷贝,将内存设备上的内容一次性显示在屏幕上,完成显示工作。因为各图层的绘图操作是不可见的,所以避免了窗口重绘时的闪烁现象。而双缓存机制及内存拷贝方式的使用,不仅提高了显示速度,同时也使海图在漫游时能平滑移动而不产生滞留的感觉。
绘制电子海图时使用的GDI+,是一种应用程序编程接口(API),在GDI的基础上发展而来,是对原有GDI在功能上的升级。两者在编程应用上的本质区别是GDI+用一个无状态的模型取代了GDI中把选中项目放到设备环境(DC)对象上的主要状态模型,每个绘图操作都是相互独立的。利用它的这个特点,可将电子海图上相同图层,不同颜色的点、线、面物标同时绘制而成,从而提高绘图的速度。另外,应用程序开发人员在输出屏幕信息的时候无须考虑具体显示设备的细节,只需引入Graphics类即可,真正实现了图形硬件和应用程序的相互隔离,使开发人员编写设备无关的应用程序变得非常容易。
3 雷达显示
3.1 快速坐标变换
高分辨率雷达扫描变换的关键技术是将天线扫描时的极坐标转换为显示时的直角坐标。雷达信号处理的实时性同样也要求高速、高效的地址变换。所以,在雷达显示中,采取一种快速的坐标变换算法尤为重要。本文主要采用进位值法来实现快速坐标变换。
当雷达触发到来时,锁定一个天线方位角度q,然后距离r由零计数依次增加,物理意义上表明该方位由雷达天线中心逐步显示到量程的边缘。由于雷达回波信号的数据是径向分布的,其对应的直角坐标可表示为式(1):
由于︱cos(q)︳≤1,︱sin(q)︳≤1,所以每执行一次加法,结果的变化量都不会超过1。考虑到屏幕坐标的值为整数,故将X、Y的值分别取整赋予屏幕坐标。
从以上分析不难看出,执行加法操作后真正用到的数据只有进位信息,而这个值对于线性单调变化的r和q每次都是个定值并且非0即1,所以在具体实现时,可事先建立一个坐标查询表,表中对应位存放每次加法操作执行后的进位信息,以便计算坐标时调用。
3.2 雷达显示
由于雷达实时更新数据,所以采用描点的方式绘制,以反映船舶周围目标的运动态势。首先,通过CDC::SetMapMode(MM_ISOTROPIC)使x、y轴的逻辑坐标相同,来保证绘制的雷达图像是圆形,接着利用CDC::SetWindowExt()和CDC::SetViewportExt()分别设置窗口和视口的范围,然后通过CDC::SetViewportOrg()设置视口原点,最后在量化的方位上调用坐标变换子程序完成雷达图像的绘制。
其中,坐标变换子程序负责计算并存储量化方位上各点的直角坐标值及该点对应的颜色值,而在计算坐标值的时候又调用了由快速坐标变换得到的坐标查询表。
为了实时的绘制雷达图像,在OnDraw()中设定一个时间间隔为2.5 s(雷达转动一周时间约为2.5~3 s)的定时器,通过调用SetTimer(1,2500,NULL)来实现,并且添加WM_TIMER的消息响应函数OnTimer(),在响应函数中实现雷达图像的实时绘制。
4 电子海图与雷达图像的实时叠加
要将雷达图像实时叠加在电子海图上,选择合理、精度高的坐标变化方式,才能使静态目标完全吻合,动态目标实时准确定位。在这里,电子海图和雷达图像的绘制都采用了Visual C++的GDI或GDI+函数,无论是画图时的逻辑坐标还是显示时的设备坐标,均具有相同的单位,保证了绘图时各点对应位置的一致性;而两者分别使用的坐标变换则提高了坐标变换的精度及绘图的速度。
雷达图像叠加于电子海图,首先应准确定位雷达中心在海图上的位置,将雷达实时位置信息通过显示海图时的坐标变换(即实际地理坐标®墨卡托投影坐标®屏幕坐标),转换为屏幕坐标,从而实现船舶雷达实时动态的显示船舶航行时周围的所有动态和静态目标。
电子海图采用矢量图的方式加以显示,可以实现无极缩放、局部放大、漫游等功能,而雷达则采用描点方式显示,可根据用户需要选择不同量程,还能动态地标出目标的距离及方位。一方面,雷达图像能随着电子海图显示比例尺的变化而放大、缩小;另一方面,电子海图也能跟着雷达量程的变化而作出相应的改变。
对于用户关心的动态目标,可根据用户的选择来进行动态的平滑跟踪。同一海区的目标还可进行多目标的叠加显示,并通过不同的颜色来标识目标的状态。目标的动态数据信息,不仅可以实时地在海图上进行叠加显示,而且还可以在视窗中进行文本的对照显示,使用户直观地了解目标的航行信息。
图2是电子海图与雷达图像叠加显示的效果图(由于实验条件的限制,两者显示的是不同地区,但在适当的雷达量程和海图比例尺下,对应点坐标是相同的,符合叠加显示的要求)。
5 结束语
本系统在Visual C++6.0下利用GDI+技术实现了电子海图与雷达图像的实时叠加显示,较好地解决了电子海图、雷达图像单独显示和叠加显示的问题,达到了实时性的要求。与单一的电子海图相比,两者的叠加,不仅突出了电子海图系统的信息显示能力,而且提高了使用雷达的避碰能力。同时,使调度人员能够方便地了解到作业船舶在海上的准确位置,及时、直观地了解船舶动态,便于准确下达调度命令,减少了调度失误,从而在一定程度上减少了由调度人员的失误而引起的时间延误和作业难度的增加。
参考文献
1 周永余,陈永冰等.舰船电子海图显示与信息系统发展评述.船舶工程,2005.4.
2 许开宇.符合国际标准的电子海图显示和信息系统(ECDIS).船舶工程,1999.
3 石京东.雷达图像和电子海图系统的叠加应用.航海技术,2007.1.
4 毕红葵,王红等.光栅扫描雷达显示系统关键技术问题解决方案.2002.5.
5 夏志忠,马红,王淑静.船舶动态监测系统的实现.微计算机信息,1999.2.
6 [美]David J.Kruglinski.Inside Visual C++,4th Edition[M].清华大学出版社,1999.
作者:刘毅 索继东 曹兰兰 来源:航海技术