2. 国家气象信息中心
2. National Meteorological Information Center
卫星从太空向下对地球大气进行观测时,可以将地面上的海洋、高原、沙漠、冰雹、火灾、植被等及云系反映在遥感仪器上,形成图像。利用计算机对这些卫星探测资料作复原投影、进行拼接、叠加、计算等处理,这就是图像处理技术。为了保证卫星的安全运行,地面运行控制中心需要对卫星进行实时的监测和数据分析。运行控制系统中的图像子系统是通过接收、回放、数据处理等功能对卫星上的可见光与红外扫描辐射仪(VISSR)的工作进行质量分析和监视。为了更快捷而方便地实时接收卫星图像并进行质量分析,需要在该图像子系统中开发一个主控接口软件。通过生动清晰的控制界面、灵活的控件选项,接收卫星图像并对从磁盘或磁带上传输过来的图像资料进行各种回放显示、加网格、黑体定标、图像定位、提取周时间表等显示处理并进行质量分析。
主控接口软件是在SGI工作站上以UNIX操作系统为平台,运用X窗口系统、MOTIF窗口管理器和SGI公司的IRIS GL的图形技术,采用C语言编写的。该软件已运用在气象卫星资料的实时处理中。
1 主控软件的总体设计该软件主要是解决从卫星上接收图像并存储到磁盘上,再对卫星图像进行回显分析。因此,要有一些不同的功能模块对图像进行处理与分析。在进行总体设计时,把这些不同的功能模块作为一个个的子程序,由主程序来调用它们。
主程序运用Motif来设计界面(包括菜单条、下拉式菜单、按钮、背景等),因此具有Motif风格。主程序调用7个子程序模块, 即实时图像接收、图像原样回显(1:1)、图像采样回显(1:4)、图像回显加网格、图像黑体定标、图像定位显示和提取周时间表等。这些子程序是运用C语言结合GL来编写的。GL主要是用来开窗口、开双缓冲区、画网格、确定显示位置等。用C语言进行文件的读取、编写算法等。总的流程图见图 1。
主控界面是控制卫星图像实时接收、回显、定标、定位等操作的主接口界面。运用Motif设计了菜单条、下拉式菜单、按钮、显示区域等组件,每个菜单选项或按钮控制相应的功能操作。
主控界面设计中,菜单条包括两项“File”(文件)和“Image”(图像回显),每一项都有各自的下拉式菜单。“File”的下拉菜单包括“Receive”(实时接收图像)和“Exit”(退出)。当按下“Exit”时,会出现提示对话框以确定是否真的退出。“Image”的下拉菜单包括“image1:1”(原样回显1:1)、“image1:4”(采样回显1:4)、“ image_grid”(图像回显加网格)。当按下“image_grid”时会弹出交互式对话框,输入通道值显示图像。
另外,在主界面上设计了3个按钮依次排列在界面的右边,分别为:“samelola”(图像定位显示)、“line”(图像黑体定标)、“display_mam”(提取周时间表)。当按下“samelola”时,也会出现对话框提示输入定位区域的经度和纬度。其余部分设为标签区域。标签区域可显示一张图和文字。整个界面的背景色以及按钮和标签的颜色在初始时设定。
Xm的核心是一种在对象概念上的数据结构,每个对象叫做一个widget,通常译作组件,它是由状态和过程组成的。建立Motif程序的用户界面,主要是安排组件对象。用户界面是由程序的组件对象按照一定的层次、位置关系组合构成的。在程序设计之初,把整个界面的布局作一个完整的考虑,选择合适的组件来构造界面。此软件主控界面包括有外壳组件、容器组件、显示组件、菜单组件等,要实现这些组件还需要根据功能来定义一些便利函数。如:建立主窗口采用Xt-CreateManagedWidget便利函数来创建窗口;建立菜单条则使用XmCreateMenuBar便利函数;建立下拉菜单则稍复杂些,首先要通过定义数组建立下拉菜单项的名称,然后建立下拉菜单便利函数,在便利函数中创建每个菜单按钮对象widget,并建立其回调方法。建立下拉菜单便利函数具体方法如下:
Widget CreatePullmenu(parent) /*下拉菜单便利函数*/
Widget parent;
{ Widget pulldown;
pulldown=XmCreatePulldownMenu(parent, ”pulldown”, NULL, 0);
createMenubutt1(pulldown); /*调用菜单按钮子函数*/
return(pulldown); }
void CreateMenubutt1(parent) /*菜单按钮子函数,每个按钮注册回调函数*/
Widget parent;
{ button1=XwCreateManagedWidget(file_menu[0], xmPushButtonWidgetClass, parent, NULL, 0);
XtAddCallback(button, XmNactivateCallback, loadBC, NULL); /*loadBC为回调方法函数*/ }
2.2 子模块的设计图像处理分为实时处理和事后处理两种。实时处理是指卫星过境时实时接收并处理卫星发下的数据,卫星一过境处理也就完成。事后处理是指卫星过境后对存放在磁盘中的数据作进一步的处理。下面几个功能模块中接收图像为实时处理,其余均为事后处理。
2.2.1 图像实时接收处理实时处理指卫星过境时边接收边处理。卫星过境时可以自动接收卫星信号并跟踪。卫星一过境, 接收处理即完成。实时接收到的图像可逐条在监视器上显示或在激光传真机上出图。在接收图像过程中还具有切换通道功能和存盘功能。
图像数据行的格式为:
该功能模块中运用的C和G L的主要函数解决了打开接收设备、初始窗口、读图像数据、写文件、通道切换、滚屏处理、关闭文件等功能。例如:
① 打开接收设备
fd1=open(“/dev/vdk”, O_RDONLY);
② 初始窗口、设定正常模式
prefsize(xlen, ylen); /*设窗口大小*/
gid=winopen(“FY-2 VISSR IMAGE”); /*开窗口*/
doublebuffer(TURE); /*双缓冲区真*/
RGBmode(); /*RGB显示方式*/
frontbuffer(TRUE); backbuffer(TRUE); /*控制前/后缓冲区*/
czclear(0, 0); /*清屏*/
② 通道切换
图像数据行格式中包含7个通道,分别是红外1(红外通道)、红外2(水汽通道)、红外3(备份)、可见1、可见2、可见3、可见4。人工通道切换后将数据格式中相应的数据取出,经运算后显示在监视器上,从而形成图像。
③ 滚屏处理
由于窗口大小的限制不能完整地显示出实时接收的卫星图像,为了使得窗口以外的图像能够实时显示出来,需要进行滚屏处理。处理方法如下:
frontbuffer(TRUE); backbuffer(TRUE);
readsource(SRC_FRONT); /*将前缓冲区设为数据源*/
rectcopy(0, 0, xlen, ylen-1, 0, 0); /*拷贝前缓冲区大小*/
cmov2i(0, 0); /*设置后缓冲区开始位置*/
writeRGB(xlen, Buff, Buff, Buff); /*在屏幕上写像素点*/
swapbuffers(); /*交换前后两个缓冲区,以开始显示新的一页*/
2.2.2 图像回放显示回放显示是将接收时存入磁盘或磁带文件上的数据重新读出并显示在监视器上,回放处理与接收处理基本相同。回放显示可进行不同的比例显示,如1:1、1:4,也可以按照图像回显加网格的形式显示。不同比例的显示,主要与采样点的采集率有关。
① 原样回显1:1
原样回显与接收过程基本相同。所不同的是,接收时用open(“/dev/vdk”, O_RDONLY)来打开接收设备;回显时则用:
file[20]={“fy2MMDDTT.DAT”};/*接收时转存的数据文件*/
fd2=open(file, O_RDONLY);
② 采样回显1:4
采样回显1:4与原样回显1:1的不同之处在于采样点的采集率。1:4是从每4个数据点中取出一个,而不是每个都取,将这些取出的点经换算后显示在屏幕上,这样整个图像就变成原图像的1/4了。采样回显1:4的显示函数是display(8, 4, 2)。(图 2,见彩页)
③ 图像回显加网格
UNIX系统下使用的C版本有两种对文件的处理方法:缓冲文件系统和非缓冲文件系统。以上的实时接收、回显都是用非缓冲文件系统来处理的。非缓冲文件系统是指系统不自动开辟确定大小的缓冲区,而是由程序为每个文件设定缓冲区。而缓冲文件系统是指系统自动地在内存区为每一个正在使用的文件名开辟一个缓冲区。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区,然后再从缓冲区逐个地将数据送到程序数据区(给程序变量)[1]。在此功能模块中采用缓冲文件系统来处理。此过程中不能进行人工切换通道,不须进行滚屏处理。文件的打开、关闭、读、写等与非缓冲文件系统也稍有不同,分别为fopen、fread、fwrite和fclose。
虽然不能进行人工切换通道,但可以在该功能运行之前选择通道。也就是说,在菜单按钮按下后,出现一个对话窗口,用交互式对话来控制通道的选择。OSF/Moitf提供了许多对话组件,如:XmBulletinBoard(布告版)组件、XmFileSelectionBox(文件选择框)、XmMessageBox(信息提供)、XmSelectionBox(选择对话框)等。Motif还提供了便利对话,便利对话是可以由便利函数创建的一些组件组合,每一个便利对话都有一个对话外壳和一个作为它的子的对话组件,直接使用这些便利对话实现各种对话框,可以大大提高编程的效率。此功能则采用的是PromptDialog便利函数,它包括一个对话外壳和一个Selection Box,可以输入数字进行通道选择,缺省有OK、Apply、Cancel和Help 4个按键[2]。
加网格是将文件中定位网格的数据取出,长度为2500字,分25组,每组100字,按子传输识别字标识编排。数据取出后画在窗口中,以便检验图像位置是否正确。在设置好坐标点的坐标之后,用函数bgnline()表示画线操作的开始,函数endline()表示画线操作的结束(图 3,见彩页)。
图像定位即输入所需要的经纬度,经换算后确定位置,以1/1的分辨率显示所需要的区域范围并显示网格。输入经纬度需要有提示对话框,用法前面已经介绍过。需要注意的是对话框接收的是字符或字串。因此,要将字符串转换成浮点数,方可参加换算。
通过该模块实现了动态、交互式地从键盘输入经度和纬度, 任意定位到卫星图像上的某一区域, 显示出局部地区的图像。
2.2.4 图像黑体定标所谓定标,就是把扫描辐射仪对准一个参考源进行测量,以离散数字、曲线或函数形式建立辐射仪的电信号输出计数和辐射能之间的关系。这些关系以定标参数从星上发下。对于红外通道,定标计算是以星内黑体作为参考源。定标后红外图像表示亮度温度。
具体方法是将定标数据从图像数据文件的某行中读出,用曲线的形式画在窗口中,并且比较出最高值和最低值显示在曲线图上,以便校准。
2.2.5 提取周时间表周时间表即业务运行时间表,就是卫星一周每天的发图时间。每行内容为80字节,加起始符LF和回车换行符CR,共82字节,每个传送记录块长为328字节(每4行作为一个记录传送)。由于开的窗口没有自动换行的功能,造成记录重叠在一起。因此,必须在程序中予以控制。
具体办法为:
if (pbuf[j]==‘\n’) /*当读到回车换行符时*/
{ jj=jj+12;/*记录间隔使4行能够完全显示*/
cmov2i(20, 800-jj);} /*设置新的光标显示另一个记录*/
3 结束语卫星图像处理是卫星资料接收处理中的重要技术,内容繁多而且复杂。本软件只是对运控系统中的实际需要而开发的一个接口界面软件,使系统工作者能在工作站上方便而快捷地回放图像并进行实时监测和数据质量的分析。软件已研制成功,在气象卫星资料运行处理的监测中起到了较重要的作用。
[1] |
谭浩强. C程序设计[M]. 北京: 清华大学出版社, 1997: 268-269.
|
[2] |
张学工, 刘业新. Xwindow/Motif编程速成[M]. 北京: 清华大学出版社, 1998: 149-151.
|